StandaloneMmPkg/MmIpl : Check if MM FV HOB was built

Skip MM FV HOB build if MM platform HOB list already has
the HOB.

Signed-off-by: Hongbin1 Zhang <hongbin1.zhang@intel.com>
Cc: Jiewen Yao <jiewen.yao@intel.com>
Cc: Ray Ni <ray.ni@intel.com>
Cc: Star Zeng <star.zeng@intel.com>
Cc: Jiaxin Wu <jiaxin.wu@intel.com>
Cc: Wei6 Xu <wei6.xu@intel.com>
Cc: Sami Mujawar <sami.mujawar@arm.com>
Cc: Ard Biesheuvel <ardb+tianocore@kernel.org>
Cc: Supreeth Venkatesh <supreeth.venkatesh@arm.com>
This commit is contained in:
Hongbin1 Zhang 2024-12-17 18:28:32 +08:00 committed by mergify[bot]
parent e8ce6c5189
commit 8279e49aae
1 changed files with 52 additions and 4 deletions

View File

@ -803,6 +803,49 @@ GetRemainingHobSize (
}
}
/**
Check if FV HOB was created.
Check if FV HOB was created on HOB list,
if yes, skip building MM Core FV HOB,
if No, continue to build MM Core FV HOB
@param[in] HobList HOB list.
@param[in] HobSize HOB size.
@retval TRUE Skip building MM Core FV HOB.
FALSE Continue to build MM Core FV HOB.
**/
BOOLEAN
IsFvHobExist (
IN UINT8 *HobList,
IN UINTN HobSize
)
{
EFI_PEI_HOB_POINTERS Hob;
UINTN HobLength;
if ((HobList == NULL) || (HobSize == 0)) {
return FALSE;
}
Hob.Raw = (UINT8 *)HobList;
HobLength = GET_HOB_LENGTH (Hob);
//
// Parse the HOB list until end of list or matching type is found.
//
while (HobLength <= HobSize) {
if (Hob.Header->HobType == EFI_HOB_TYPE_FV) {
return TRUE;
}
Hob.Raw = GET_NEXT_HOB (Hob);
HobLength += GET_HOB_LENGTH (Hob);
}
return FALSE;
}
/**
Create the MM foundation specific HOB list which StandaloneMm Core needed.
@ -892,11 +935,16 @@ CreateMmFoundationHobList (
UsedSize += HobLength;
//
// BFV address for StandaloneMm Core
// Skip to report FV that contains MmCore when Platform reports FV
//
HobLength = GetRemainingHobSize (*FoundationHobSize, UsedSize);
MmIplBuildFvHob (FoundationHobList + UsedSize, &HobLength, MmFvBase, MmFvSize);
UsedSize += HobLength;
if (!IsFvHobExist (PlatformHobList, PlatformHobSize)) {
//
// BFV address for StandaloneMm Core
//
HobLength = GetRemainingHobSize (*FoundationHobSize, UsedSize);
MmIplBuildFvHob (FoundationHobList + UsedSize, &HobLength, MmFvBase, MmFvSize);
UsedSize += HobLength;
}
//
// Build MM ACPI S3 Enable HOB