summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJiang, Guomin <Guomin.Jiang@intel.com>2021-12-03 13:17:26 +0800
committermergify[bot] <37929162+mergify[bot]@users.noreply.github.com>2021-12-08 04:08:21 +0000
commitffdde9d7198982b880a9e333b2f2f48c2bbe958d (patch)
tree319df391ecd24da4bf34408036f64702160592ad
parent2527723de9a35c8d73ba09ae4dd1db3db81f22f2 (diff)
downloadedk2-ffdde9d7198982b880a9e333b2f2f48c2bbe958d.tar.gz
edk2-ffdde9d7198982b880a9e333b2f2f48c2bbe958d.tar.bz2
edk2-ffdde9d7198982b880a9e333b2f2f48c2bbe958d.zip
UefiPayloadPkg: Skip ModuleInfo HOB in Payload
REF: https://bugzilla.tianocore.org/show_bug.cgi?id=3754 1. DxeCore will use ModuleInfo to install LoadedImage protocol for DxeCore. 2. DxeIpl will create the ModuleInfo of UniversalPayload. and UniversalPayload will create the ModuleInfo of DxeCore. 3. UniversalPayload should skip the ModuleInfo from the DxeIpl to avoid the mismatched ModuleInfo for DxeCore. Changes: 1. Use function IsHobNeed to check if the HOB should be added 2. Add the ModuleInfo check logic in IsHobNeed function Signed-off-by: Guomin Jiang <guomin.jiang@intel.com> Cc: Guo Dong <guo.dong@intel.com> Reviewed-by: Ray Ni <ray.ni@intel.com> Cc: Maurice Ma <maurice.ma@intel.com> Cc: Benjamin You <benjamin.you@intel.com>
-rw-r--r--UefiPayloadPkg/UefiPayloadEntry/UniversalPayloadEntry.c32
1 files changed, 31 insertions, 1 deletions
diff --git a/UefiPayloadPkg/UefiPayloadEntry/UniversalPayloadEntry.c b/UefiPayloadPkg/UefiPayloadEntry/UniversalPayloadEntry.c
index bea37fb18b..edb3c20471 100644
--- a/UefiPayloadPkg/UefiPayloadEntry/UniversalPayloadEntry.c
+++ b/UefiPayloadPkg/UefiPayloadEntry/UniversalPayloadEntry.c
@@ -252,6 +252,36 @@ FindAnotherHighestBelow4GResourceDescriptor (
}
/**
+ Check the HOB and decide if it is need inside Payload
+
+ Payload maintainer may make decision which HOB is need or needn't
+ Then add the check logic in the function.
+
+ @param[in] Hob The HOB to check
+
+ @retval TRUE If HOB is need inside Payload
+ @retval FALSE If HOB is needn't inside Payload
+**/
+BOOLEAN
+IsHobNeed (
+ EFI_PEI_HOB_POINTERS Hob
+ )
+{
+ if (Hob.Header->HobType == EFI_HOB_TYPE_HANDOFF) {
+ return FALSE;
+ }
+
+ if (Hob.Header->HobType == EFI_HOB_TYPE_MEMORY_ALLOCATION) {
+ if (CompareGuid (&Hob.MemoryAllocationModule->MemoryAllocationHeader.Name, &gEfiHobMemoryAllocModuleGuid)) {
+ return FALSE;
+ }
+ }
+
+ // Arrive here mean the HOB is need
+ return TRUE;
+}
+
+/**
It will build HOBs based on information from bootloaders.
@param[in] BootloaderParameter The starting memory address of bootloader parameter block.
@@ -351,7 +381,7 @@ BuildHobs (
// Since payload created new Hob, move all hobs except PHIT from boot loader hob list.
//
while (!END_OF_HOB_LIST (Hob)) {
- if (Hob.Header->HobType != EFI_HOB_TYPE_HANDOFF) {
+ if (IsHobNeed (Hob)) {
// Add this hob to payload HOB
AddNewHob (&Hob);
}