summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGuo Dong <guo.dong@intel.com>2025-04-16 14:10:59 -0700
committermergify[bot] <37929162+mergify[bot]@users.noreply.github.com>2025-04-22 00:32:00 +0000
commit238dfc54d0f5b1bb3646238a49d9fc43cb3f4141 (patch)
tree90ab680c7ea3d45beb36b695ed0cf4e2dea76644
parent19c6189f5446c9891a0fa0d8c4d8004896e70cb1 (diff)
downloadedk2-238dfc54d0f5b1bb3646238a49d9fc43cb3f4141.zip
edk2-238dfc54d0f5b1bb3646238a49d9fc43cb3f4141.tar.gz
edk2-238dfc54d0f5b1bb3646238a49d9fc43cb3f4141.tar.bz2
UefiPayloadPkg: Add MemoryTypeInformation HOB
MemoryTypeInformation HOB was built in FD and FIT image format UEFI payload. But this HOB was not built in ELF image format UEFI payload. Adding this HOB for ELF image format to keep payload consistent in different image format. When this HOB is missing, DXE/SMM driver might be dispatched above 4GB and MemoryType information HOB assists GCD with defragmenting the memory map. Signed-off-by: Guo Dong <guo.dong@intel.com>
-rw-r--r--UefiPayloadPkg/UefiPayloadEntry/UniversalPayloadEntry.c22
-rw-r--r--UefiPayloadPkg/UefiPayloadEntry/UniversalPayloadEntry.inf5
2 files changed, 26 insertions, 1 deletions
diff --git a/UefiPayloadPkg/UefiPayloadEntry/UniversalPayloadEntry.c b/UefiPayloadPkg/UefiPayloadEntry/UniversalPayloadEntry.c
index 5b864ee..9c3f484 100644
--- a/UefiPayloadPkg/UefiPayloadEntry/UniversalPayloadEntry.c
+++ b/UefiPayloadPkg/UefiPayloadEntry/UniversalPayloadEntry.c
@@ -4,7 +4,7 @@
SPDX-License-Identifier: BSD-2-Clause-Patent
**/
-
+#include <Guid/MemoryTypeInformation.h>
#include "UefiPayloadEntry.h"
#define MEMORY_ATTRIBUTE_MASK (EFI_RESOURCE_ATTRIBUTE_PRESENT | \
@@ -35,6 +35,15 @@ PrintHob (
IN CONST VOID *HobStart
);
+EFI_MEMORY_TYPE_INFORMATION mDefaultMemoryTypeInformation[] = {
+ { EfiACPIReclaimMemory, FixedPcdGet32 (PcdMemoryTypeEfiACPIReclaimMemory) },
+ { EfiACPIMemoryNVS, FixedPcdGet32 (PcdMemoryTypeEfiACPIMemoryNVS) },
+ { EfiReservedMemoryType, FixedPcdGet32 (PcdMemoryTypeEfiReservedMemoryType) },
+ { EfiRuntimeServicesData, FixedPcdGet32 (PcdMemoryTypeEfiRuntimeServicesData) },
+ { EfiRuntimeServicesCode, FixedPcdGet32 (PcdMemoryTypeEfiRuntimeServicesCode) },
+ { EfiMaxMemoryType, 0 }
+};
+
/**
Some bootloader may pass a pcd database, and UPL also contain a PCD database.
Dxe PCD driver has the assumption that the two PCD database can be catenated and
@@ -482,6 +491,17 @@ _ModuleEntryPoint (
Status = BuildHobs (BootloaderParameter, &DxeFv);
ASSERT_EFI_ERROR (Status);
+ //
+ // Create Memory Type Information HOB
+ //
+ if (GetFirstGuidHob (&gEfiMemoryTypeInformationGuid) == NULL) {
+ BuildGuidDataHob (
+ &gEfiMemoryTypeInformationGuid,
+ mDefaultMemoryTypeInformation,
+ sizeof (mDefaultMemoryTypeInformation)
+ );
+ }
+
FixUpPcdDatabase (DxeFv);
Status = UniversalLoadDxeCore (DxeFv, &DxeCoreEntryPoint);
ASSERT_EFI_ERROR (Status);
diff --git a/UefiPayloadPkg/UefiPayloadEntry/UniversalPayloadEntry.inf b/UefiPayloadPkg/UefiPayloadEntry/UniversalPayloadEntry.inf
index 2cd46c4..8f6f059 100644
--- a/UefiPayloadPkg/UefiPayloadEntry/UniversalPayloadEntry.inf
+++ b/UefiPayloadPkg/UefiPayloadEntry/UniversalPayloadEntry.inf
@@ -84,6 +84,11 @@
gUefiPayloadPkgTokenSpaceGuid.PcdPayloadFdMemBase
gUefiPayloadPkgTokenSpaceGuid.PcdPayloadFdMemSize
gUefiPayloadPkgTokenSpaceGuid.PcdSystemMemoryUefiRegionSize
+ gUefiPayloadPkgTokenSpaceGuid.PcdMemoryTypeEfiACPIMemoryNVS
+ gUefiPayloadPkgTokenSpaceGuid.PcdMemoryTypeEfiACPIReclaimMemory
+ gUefiPayloadPkgTokenSpaceGuid.PcdMemoryTypeEfiReservedMemoryType
+ gUefiPayloadPkgTokenSpaceGuid.PcdMemoryTypeEfiRuntimeServicesData
+ gUefiPayloadPkgTokenSpaceGuid.PcdMemoryTypeEfiRuntimeServicesCode
gEfiMdeModulePkgTokenSpaceGuid.PcdSetNxForStack ## SOMETIMES_CONSUMES
gEfiMdeModulePkgTokenSpaceGuid.PcdDxeNxMemoryProtectionPolicy ## SOMETIMES_CONSUMES
gEfiMdeModulePkgTokenSpaceGuid.PcdImageProtectionPolicy ## SOMETIMES_CONSUMES