On 2015-05-11 03:21:38, Laszlo Ersek wrote: > On 05/11/15 11:04, Fan, Jeff wrote: > > 2. The patch introduced two new files with the different BSD license > > header format from the other files in the same Package. I do not > > suggest to use the different BSD license header here. > > I don't have any choice in this matter -- only Intel has. The files in > question are almost verbatim copies (therefore, definitely derivative > works of): > > Quark_EDKII_v1.1.0/IA32FamilyCpuBasePkg/CpuArchDxe/MtrrSync.h > Quark_EDKII_v1.1.0/IA32FamilyCpuBasePkg/CpuArchDxe/MtrrSync.c > > and those are covered by Intel's copyright. I can not change the > copyright terms (3-clause BSDL) set forth by the copyright holder. There > are four options: > > (a) If Intel is willing to relicense these files under the 2-clause BSDL > (which most files in UefiCpuPkg are under, apparently), then everything > should be okay.
This would be nice for consistency of Intel's contributions to EDK II. Given Intel owns the copyright on the Quark code you referenced, I would think we ought to be able to retain the licensing consistency in EDK II. Unforunately, I'm not sure if it will be possible to do. I have a few more questions which I think will make incorporating this code with a separate license even more ugly: 1. I note that you didn't add a *second* license header block to the files you modified. Should you? * UefiCpuPkg/CpuDxe/CpuDxe.inf * UefiCpuPkg/CpuDxe/CpuDxe.c * UefiCpuPkg/UefiCpuPkg.dec 2. Does UefiCpuPkg/License.txt need to be updated to have both the 2-clause and 3-clause BSD licenses listed? -Jordan > (b) Otherwise, you could accept these files with their original 3-clause > BSDL licenses; it is permitted by "UefiCpuPkg/Contributions.txt". > > (c) None of the above works -- in this case we'll have to clone > UefiCpuPkg/CpuDxe under OvmfPkg, and (maybe?) put all of that CpuDxe > clone under the 3-clause BSDL. That would be a horrible outcome. > > (d) Finally, I can eliminate MTRR handling from my SMM work (see the > background above), ripping out chunks of code from the CpuMpDxe port and > the PiSmmCpuDxeSmm port. > > (Note, I'm reconstructing CpuMpDxe under a different name in OvmfPkg, > with only the ACPI_CPU_DATA / S3-related functionality anyway, but > MtrrTable *does* belong there.) > > Removing MTRR handling would be arguably the simplest, but (arguably) > the least correct thing to do as well. > > Thanks > Laszlo > > > Jordan, > > Any comments on new files' license header? > > > > Thanks! > > Jeff > > -----Original Message----- > > From: Laszlo Ersek [mailto:ler...@redhat.com] > > Sent: Saturday, May 09, 2015 2:52 AM > > To: edk2-devel@lists.sourceforge.net > > Cc: Fan, Jeff; Chen Fan; Justen, Jordan L > > Subject: [PATCH 08/11] UefiCpuPkg: CpuDxe: optionally save MTRR settings to > > AcpiNVS memory block > > > > The > > > > Quark_EDKII_v1.1.0/IA32FamilyCpuBasePkg/CpuArchDxe > > > > driver provides the following capability in its implementation of > > EFI_CPU_ARCH_PROTOCOL: whenever the SetMemoryAttributes() member is used > > (directly, or indirectly via gDS->SetMemorySpaceAttributes()) to change > > MTRR settings, the complete set of settings is immediately reflected to an > > AcpiNVS memory block. > > > > (The address of said block is published via a dynamic PCD.) > > > > This feature is necessary for supporting SMM-capable S3 resume, hence port > > it to UefiCpuPkg. In IA32FamilyCpuBasePkg the feature is always built in; > > here we make it controllable with a feature PCD. > > > > Cc: Jeff Fan <jeff....@intel.com> > > Cc: Chen Fan <chen.fan.f...@cn.fujitsu.com> > > Cc: Jordan Justen <jordan.l.jus...@intel.com> > > Contributed-under: TianoCore Contribution Agreement 1.0 > > Signed-off-by: Laszlo Ersek <ler...@redhat.com> > > --- > > UefiCpuPkg/CpuDxe/CpuDxe.inf | 6 + > > UefiCpuPkg/CpuDxe/MtrrSync.h | 86 ++++++++++++++ > > UefiCpuPkg/CpuDxe/CpuDxe.c | 17 +++ > > UefiCpuPkg/CpuDxe/MtrrSync.c | 118 ++++++++++++++++++++ > > UefiCpuPkg/UefiCpuPkg.dec | 11 ++ > > 5 files changed, 238 insertions(+) > > > > diff --git a/UefiCpuPkg/CpuDxe/CpuDxe.inf b/UefiCpuPkg/CpuDxe/CpuDxe.inf > > index 61bc55a..35e48e1 100644 > > --- a/UefiCpuPkg/CpuDxe/CpuDxe.inf > > +++ b/UefiCpuPkg/CpuDxe/CpuDxe.inf > > @@ -52,6 +52,8 @@ > > CpuGdt.h > > CpuMp.c > > CpuMp.h > > + MtrrSync.c > > + MtrrSync.h > > > > [Sources.IA32] > > Ia32/CpuAsm.asm | MSFT > > @@ -80,6 +82,10 @@ > > [Pcd] > > gUefiCpuPkgTokenSpaceGuid.PcdCpuMaxLogicalProcessorNumber ## CONSUMES > > gUefiCpuPkgTokenSpaceGuid.PcdCpuApStackSize ## CONSUMES > > + gUefiCpuPkgTokenSpaceGuid.PcdCpuMtrrTableAddress ## > > SOMETIMES_PRODUCES > > + > > +[FeaturePcd] > > + gUefiCpuPkgTokenSpaceGuid.PcdCpuSyncMtrrToAcpiNvs > > > > [Depex] > > TRUE > > diff --git a/UefiCpuPkg/CpuDxe/MtrrSync.h b/UefiCpuPkg/CpuDxe/MtrrSync.h > > new file mode 100644 index 0000000..1c20a32 > > --- /dev/null > > +++ b/UefiCpuPkg/CpuDxe/MtrrSync.h > > @@ -0,0 +1,86 @@ > > +/** @file > > + > > + Include file for MTRR synchronzation. > > + > > + Copyright (C) 2015, Red Hat, Inc. > > + Copyright (c) 2013-2015 Intel Corporation. > > + > > + Redistribution and use in source and binary forms, with or without > > + modification, are permitted provided that the following conditions > > + are met: > > + > > + * Redistributions of source code must retain the above copyright > > + notice, this list of conditions and the following disclaimer. > > + * Redistributions in binary form must reproduce the above copyright > > + notice, this list of conditions and the following disclaimer in the > > + documentation and/or other materials provided with the distribution. > > + * Neither the name of Intel Corporation nor the names of its > > + contributors may be used to endorse or promote products derived from > > + this software without specific prior written permission. > > + > > + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS > > + "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT > > + LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR > > + A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT > > + OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, > > + SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT > > + LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, > > + DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY > > + THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT > > + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE > > + OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. > > + > > + Module Name: MtrrSync.h > > + > > +**/ > > + > > +#ifndef _EFI_MTRR_SYNC_H_ > > +#define _EFI_MTRR_SYNC_H_ > > + > > +#include <Library/MtrrLib.h> > > + > > +extern MTRR_SETTINGS *mMtrrTable; > > + > > +/** > > + Initialize memory region for MTRR data. > > + > > + This function allocates ACPI NVS memory for MTRR data, and fills the > > + region with current MTRR data. Each time MTRRs are written, this > > + memory region will be updated accordingly. > > + > > +**/ > > +VOID > > +InitializeMtrrData ( > > + VOID > > + ); > > + > > +/** > > + Synchronzies up the MTRR values with BSP for calling processor. > > + > > + This function synchronzies up the MTRR values with BSP for calling > > processor. > > + > > + @param Buffer Mtrr table address. > > + > > +**/ > > +VOID > > +EFIAPI > > +LoadMtrrData ( > > + VOID *Buffer > > + ); > > + > > +/** > > + Allocate EfiACPIMemoryNVS below 4G memory address. > > + > > + This function allocates EfiACPIMemoryNVS below 4G memory address. > > + > > + @param Size Size of memory to allocate. > > + > > + @return Allocated address for output. > > + > > +**/ > > +VOID* > > +AllocateAcpiNvsMemoryBelow4G ( > > + IN UINTN Size > > + ); > > +#endif > > diff --git a/UefiCpuPkg/CpuDxe/CpuDxe.c b/UefiCpuPkg/CpuDxe/CpuDxe.c index > > c9df4e1..3d11807 100644 > > --- a/UefiCpuPkg/CpuDxe/CpuDxe.c > > +++ b/UefiCpuPkg/CpuDxe/CpuDxe.c > > @@ -14,6 +14,7 @@ > > > > #include "CpuDxe.h" > > #include "CpuMp.h" > > +#include "MtrrSync.h" > > > > // > > // Global Variables > > @@ -405,6 +406,14 @@ CpuSetMemoryAttributes ( > > CacheType > > ); > > > > + if (!RETURN_ERROR (Status)) { > > + if (FeaturePcdGet (PcdCpuSyncMtrrToAcpiNvs)) { > > + // > > + // Sync saved MTRR settings > > + // > > + MtrrGetAllMtrrs (mMtrrTable); > > + } > > + } > > return (EFI_STATUS) Status; > > } > > > > @@ -870,6 +879,14 @@ InitializeCpu ( > > // > > ProgramVirtualWireMode (); > > > > + if (FeaturePcdGet (PcdCpuSyncMtrrToAcpiNvs)) { > > + // > > + // Allocates ACPI NVS memory for MTRR data. > > + // > > + InitializeMtrrData (); > > + MtrrGetAllMtrrs (mMtrrTable); > > + } > > + > > // > > // Install CPU Architectural Protocol > > // > > diff --git a/UefiCpuPkg/CpuDxe/MtrrSync.c b/UefiCpuPkg/CpuDxe/MtrrSync.c > > new file mode 100644 index 0000000..8538014 > > --- /dev/null > > +++ b/UefiCpuPkg/CpuDxe/MtrrSync.c > > @@ -0,0 +1,118 @@ > > +/** @file > > + > > + Code for MTRR synchronzation. > > + > > + Copyright (C) 2015, Red Hat, Inc. > > + Copyright (c) 2013-2015 Intel Corporation. > > + > > + Redistribution and use in source and binary forms, with or without > > + modification, are permitted provided that the following conditions > > + are met: > > + > > + * Redistributions of source code must retain the above copyright > > + notice, this list of conditions and the following disclaimer. > > + * Redistributions in binary form must reproduce the above copyright > > + notice, this list of conditions and the following disclaimer in the > > + documentation and/or other materials provided with the distribution. > > + * Neither the name of Intel Corporation nor the names of its > > + contributors may be used to endorse or promote products derived from > > + this software without specific prior written permission. > > + > > + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS > > + "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT > > + LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR > > + A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT > > + OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, > > + SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT > > + LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, > > + DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY > > + THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT > > + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE > > + OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. > > + > > + Module Name: MtrrSync.c > > + > > +**/ > > + > > +#include <Library/UefiBootServicesTableLib.h> > > +#include <Library/DebugLib.h> > > +#include <Library/BaseMemoryLib.h> > > + > > +#include "MtrrSync.h" > > + > > +MTRR_SETTINGS *mMtrrTable; > > + > > +/** > > + Initialize memory region for MTRR data. > > + > > + This function allocates ACPI NVS memory for MTRR data. > > + Each time MTRRs are written, this memory region will be updated > > accordingly. > > + > > +**/ > > +VOID > > +InitializeMtrrData ( > > + VOID > > + ) > > +{ > > + // > > + // Allocate memory for fixed MTRRs, variable MTRRs and MTRR_DEF_TYPE > > + // > > + mMtrrTable = AllocateAcpiNvsMemoryBelow4G (sizeof (MTRR_SETTINGS)); > > + > > + PcdSet64 (PcdCpuMtrrTableAddress, (UINT64) (UINTN) mMtrrTable); } > > + > > +/** > > + Synchronzies up the MTRR values with BSP for calling processor. > > + > > + This function synchronzies up the MTRR values with BSP for calling > > processor. > > + > > + @param Buffer Mtrr table address. > > + > > +**/ > > +VOID > > +EFIAPI > > +LoadMtrrData ( > > + VOID *Buffer > > + ) > > +{ > > + MtrrSetAllMtrrs (Buffer); > > +} > > + > > +/** > > + Allocate EfiACPIMemoryNVS below 4G memory address. > > + > > + This function allocates EfiACPIMemoryNVS below 4G memory address. > > + > > + @param Size Size of memory to allocate. > > + > > + @return Allocated address for output. > > + > > +**/ > > +VOID* > > +AllocateAcpiNvsMemoryBelow4G ( > > + IN UINTN Size > > + ) > > +{ > > + UINTN Pages; > > + EFI_PHYSICAL_ADDRESS Address; > > + EFI_STATUS Status; > > + VOID* Buffer; > > + > > + Pages = EFI_SIZE_TO_PAGES (Size); > > + Address = 0xffffffff; > > + > > + Status = gBS->AllocatePages ( > > + AllocateMaxAddress, > > + EfiACPIMemoryNVS, > > + Pages, > > + &Address > > + ); > > + ASSERT_EFI_ERROR (Status); > > + > > + Buffer = (VOID *) (UINTN) Address; > > + ZeroMem (Buffer, Size); > > + > > + return Buffer; > > +} > > diff --git a/UefiCpuPkg/UefiCpuPkg.dec b/UefiCpuPkg/UefiCpuPkg.dec index > > 14a0bf2..5297c3b 100644 > > --- a/UefiCpuPkg/UefiCpuPkg.dec > > +++ b/UefiCpuPkg/UefiCpuPkg.dec > > @@ -62,5 +62,16 @@ > > # @Prompt Configure stack size for Application Processor (AP) > > gUefiCpuPkgTokenSpaceGuid.PcdCpuApStackSize|0x8000|UINT32|0x00000003 > > > > +[PcdsFeatureFlag] > > + ## This flag controls whether the EFI_CPU_ARCH_PROTOCOL > > +implementation > > + # reflects the updated MTRR settings to a persistent (AcpiNVS) memory > > block. > > + # @Prompt Keep MTRR settings reflected to an AcpiNVS memory block > > + > > +gUefiCpuPkgTokenSpaceGuid.PcdCpuSyncMtrrToAcpiNvs|FALSE|BOOLEAN|0x00000 > > +004 > > + > > +[PcdsDynamic, PcdsDynamicEx] > > + ## If PcdCpuSyncMtrrToAcpiNvs is TRUE, the PCD below will be set to > > +the > > + # address of the AcpiNVS memory block in question. > > + > > +gUefiCpuPkgTokenSpaceGuid.PcdCpuMtrrTableAddress|0x0|UINT64|0x00000005 > > + > > [UserExtensions.TianoCore."ExtraFiles"] > > UefiCpuPkgExtra.uni > > -- > > 1.8.3.1 > > > > > ------------------------------------------------------------------------------ One dashboard for servers and applications across Physical-Virtual-Cloud Widest out-of-the-box monitoring support with 50+ applications Performance metrics, stats and reports that give you Actionable Insights Deep dive visibility with transaction tracing using APM Insight. http://ad.doubleclick.net/ddm/clk/290420510;117567292;y _______________________________________________ edk2-devel mailing list edk2-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/edk2-devel