MpInitLib: Allocate code buffer for PEI phase

Today's implementation assumes PEI phase runs at 32bit so
the execution-disable feature is not applicable.
It's not always TRUE.
The patch allocates 32bit&64bit code buffer for PEI phase as well.

Signed-off-by: Ray Ni <ray.ni@intel.com>
Reviewed-by: Eric Dong <eric.dong@intel.com>
This commit is contained in:
Ray Ni 2022-05-07 17:10:49 +08:00 committed by mergify[bot]
parent e7abb94d1f
commit 54aeed7e00
4 changed files with 13 additions and 8 deletions

View File

@ -162,7 +162,7 @@ GetWakeupBuffer (
@retval 0 Cannot find free memory below 4GB. @retval 0 Cannot find free memory below 4GB.
**/ **/
UINTN UINTN
GetModeTransitionBuffer ( AllocateCodeBuffer (
IN UINTN BufferSize IN UINTN BufferSize
) )
{ {

View File

@ -1056,7 +1056,7 @@ AllocateResetVector (
(CpuMpData->WakeupBuffer + (CpuMpData->WakeupBuffer +
CpuMpData->AddressMap.RendezvousFunnelSize + CpuMpData->AddressMap.RendezvousFunnelSize +
CpuMpData->AddressMap.SwitchToRealSize); CpuMpData->AddressMap.SwitchToRealSize);
CpuMpData->WakeupBufferHigh = GetModeTransitionBuffer ( CpuMpData->WakeupBufferHigh = AllocateCodeBuffer (
CpuMpData->AddressMap.RendezvousFunnelSize + CpuMpData->AddressMap.RendezvousFunnelSize +
CpuMpData->AddressMap.SwitchToRealSize - CpuMpData->AddressMap.SwitchToRealSize -
CpuMpData->AddressMap.ModeTransitionOffset CpuMpData->AddressMap.ModeTransitionOffset

View File

@ -442,7 +442,7 @@ GetWakeupBuffer (
@retval 0 Cannot find free memory below 4GB. @retval 0 Cannot find free memory below 4GB.
**/ **/
UINTN UINTN
GetModeTransitionBuffer ( AllocateCodeBuffer (
IN UINTN BufferSize IN UINTN BufferSize
); );

View File

@ -299,14 +299,19 @@ GetWakeupBuffer (
@retval 0 Cannot find free memory below 4GB. @retval 0 Cannot find free memory below 4GB.
**/ **/
UINTN UINTN
GetModeTransitionBuffer ( AllocateCodeBuffer (
IN UINTN BufferSize IN UINTN BufferSize
) )
{ {
// EFI_STATUS Status;
// PEI phase doesn't need to do such transition. So simply return 0. EFI_PHYSICAL_ADDRESS Address;
//
return 0; Status = PeiServicesAllocatePages (EfiBootServicesCode, EFI_SIZE_TO_PAGES (BufferSize), &Address);
if (EFI_ERROR (Status)) {
Address = 0;
}
return (UINTN)Address;
} }
/** /**