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 committed Dec 20, 2024
1 parent 4af5849 commit 2407960
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 2407960

Please sign in to comment.