UefiCpuPkg/MpInitLib: fix AP init issue in 64-bit PEI
This issue is introduced by a patch atf32bfe6d06
The above patch miss the case of 64-bit PEI, which will link X64/MpFuncs.nasm instead of Ia32/MpFuncs.nasm. For X64/MpFuncs.nasm, ExchangeInfo->ModeHighMemory should be always initialized no matter if separate wakeup buffer is allocated or not. Ia32/MpFuncs.nasm will not need ModeHighMemory during AP init. So the changes made in this patch should not affect the functionality of it. Cc: Ruiyu Ni <ruiyu.ni@intel.com> Cc: Eric Dong <eric.dong@intel.com> Cc: Laszlo Ersek <lersek@redhat.com> Contributed-under: TianoCore Contribution Agreement 1.1 Signed-off-by: Jian J Wang <jian.j.wang@intel.com> Reviewed-by: Ruiyu Ni <ruiyu.ni@intel.com> (cherry picked from commit69dfa8d87a
)
This commit is contained in:
@@ -843,14 +843,15 @@ FillExchangeInfoData (
|
|||||||
);
|
);
|
||||||
|
|
||||||
ExchangeInfo->ModeTransitionMemory = (UINT32)CpuMpData->WakeupBufferHigh;
|
ExchangeInfo->ModeTransitionMemory = (UINT32)CpuMpData->WakeupBufferHigh;
|
||||||
ExchangeInfo->ModeHighMemory = (UINT32)CpuMpData->WakeupBufferHigh +
|
|
||||||
(UINT32)ExchangeInfo->ModeOffset -
|
|
||||||
(UINT32)CpuMpData->AddressMap.ModeTransitionOffset;
|
|
||||||
ExchangeInfo->ModeHighSegment = (UINT16)ExchangeInfo->CodeSegment;
|
|
||||||
} else {
|
} else {
|
||||||
ExchangeInfo->ModeTransitionMemory = (UINT32)
|
ExchangeInfo->ModeTransitionMemory = (UINT32)
|
||||||
(ExchangeInfo->BufferStart + CpuMpData->AddressMap.ModeTransitionOffset);
|
(ExchangeInfo->BufferStart + CpuMpData->AddressMap.ModeTransitionOffset);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
ExchangeInfo->ModeHighMemory = ExchangeInfo->ModeTransitionMemory +
|
||||||
|
(UINT32)ExchangeInfo->ModeOffset -
|
||||||
|
(UINT32)CpuMpData->AddressMap.ModeTransitionOffset;
|
||||||
|
ExchangeInfo->ModeHighSegment = (UINT16)ExchangeInfo->CodeSegment;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
Reference in New Issue
Block a user