X-Git-Url: https://git.proxmox.com/?p=mirror_edk2.git;a=blobdiff_plain;f=OvmfPkg%2FPlatformPei%2FMemDetect.c;h=c198c3846fdcf68a4757c9e029b87e27dfb26099;hp=b11631127ba9cb944ea16d5b13f118aa5de30d11;hb=bd386eaf86f1f55dd28d2c5b26a8c80b2a9002a8;hpb=2818c158de6a164d012e6afb0fc145656aed4e4b diff --git a/OvmfPkg/PlatformPei/MemDetect.c b/OvmfPkg/PlatformPei/MemDetect.c index b11631127b..c198c3846f 100644 --- a/OvmfPkg/PlatformPei/MemDetect.c +++ b/OvmfPkg/PlatformPei/MemDetect.c @@ -99,16 +99,21 @@ PublishPeiMemory ( UINT64 MemorySize; UINT64 LowerMemorySize; - LowerMemorySize = GetSystemMemorySizeBelow4gb (); - - // - // Determine the range of memory to use during PEI - // - MemoryBase = PcdGet32 (PcdOvmfDxeMemFvBase) + PcdGet32 (PcdOvmfDxeMemFvSize); - MemorySize = LowerMemorySize - MemoryBase; - if (MemorySize > SIZE_64MB) { - MemoryBase = LowerMemorySize - SIZE_64MB; - MemorySize = SIZE_64MB; + if (mBootMode == BOOT_ON_S3_RESUME) { + MemoryBase = PcdGet32 (PcdS3AcpiReservedMemoryBase); + MemorySize = PcdGet32 (PcdS3AcpiReservedMemorySize); + } else { + LowerMemorySize = GetSystemMemorySizeBelow4gb (); + + // + // Determine the range of memory to use during PEI + // + MemoryBase = PcdGet32 (PcdOvmfDxeMemFvBase) + PcdGet32 (PcdOvmfDxeMemFvSize); + MemorySize = LowerMemorySize - MemoryBase; + if (MemorySize > SIZE_64MB) { + MemoryBase = LowerMemorySize - SIZE_64MB; + MemorySize = SIZE_64MB; + } } // @@ -142,18 +147,22 @@ QemuInitializeRam ( LowerMemorySize = GetSystemMemorySizeBelow4gb (); UpperMemorySize = GetSystemMemorySizeAbove4gb (); - // - // Create memory HOBs - // - AddMemoryRangeHob (BASE_1MB, LowerMemorySize); - AddMemoryRangeHob (0, BASE_512KB + BASE_128KB); + if (mBootMode != BOOT_ON_S3_RESUME) { + // + // Create memory HOBs + // + AddMemoryRangeHob (BASE_1MB, LowerMemorySize); + AddMemoryRangeHob (0, BASE_512KB + BASE_128KB); + } MtrrSetMemoryAttribute (BASE_1MB, LowerMemorySize - BASE_1MB, CacheWriteBack); MtrrSetMemoryAttribute (0, BASE_512KB + BASE_128KB, CacheWriteBack); if (UpperMemorySize != 0) { - AddUntestedMemoryBaseSizeHob (BASE_4GB, UpperMemorySize); + if (mBootMode != BOOT_ON_S3_RESUME) { + AddUntestedMemoryBaseSizeHob (BASE_4GB, UpperMemorySize); + } MtrrSetMemoryAttribute (BASE_4GB, UpperMemorySize, CacheWriteBack); } @@ -171,7 +180,17 @@ InitializeRamRegions ( if (!mXen) { QemuInitializeRam (); } else { - DEBUG ((EFI_D_INFO, "Using memory map provided by Xen\n")); XenPublishRamRegions (); } + + if (mS3Supported && mBootMode != BOOT_ON_S3_RESUME) { + // + // 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), + EfiACPIMemoryNVS + ); + } }