1. HOB address is not 8 byte alignment.
2. FV with the max supported PEIM can't be dispatched.
Signed-off-by: Liming Gao <liming.gao@intel.com>
Reviewed-by: Star Zeng <star.zeng@intel.com>
git-svn-id: https://svn.code.sf.net/p/edk2/code/trunk/edk2@14993
6f19259b-4bc3-4df7-8a09-
765794883524
UINTN PeimIndex;\r
UINTN PeimCount;\r
EFI_GUID *Guid;\r
UINTN PeimIndex;\r
UINTN PeimCount;\r
EFI_GUID *Guid;\r
- EFI_PEI_FILE_HANDLE TempFileHandles[FixedPcdGet32 (PcdPeiCoreMaxPeimPerFv)];\r
+ EFI_PEI_FILE_HANDLE TempFileHandles[FixedPcdGet32 (PcdPeiCoreMaxPeimPerFv) + 1];\r
EFI_GUID FileGuid[FixedPcdGet32 (PcdPeiCoreMaxPeimPerFv)];\r
EFI_PEI_FIRMWARE_VOLUME_PPI *FvPpi;\r
EFI_FV_FILE_INFO FileInfo;\r
EFI_GUID FileGuid[FixedPcdGet32 (PcdPeiCoreMaxPeimPerFv)];\r
EFI_PEI_FIRMWARE_VOLUME_PPI *FvPpi;\r
EFI_FV_FILE_INFO FileInfo;\r
//\r
// Go ahead to scan this Fv, and cache FileHandles within it.\r
//\r
//\r
// Go ahead to scan this Fv, and cache FileHandles within it.\r
//\r
- for (PeimCount = 0; PeimCount < FixedPcdGet32 (PcdPeiCoreMaxPeimPerFv); PeimCount++) {\r
+ Status = EFI_NOT_FOUND;\r
+ for (PeimCount = 0; PeimCount <= FixedPcdGet32 (PcdPeiCoreMaxPeimPerFv); PeimCount++) {\r
Status = FvPpi->FindFileByType (FvPpi, PEI_CORE_INTERNAL_FFS_FILE_DISPATCH_TYPE, CoreFileHandle->FvHandle, &FileHandle);\r
Status = FvPpi->FindFileByType (FvPpi, PEI_CORE_INTERNAL_FFS_FILE_DISPATCH_TYPE, CoreFileHandle->FvHandle, &FileHandle);\r
- if (Status != EFI_SUCCESS) {\r
+ if (Status != EFI_SUCCESS || PeimCount == FixedPcdGet32 (PcdPeiCoreMaxPeimPerFv)) {\r
break;\r
}\r
\r
Private->CurrentFvFileHandles[PeimCount] = FileHandle;\r
}\r
break;\r
}\r
\r
Private->CurrentFvFileHandles[PeimCount] = FileHandle;\r
}\r
//\r
// Check whether the count of Peims exceeds the max support PEIMs in a FV image\r
// If more Peims are required in a FV image, PcdPeiCoreMaxPeimPerFv can be set to a larger value in DSC file.\r
//\r
//\r
// Check whether the count of Peims exceeds the max support PEIMs in a FV image\r
// If more Peims are required in a FV image, PcdPeiCoreMaxPeimPerFv can be set to a larger value in DSC file.\r
//\r
- ASSERT (PeimCount < FixedPcdGet32 (PcdPeiCoreMaxPeimPerFv));\r
+ ASSERT ((Status != EFI_SUCCESS) || (PeimCount < FixedPcdGet32 (PcdPeiCoreMaxPeimPerFv)));\r
\r
//\r
// Get Apriori File handle\r
\r
//\r
// Get Apriori File handle\r
HoleMemBase = TopOfNewStack;\r
HoleMemSize = TemporaryRamSize - PeiTemporaryRamSize - TemporaryStackSize;\r
if (HoleMemSize != 0) {\r
HoleMemBase = TopOfNewStack;\r
HoleMemSize = TemporaryRamSize - PeiTemporaryRamSize - TemporaryStackSize;\r
if (HoleMemSize != 0) {\r
- BaseOfNewHeap = BaseOfNewHeap + HoleMemSize;\r
+ //\r
+ // Make sure HOB List start address is 8 byte alignment.\r
+ //\r
+ BaseOfNewHeap = ALIGN_VALUE (BaseOfNewHeap + HoleMemSize, 8);\r
}\r
if (BaseOfNewHeap >= (UINTN)SecCoreData->PeiTemporaryRamBase) {\r
Private->HeapOffsetPositive = TRUE;\r
}\r
if (BaseOfNewHeap >= (UINTN)SecCoreData->PeiTemporaryRamBase) {\r
Private->HeapOffsetPositive = TRUE;\r