On 19 February 2016 at 09:45, Yao, Jiewen <jiewen....@intel.com> wrote: > I can explain the reason on allocating <4G. It is because this data will be > used in PEI phase in S3 resume. > > On most X86 platform, PEI phase is 32bit, and DXE phase is 32bit or 64bit. So > we have to limit the allocation <4G. >
OK, got it. > Using ACPI version PCD looks strange here. Maybe another PCD, like > PcdDxeIplSwitchToLongMode? > But that does not tell us if we are running a 32-bit PEI, right? It only tells us if a 32-bit PEI should load a 32-bit DXE core on a 64-bit capable machine. > -----Original Message----- > From: Ard Biesheuvel [mailto:ard.biesheu...@linaro.org] > Sent: Friday, February 19, 2016 4:03 AM > To: edk2-devel@lists.01.org; Tian, Feng; Zeng, Star; > leif.lindh...@linaro.org; graeme.greg...@linaro.org; ler...@redhat.com; Fan, > Jeff; Yao, Jiewen > Cc: mark.rutl...@arm.com; Gao, Liming; samer.el-haj-mahm...@hpe.com; Ard > Biesheuvel > Subject: [PATCH v2 2/3] IntelFrameworkModulePkg: BdsDxe: only allocate below > 4 GB on ACPI 1.0 > > It is not entirely clear from the code why, but the reserved region for > storing performance data is allocated below 4 GB, and the variable to hold > the address of the allocation is called 'AcpiLowMemoryBase' > (which is the only mention of ACPI in the entire file). > > Let's make this allocation dependent on PcdAcpiExposedTableVersions as well, > since systems that can deal with ACPI table in high memory are also just as > likely to be able to deal with performance data in high memory. This prevents > memory fragmentation on systems that don't care about the 4 GB limit. > > Contributed-under: TianoCore Contribution Agreement 1.0 > Signed-off-by: Ard Biesheuvel <ard.biesheu...@linaro.org> > --- > IntelFrameworkModulePkg/Universal/BdsDxe/BdsDxe.inf | 1 + > IntelFrameworkModulePkg/Universal/BdsDxe/BdsEntry.c | 11 ++++++++++- > 2 files changed, 11 insertions(+), 1 deletion(-) > > diff --git a/IntelFrameworkModulePkg/Universal/BdsDxe/BdsDxe.inf > b/IntelFrameworkModulePkg/Universal/BdsDxe/BdsDxe.inf > index 6afb8a09df9c..38172780fb49 100644 > --- a/IntelFrameworkModulePkg/Universal/BdsDxe/BdsDxe.inf > +++ b/IntelFrameworkModulePkg/Universal/BdsDxe/BdsDxe.inf > @@ -215,6 +215,7 @@ [Pcd] > gEfiMdeModulePkgTokenSpaceGuid.PcdSetupVideoHorizontalResolution > ## CONSUMES > gEfiMdeModulePkgTokenSpaceGuid.PcdSetupVideoVerticalResolution > ## CONSUMES > gEfiMdeModulePkgTokenSpaceGuid.PcdErrorCodeSetVariable > ## CONSUMES > + gEfiMdeModulePkgTokenSpaceGuid.PcdAcpiExposedTableVersions > ## CONSUMES > > [Depex] > TRUE > diff --git a/IntelFrameworkModulePkg/Universal/BdsDxe/BdsEntry.c > b/IntelFrameworkModulePkg/Universal/BdsDxe/BdsEntry.c > index ae7ad2153c51..bf5bd6524a90 100644 > --- a/IntelFrameworkModulePkg/Universal/BdsDxe/BdsEntry.c > +++ b/IntelFrameworkModulePkg/Universal/BdsDxe/BdsEntry.c > @@ -22,6 +22,8 @@ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER > EXPRESS OR IMPLIED. > #include "Hotkey.h" > #include "HwErrRecSupport.h" > > +#include <Protocol/AcpiSystemDescriptionTable.h> > + > /// > /// BDS arch protocol instance initial value. > /// > @@ -474,14 +476,21 @@ BdsAllocateMemoryForPerformanceData ( > EFI_STATUS Status; > EFI_PHYSICAL_ADDRESS AcpiLowMemoryBase; > EDKII_VARIABLE_LOCK_PROTOCOL *VariableLock; > + EFI_ALLOCATE_TYPE AcpiTableAllocType; > > AcpiLowMemoryBase = 0x0FFFFFFFFULL; > > + if ((PcdGet32 (PcdAcpiExposedTableVersions) & EFI_ACPI_TABLE_VERSION_1_0B) > != 0) { > + AcpiTableAllocType = AllocateMaxAddress; } else { > + AcpiTableAllocType = AllocateAnyPages; } > + > // > // Allocate a block of memory that will contain performance data to OS. > // > Status = gBS->AllocatePages ( > - AllocateMaxAddress, > + AcpiTableAllocType, > EfiReservedMemoryType, > EFI_SIZE_TO_PAGES (PERF_DATA_MAX_LENGTH), > &AcpiLowMemoryBase > -- > 2.5.0 > _______________________________________________ edk2-devel mailing list edk2-devel@lists.01.org https://lists.01.org/mailman/listinfo/edk2-devel