1) If PeiLoadImage fails, the section extraction PPI or Decompress PPI may not be ready, we flag that more Peims need to be dispatched.

2) Set the stack to be cacheable before the stack switch occurs so that IPF recovery path will be run from cacheble memory for code, data and stack.


git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@4288 6f19259b-4bc3-4df7-8a09-765794883524
This commit is contained in:
qwang12 2007-11-08 03:50:37 +00:00
parent dda0251d0b
commit a3a15d2108
4 changed files with 19 additions and 16 deletions

View File

@ -372,6 +372,12 @@ Returns:
);
PERF_END (0, "PEIM", NULL, 0);
} else {
//
// If PeiLoadImage fails, the section extraction PPI or Decompress PPI may not be ready,
// we flag that more Peims need to be dispatched.
//
PeimNeedingDispatch = TRUE;
}
//

View File

@ -44,13 +44,6 @@ Returns:
{
EFI_HOB_HANDOFF_INFO_TABLE *Phit;
if (CoreData == NULL) {
//
// the first call with CoreData as NULL.
//
return;
}
if ((GetHandOffStatus().r10 & 0xFF) == RecoveryFn) {
CoreData->StackBase = CoreData->StackBase & CACHE_MODE_ADDRESS_MASK;
CoreData->HobList.Raw = (UINT8 *)((UINTN)CoreData->HobList.Raw & CACHE_MODE_ADDRESS_MASK);

View File

@ -115,6 +115,8 @@ Returns:
UINT64 EfiFreeMemorySize;
EFI_PHYSICAL_ADDRESS PhysicalAddressOfOldHob;
DEBUG ((EFI_D_INFO, "PeiInstallPeiMemory MemoryBegin 0x%LX, MemoryLength 0x%LX\n", MemoryBegin, MemoryLength));
PrivateData = PEI_CORE_INSTANCE_FROM_PS_THIS (PeiServices);
PrivateData->SwitchStackSignal = TRUE;
@ -137,8 +139,8 @@ Returns:
EfiFreeMemorySize = OldHandOffHob->EfiFreeMemoryBottom - PhysicalAddressOfOldHob;
DEBUG ((EFI_D_INFO, "HOBLIST address before memory init = 0x%08x\n", OldHandOffHob));
DEBUG ((EFI_D_INFO, "HOBLIST address after memory init = 0x%08x\n", NewHandOffHob));
DEBUG ((EFI_D_INFO, "HOBLIST address before memory init = 0x%p\n", OldHandOffHob));
DEBUG ((EFI_D_INFO, "HOBLIST address after memory init = 0x%p\n", NewHandOffHob));
CopyMem (
NewHandOffHob,
@ -156,6 +158,12 @@ Returns:
(OldHandOffHob->EfiEndOfHobList -
PhysicalAddressOfOldHob);
//
// For IPF in CAR mode the real memory access is uncached,in InstallPeiMemory()
// the 63-bit of address is set to 1.
//
SWITCH_TO_CACHE_MODE (PrivateData);
ConvertPpiPointers (PeiServices, OldHandOffHob, NewHandOffHob);
BuildStackHob (PrivateData->StackBase, PrivateData->StackSize);
@ -223,6 +231,7 @@ Returns:
Hob.HandoffInformationTable->EfiFreeMemoryTop -= Offset;
}
ASSERT (Hob.HandoffInformationTable->EfiFreeMemoryTop >= Hob.HandoffInformationTable->EfiFreeMemoryBottom);
//
// Verify that there is sufficient memory to satisfy the allocation
//

View File

@ -135,12 +135,6 @@ Returns:
}
}
//
// For IPF in CAR mode the real memory access is uncached,in InstallPeiMemory()
// the 63-bit of address is set to 1.
//
SWITCH_TO_CACHE_MODE (OldCoreData);
if (OldCoreData != NULL) {
CopyMem (&PrivateData, OldCoreData, sizeof (PEI_CORE_INSTANCE));
@ -312,3 +306,4 @@ Returns:
return EFI_NOT_FOUND;
}