summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBenjamin Doron <benjamin.doron00@gmail.com>2023-03-31 16:41:25 -0400
committermergify[bot] <37929162+mergify[bot]@users.noreply.github.com>2023-04-12 11:50:30 +0000
commitdc5f2905ebfdf68ae28ce1081d435af0f8641dd9 (patch)
treef73b0d31e77bf3f98a77a347c8476e78f4acdc05
parentb991aec0509f24ae7573d732ba337549ecee310c (diff)
downloadedk2-dc5f2905ebfdf68ae28ce1081d435af0f8641dd9.tar.gz
edk2-dc5f2905ebfdf68ae28ce1081d435af0f8641dd9.tar.bz2
edk2-dc5f2905ebfdf68ae28ce1081d435af0f8641dd9.zip
UefiPayloadPkg: Always build MemoryTypeInformation HOB for DXE GCD
MemoryType information assists GCD with defragmenting the memory map. When the DXE core starts, GCD adds memory descriptors for the resource descriptors HOBs. This allocates heap space which can be reused later as the bins by memory type. It seems memory allocation prefers low ranges. It seems "below 4G" is an artifact of this heap reuse. However, the memory type information determines the DXE core's `MinimalMemorySizeNeeded`, determining which system memory descriptor HOB may be used by DXE. Furthermore, it's important that the memory type information be correct, for an S4 memory map. Therefore, follow other bootloaders, such as [MinPlatform][1], and do this unconditionally. As of [edk2-stable202011][2], it was. [1]: https://github.com/tianocore/edk2-platforms/blob/b6f96743891be51541184bf61dd2970c008e2c43/Platform/Intel/MinPlatformPkg/PlatformInit/PlatformInitPei/PlatformInitPreMem.c#L164-L201 [2]: https://github.com/tianocore/edk2/blob/edk2-stable202011/UefiPayloadPkg/BlSupportPei/BlSupportPei.c#L462-L466 Cc: Guo Dong <guo.dong@intel.com> Cc: Ray Ni <ray.ni@intel.com> Cc: Sean Rhodes <sean@starlabs.systems> Cc: James Lu <james.lu@intel.com> Cc: Gua Guo <gua.guo@intel.com> Reviewed-by: Sean Rhodes <sean@starlabs.systems> Signed-off-by: Benjamin Doron <benjamin.doron00@gmail.com>
-rw-r--r--UefiPayloadPkg/UefiPayloadEntry/UefiPayloadEntry.c36
-rw-r--r--UefiPayloadPkg/UefiPayloadEntry/UefiPayloadEntry.inf2
-rw-r--r--UefiPayloadPkg/UefiPayloadPkg.dec3
-rw-r--r--UefiPayloadPkg/UefiPayloadPkg.dsc2
4 files changed, 8 insertions, 35 deletions
diff --git a/UefiPayloadPkg/UefiPayloadEntry/UefiPayloadEntry.c b/UefiPayloadPkg/UefiPayloadEntry/UefiPayloadEntry.c
index 780348eadf..030a5baed9 100644
--- a/UefiPayloadPkg/UefiPayloadEntry/UefiPayloadEntry.c
+++ b/UefiPayloadPkg/UefiPayloadEntry/UefiPayloadEntry.c
@@ -20,30 +20,6 @@ EFI_MEMORY_TYPE_INFORMATION mDefaultMemoryTypeInformation[] = {
};
/**
- Function to reserve memory below 4GB for EDKII Modules.
-
- This causes the DXE to dispatch everything under 4GB and allows Operating
- System's that require EFI_LOADED_IMAGE to be under 4GB to start.
- e.g. Xen hypervisor used in Qubes.
-**/
-VOID
-ForceModulesBelow4G (
- VOID
- )
-{
- DEBUG ((DEBUG_INFO, "Building hob to restrict memory resorces to below 4G.\n"));
-
- //
- // Create Memory Type Information HOB
- //
- BuildGuidDataHob (
- &gEfiMemoryTypeInformationGuid,
- mDefaultMemoryTypeInformation,
- sizeof (mDefaultMemoryTypeInformation)
- );
-}
-
-/**
Callback function to build resource descriptor HOB
This function build a HOB based on the memory map entry info.
@@ -472,10 +448,14 @@ _ModuleEntryPoint (
// Build other HOBs required by DXE
BuildGenericHob ();
- // Create a HOB to make resources for EDKII modules below 4G
- if (!FixedPcdGetBool (PcdDispatchModuleAbove4GMemory)) {
- ForceModulesBelow4G ();
- }
+ //
+ // Create Memory Type Information HOB
+ //
+ BuildGuidDataHob (
+ &gEfiMemoryTypeInformationGuid,
+ mDefaultMemoryTypeInformation,
+ sizeof (mDefaultMemoryTypeInformation)
+ );
// Load the DXE Core
Status = LoadDxeCore (&DxeCoreEntryPoint);
diff --git a/UefiPayloadPkg/UefiPayloadEntry/UefiPayloadEntry.inf b/UefiPayloadPkg/UefiPayloadEntry/UefiPayloadEntry.inf
index d47e8e76cf..e2af8a4b7c 100644
--- a/UefiPayloadPkg/UefiPayloadEntry/UefiPayloadEntry.inf
+++ b/UefiPayloadPkg/UefiPayloadEntry/UefiPayloadEntry.inf
@@ -96,5 +96,3 @@
gEfiMdeModulePkgTokenSpaceGuid.PcdDxeNxMemoryProtectionPolicy ## SOMETIMES_CONSUMES
gEfiMdeModulePkgTokenSpaceGuid.PcdImageProtectionPolicy ## SOMETIMES_CONSUMES
- gUefiPayloadPkgTokenSpaceGuid.PcdDispatchModuleAbove4GMemory
-
diff --git a/UefiPayloadPkg/UefiPayloadPkg.dec b/UefiPayloadPkg/UefiPayloadPkg.dec
index 7d61d6eeae..2ed7351370 100644
--- a/UefiPayloadPkg/UefiPayloadPkg.dec
+++ b/UefiPayloadPkg/UefiPayloadPkg.dec
@@ -82,9 +82,6 @@ gUefiPayloadPkgTokenSpaceGuid.PcdSystemMemoryUefiRegionSize|0x04000000|UINT32|0x
gUefiPayloadPkgTokenSpaceGuid.PcdPcdDriverFile|{ 0x57, 0x72, 0xcf, 0x80, 0xab, 0x87, 0xf9, 0x47, 0xa3, 0xfe, 0xD5, 0x0B, 0x76, 0xd8, 0x95, 0x41 }|VOID*|0x00000018
-# Above 4G Memory
-gUefiPayloadPkgTokenSpaceGuid.PcdDispatchModuleAbove4GMemory|TRUE|BOOLEAN|0x00000019
-
# Boot Manager Key
gUefiPayloadPkgTokenSpaceGuid.PcdBootManagerEscape|FALSE|BOOLEAN|0x00000020
diff --git a/UefiPayloadPkg/UefiPayloadPkg.dsc b/UefiPayloadPkg/UefiPayloadPkg.dsc
index bca5d3f335..9847f189ff 100644
--- a/UefiPayloadPkg/UefiPayloadPkg.dsc
+++ b/UefiPayloadPkg/UefiPayloadPkg.dsc
@@ -34,7 +34,6 @@
DEFINE SECURITY_STUB_ENABLE = TRUE
DEFINE SMM_SUPPORT = FALSE
DEFINE PLATFORM_BOOT_TIMEOUT = 3
- DEFINE ABOVE_4G_MEMORY = TRUE
DEFINE BOOT_MANAGER_ESCAPE = FALSE
DEFINE ATA_ENABLE = TRUE
DEFINE SD_ENABLE = TRUE
@@ -442,7 +441,6 @@
!endif
gEfiMdeModulePkgTokenSpaceGuid.PcdSdMmcGenericTimeoutValue|$(SD_MMC_TIMEOUT)
- gUefiPayloadPkgTokenSpaceGuid.PcdDispatchModuleAbove4GMemory|$(ABOVE_4G_MEMORY)
gUefiPayloadPkgTokenSpaceGuid.PcdBootManagerEscape|$(BOOT_MANAGER_ESCAPE)
gEfiMdePkgTokenSpaceGuid.PcdMaximumUnicodeStringLength|1800000