mirror of https://github.com/acidanthera/audk.git
UefiCpuPkg:Wake up APs after power-up or RESET through SIPI.
The implementation of this new behavior aligns with the guidelines outlined in the Intel SDM. Following a power-up or RESET of an MP system, system hardware dynamically selects one of the processors on the system bus as the BSP. The remaining processors are designated as APs. The APs complete a minimal self-configuration, then wait for a startup signal (a SIPI message) from the BSP processor. Additionally, the MP protocol is executed only after a power-up or RESET. If the MP protocol has completed and a BSP is chosen, subsequent INITs (either to a specific processor or system wide) do not cause the MP protocol to be repeated. Instead, each logical processor examines its BSP flag (in the IA32_APIC_BASE MSR) to determine whether it should execute the BIOS boot-strap code (if it is the BSP) or enter a wait-for-SIPI state (if it is an AP). Cc: Eric Dong <eric.dong@intel.com> Cc: Ray Ni <ray.ni@intel.com> Cc: Rahul Kumar <rahul1.kumar@intel.com> Cc: Gerd Hoffmann <kraxel@redhat.com> Signed-off-by: Ray Ni <ray.ni@intel.com> Signed-off-by: Yuanhao Xie <yuanhao.xie@intel.com> Reviewed-by: Ray Ni <ray.ni@intel.com>
This commit is contained in:
parent
1d76560146
commit
eaffa1d7ff
|
@ -1293,10 +1293,17 @@ WakeUpAP (
|
|||
//
|
||||
if (CpuMpData->SevSnpIsEnabled && (CpuMpData->InitFlag != ApInitConfig)) {
|
||||
SevSnpCreateAP (CpuMpData, -1);
|
||||
} else {
|
||||
if ((CpuMpData->InitFlag == ApInitConfig) && FixedPcdGetBool (PcdFirstTimeWakeUpAPsBySipi)) {
|
||||
//
|
||||
// SIPI can be used for the first time wake up after reset to reduce boot time.
|
||||
//
|
||||
SendStartupIpiAllExcludingSelf ((UINT32)ExchangeInfo->BufferStart);
|
||||
} else {
|
||||
SendInitSipiSipiAllExcludingSelf ((UINT32)ExchangeInfo->BufferStart);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (CpuMpData->InitFlag == ApInitConfig) {
|
||||
if (PcdGet32 (PcdCpuBootLogicalProcessorNumber) > 0) {
|
||||
|
|
Loading…
Reference in New Issue