On 2016-07-13 07:36:56, Laszlo Ersek wrote: > Move the permanent PEI memory for the S3 resume boot path to the top of > the low RAM (just below TSEG if the SMM driver stack is included in the > build). The new size is derived from CpuMpPei's approximate memory demand. > > Save the base address and the size in new global variables, regardless of > the boot path. On the normal boot path, use these variables for covering > the area with EfiACPIMemoryNVS type memory. > > PcdS3AcpiReservedMemoryBase and PcdS3AcpiReservedMemorySize become unused > in PlatformPei; remove them. > > Cc: Jeff Fan <jeff....@intel.com> > Cc: Jordan Justen <jordan.l.jus...@intel.com> > Cc: Michael Kinney <michael.d.kin...@intel.com> > Contributed-under: TianoCore Contribution Agreement 1.0 > Signed-off-by: Laszlo Ersek <ler...@redhat.com> > Reviewed-by: Jeff Fan <jeff....@intel.com> > --- > > Notes: > v2: > - new in v2 [Jordan, Jeff] > > OvmfPkg/PlatformPei/PlatformPei.inf | 3 +- > OvmfPkg/PlatformPei/MemDetect.c | 39 ++++++++++++++------ > 2 files changed, 28 insertions(+), 14 deletions(-) > > diff --git a/OvmfPkg/PlatformPei/PlatformPei.inf > b/OvmfPkg/PlatformPei/PlatformPei.inf > index 3556404017fc..229831b10da0 100644 > --- a/OvmfPkg/PlatformPei/PlatformPei.inf > +++ b/OvmfPkg/PlatformPei/PlatformPei.inf > @@ -65,7 +65,6 @@ [Pcd] > gUefiOvmfPkgTokenSpaceGuid.PcdOvmfPeiMemFvSize > gUefiOvmfPkgTokenSpaceGuid.PcdOvmfDxeMemFvBase > gUefiOvmfPkgTokenSpaceGuid.PcdOvmfDxeMemFvSize > - gUefiOvmfPkgTokenSpaceGuid.PcdS3AcpiReservedMemoryBase > gUefiOvmfPkgTokenSpaceGuid.PcdOvmfSecPeiTempRamBase > gUefiOvmfPkgTokenSpaceGuid.PcdOvmfSecPeiTempRamSize > gUefiOvmfPkgTokenSpaceGuid.PcdOvmfSecPageTablesBase > @@ -82,7 +81,6 @@ [Pcd] > gUefiOvmfPkgTokenSpaceGuid.PcdPciMmio64Size > gUefiOvmfPkgTokenSpaceGuid.PcdOvmfDecompressionScratchEnd > gUefiOvmfPkgTokenSpaceGuid.PcdQ35TsegMbytes > - gEfiIntelFrameworkModulePkgTokenSpaceGuid.PcdS3AcpiReservedMemorySize > gEfiMdePkgTokenSpaceGuid.PcdGuidedExtractHandlerTableAddress > gEfiMdeModulePkgTokenSpaceGuid.PcdVariableStoreSize > gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageFtwSpareSize > @@ -95,6 +93,7 @@ [Pcd] > gEfiMdeModulePkgTokenSpaceGuid.PcdPropertiesTableEnable > gEfiMdeModulePkgTokenSpaceGuid.PcdAcpiS3Enable > gUefiCpuPkgTokenSpaceGuid.PcdCpuLocalApicBaseAddress > + gUefiCpuPkgTokenSpaceGuid.PcdCpuMaxLogicalProcessorNumber > > [FixedPcd] > gEfiMdePkgTokenSpaceGuid.PcdPciExpressBaseAddress > diff --git a/OvmfPkg/PlatformPei/MemDetect.c b/OvmfPkg/PlatformPei/MemDetect.c > index d59b461547c5..7129ed26fa3e 100644 > --- a/OvmfPkg/PlatformPei/MemDetect.c > +++ b/OvmfPkg/PlatformPei/MemDetect.c > @@ -39,6 +39,9 @@ Module Name: > > UINT8 mPhysMemAddressWidth; > > +STATIC UINT32 mS3AcpiReservedMemoryBase; > +STATIC UINT32 mS3AcpiReservedMemorySize; > + > UINT32 > GetSystemMemorySizeBelow4gb ( > VOID > @@ -335,18 +338,30 @@ PublishPeiMemory ( > UINT64 LowerMemorySize; > UINT32 PeiMemoryCap; > > + LowerMemorySize = GetSystemMemorySizeBelow4gb (); > + if (FeaturePcdGet (PcdSmmSmramRequire)) { > + // > + // TSEG is chipped from the end of low RAM > + // > + LowerMemorySize -= FixedPcdGet8 (PcdQ35TsegMbytes) * SIZE_1MB; > + } > + > + // > + // If S3 is supported, then the S3 permanent PEI memory is placed next, > + // downwards. Its size is primarily dictated by CpuMpPei. The formula below > + // is an approximation. > + // > + if (mS3Supported) { > + mS3AcpiReservedMemorySize = SIZE_512KB + > + PcdGet32 (PcdCpuMaxLogicalProcessorNumber) * SIZE_32KB;
Maybe use PcdCpuApStackSize rather than SIZE_32KB? Is there an chance that with OVMF's modest usage of PEI MP, perhaps we could get by with a smaller stack size per processor? 4 or 8 KB? This would reduce 8MB down to 1 or 2MB. Maybe we could use a separate PcdPeiCpuApStackSize for PEI? What do think Jeff/Mike? I think OVMF is more sensitive to the size, since we try to support 255 processors. Series Reviewed-by: Jordan Justen <jordan.l.jus...@intel.com> > + mS3AcpiReservedMemoryBase = LowerMemorySize - mS3AcpiReservedMemorySize; > + LowerMemorySize = mS3AcpiReservedMemoryBase; > + } > + > if (mBootMode == BOOT_ON_S3_RESUME) { > - MemoryBase = PcdGet32 (PcdS3AcpiReservedMemoryBase); > - MemorySize = PcdGet32 (PcdS3AcpiReservedMemorySize); > + MemoryBase = mS3AcpiReservedMemoryBase; > + MemorySize = mS3AcpiReservedMemorySize; > } else { > - LowerMemorySize = GetSystemMemorySizeBelow4gb (); > - if (FeaturePcdGet (PcdSmmSmramRequire)) { > - // > - // TSEG is chipped from the end of low RAM > - // > - LowerMemorySize -= FixedPcdGet8 (PcdQ35TsegMbytes) * SIZE_1MB; > - } > - > PeiMemoryCap = GetPeiMemoryCap (); > DEBUG ((EFI_D_INFO, "%a: mPhysMemAddressWidth=%d PeiMemoryCap=%u KB\n", > __FUNCTION__, mPhysMemAddressWidth, PeiMemoryCap >> 10)); > @@ -514,8 +529,8 @@ InitializeRamRegions ( > // This is the memory range that will be used for PEI on S3 resume > // > BuildMemoryAllocationHob ( > - (EFI_PHYSICAL_ADDRESS)(UINTN) PcdGet32 (PcdS3AcpiReservedMemoryBase), > - (UINT64)(UINTN) PcdGet32 (PcdS3AcpiReservedMemorySize), > + mS3AcpiReservedMemoryBase, > + mS3AcpiReservedMemorySize, > EfiACPIMemoryNVS > ); > > -- > 1.8.3.1 > > _______________________________________________ edk2-devel mailing list edk2-devel@lists.01.org https://lists.01.org/mailman/listinfo/edk2-devel