Skip to content

Commit

Permalink
StandaloneMmPkg/MmIpl : Check if MM FV HOB was built
Browse files Browse the repository at this point in the history
Skip MM FV HOB build if MM platform HOB list already has
the HOB.

Signed-off-by: Hongbin1 Zhang <[email protected]>
Cc: Jiewen Yao <[email protected]>
Cc: Ray Ni <[email protected]>
Cc: Star Zeng <[email protected]>
Cc: Jiaxin Wu <[email protected]>
Cc: Wei6 Xu <[email protected]>
Cc: Sami Mujawar <[email protected]>
Cc: Ard Biesheuvel <[email protected]>
Cc: Supreeth Venkatesh <[email protected]>
  • Loading branch information
hongbin123 authored and mergify[bot] committed Dec 20, 2024
1 parent e8ce6c5 commit 8279e49
Showing 1 changed file with 52 additions and 4 deletions.
56 changes: 52 additions & 4 deletions StandaloneMmPkg/Drivers/StandaloneMmIplPei/MmFoundationHob.c
Original file line number Diff line number Diff line change
Expand Up @@ -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.
Expand Down Expand Up @@ -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
Expand Down

0 comments on commit 8279e49

Please sign in to comment.