mirror of
https://github.com/acidanthera/audk.git
synced 2025-07-29 16:44:10 +02:00
StandaloneMmPkg/Core: Check Resource HOB and Mmram ranges
Check if the all the resource HOB in the input HOB list of MmCore entry only covers non-Mmram ranges. The Resource HOB is to describe the accessible non-Mmram range. All Resource HOB should not overlap with any Mmram range. Signed-off-by: Dun Tan <dun.tan@intel.com>
This commit is contained in:
parent
3adb507175
commit
da8fd23dbb
@ -700,28 +700,60 @@ MigrateMemoryAllocationHobs (
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
This function is responsible for initializing a new HOB list in MMRAM based on
|
This function is responsible for validating the input HOB list and
|
||||||
the input HOB list.
|
initializing a new HOB list in MMRAM based on the input HOB list.
|
||||||
|
|
||||||
@param [in] HobStart Pointer to the start of the HOB list.
|
@param [in] HobStart Pointer to the start of the HOB list.
|
||||||
|
@param [in] MmramRanges Pointer to the Mmram ranges.
|
||||||
|
@param [in] MmramRangeCount Count of Mmram ranges.
|
||||||
|
|
||||||
@retval Pointer to the new location of hob list in MMRAM.
|
@retval Pointer to the new location of hob list in MMRAM.
|
||||||
**/
|
**/
|
||||||
VOID *
|
VOID *
|
||||||
InitializeMmHobList (
|
InitializeMmHobList (
|
||||||
IN VOID *HobStart
|
IN VOID *HobStart,
|
||||||
|
IN EFI_MMRAM_DESCRIPTOR *MmramRanges,
|
||||||
|
IN UINTN MmramRangeCount
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
VOID *MmHobStart;
|
VOID *MmHobStart;
|
||||||
UINTN HobSize;
|
UINTN HobSize;
|
||||||
EFI_STATUS Status;
|
EFI_STATUS Status;
|
||||||
EFI_PEI_HOB_POINTERS Hob;
|
EFI_PEI_HOB_POINTERS Hob;
|
||||||
|
UINTN Index;
|
||||||
|
EFI_PHYSICAL_ADDRESS MmramBase;
|
||||||
|
EFI_PHYSICAL_ADDRESS MmramEnd;
|
||||||
|
EFI_PHYSICAL_ADDRESS ResourceHobBase;
|
||||||
|
EFI_PHYSICAL_ADDRESS ResourceHobEnd;
|
||||||
|
|
||||||
ASSERT (HobStart != NULL);
|
ASSERT (HobStart != NULL);
|
||||||
|
|
||||||
Hob.Raw = (UINT8 *)HobStart;
|
Hob.Raw = (UINT8 *)HobStart;
|
||||||
while (!END_OF_HOB_LIST (Hob)) {
|
while (!END_OF_HOB_LIST (Hob)) {
|
||||||
Hob.Raw = GET_NEXT_HOB (Hob);
|
Hob.Raw = GET_NEXT_HOB (Hob);
|
||||||
|
if (Hob.Header->HobType == EFI_HOB_TYPE_RESOURCE_DESCRIPTOR) {
|
||||||
|
ResourceHobBase = Hob.ResourceDescriptor->PhysicalStart;
|
||||||
|
ResourceHobEnd = Hob.ResourceDescriptor->PhysicalStart + Hob.ResourceDescriptor->ResourceLength;
|
||||||
|
|
||||||
|
for (Index = 0; Index < MmramRangeCount; Index++) {
|
||||||
|
MmramBase = MmramRanges[Index].PhysicalStart;
|
||||||
|
MmramEnd = MmramRanges[Index].PhysicalStart + MmramRanges[Index].PhysicalSize;
|
||||||
|
|
||||||
|
if ((MmramBase < ResourceHobEnd) && (MmramEnd > ResourceHobBase)) {
|
||||||
|
//
|
||||||
|
// The Resource HOB is to describe the accessible non-Mmram range.
|
||||||
|
// All Resource HOB should not overlapp with any Mmram range.
|
||||||
|
//
|
||||||
|
DEBUG ((
|
||||||
|
DEBUG_ERROR,
|
||||||
|
"The resource HOB range [0x%lx, 0x%lx] overlaps with MMRAM range\n",
|
||||||
|
ResourceHobBase,
|
||||||
|
ResourceHobEnd
|
||||||
|
));
|
||||||
|
CpuDeadLoop ();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
@ -821,7 +853,7 @@ StandaloneMmMain (
|
|||||||
//
|
//
|
||||||
// Install HobList
|
// Install HobList
|
||||||
//
|
//
|
||||||
gHobList = InitializeMmHobList (HobStart);
|
gHobList = InitializeMmHobList (HobStart, MmramRanges, MmramRangeCount);
|
||||||
|
|
||||||
//
|
//
|
||||||
// Register notification for EFI_MM_CONFIGURATION_PROTOCOL registration and
|
// Register notification for EFI_MM_CONFIGURATION_PROTOCOL registration and
|
||||||
|
Loading…
x
Reference in New Issue
Block a user