mirror of https://github.com/acidanthera/audk.git
UefiCpuPkg/CpuMpPei: Enable x2APIC mode on BSP/APs
If x2APIC flag is set, enable x2APIC mode on all APs and BSP. Before we wakeup APs to enable x2APIC mode, we should wait all APs have finished initialization. Cc: Feng Tian <feng.tian@intel.com> Cc: Michael Kinney <michael.d.kinney@intel.com> Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: Jeff Fan <jeff.fan@intel.com> Reviewed-by: Michael Kinney <michael.d.kinney@intel.com> git-svn-id: https://svn.code.sf.net/p/edk2/code/trunk/edk2@18934 6f19259b-4bc3-4df7-8a09-765794883524
This commit is contained in:
parent
2f0261b7dc
commit
c7981a1184
|
@ -101,6 +101,20 @@ SortApicId (
|
|||
}
|
||||
}
|
||||
|
||||
/**
|
||||
Enable x2APIC mode on APs.
|
||||
|
||||
@param Buffer Pointer to private data buffer.
|
||||
**/
|
||||
VOID
|
||||
EFIAPI
|
||||
ApFuncEnableX2Apic (
|
||||
IN OUT VOID *Buffer
|
||||
)
|
||||
{
|
||||
SetApicMode (LOCAL_APIC_MODE_X2APIC);
|
||||
}
|
||||
|
||||
/**
|
||||
Get CPU MP Data pointer from the Guided HOB.
|
||||
|
||||
|
@ -385,6 +399,31 @@ CountProcessorNumber (
|
|||
PeiCpuMpData->CpuCount += (UINT32)PeiCpuMpData->MpCpuExchangeInfo->NumApsExecuting;
|
||||
ASSERT (PeiCpuMpData->CpuCount <= PcdGet32 (PcdCpuMaxLogicalProcessorNumber));
|
||||
//
|
||||
// Wait for all APs finished the initialization
|
||||
//
|
||||
while (PeiCpuMpData->FinishedCount < (PeiCpuMpData->CpuCount - 1)) {
|
||||
CpuPause ();
|
||||
}
|
||||
|
||||
if (PeiCpuMpData->X2ApicEnable) {
|
||||
DEBUG ((EFI_D_INFO, "Force x2APIC mode!\n"));
|
||||
//
|
||||
// Send 2nd broadcast IPI to all APs to enable x2APIC mode
|
||||
//
|
||||
WakeUpAP (PeiCpuMpData, TRUE, 0, ApFuncEnableX2Apic, NULL);
|
||||
//
|
||||
// Wait for all known APs finished
|
||||
//
|
||||
while (PeiCpuMpData->FinishedCount < (PeiCpuMpData->CpuCount - 1)) {
|
||||
CpuPause ();
|
||||
}
|
||||
//
|
||||
// Enable x2APIC on BSP
|
||||
//
|
||||
SetApicMode (LOCAL_APIC_MODE_X2APIC);
|
||||
}
|
||||
DEBUG ((EFI_D_INFO, "APIC MODE is %d\n", GetApicMode ()));
|
||||
//
|
||||
// Sort BSP/Aps by CPU APIC ID in ascending order
|
||||
//
|
||||
SortApicId (PeiCpuMpData);
|
||||
|
|
Loading…
Reference in New Issue