mirror of https://github.com/acidanthera/audk.git
UefiCpuPkg/MpInitLib: Send INIT-SIPI-SIPI to get processor count
CollectProcessorCount() will send the 1st INIT-SIPI-SIPI to get processor count in system. Cc: Michael Kinney <michael.d.kinney@intel.com> Cc: Feng Tian <feng.tian@intel.com> Cc: Giri P Mudusuru <giri.p.mudusuru@intel.com> Cc: Laszlo Ersek <lersek@redhat.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> Tested-by: Laszlo Ersek <lersek@redhat.com> Tested-by: Michael Kinney <michael.d.kinney@intel.com>
This commit is contained in:
parent
96f5920d1d
commit
03434dffb7
|
@ -268,6 +268,42 @@ GetProcessorNumber (
|
|||
return EFI_NOT_FOUND;
|
||||
}
|
||||
|
||||
/**
|
||||
This function will get CPU count in the system.
|
||||
|
||||
@param[in] CpuMpData Pointer to PEI CPU MP Data
|
||||
|
||||
@return CPU count detected
|
||||
**/
|
||||
UINTN
|
||||
CollectProcessorCount (
|
||||
IN CPU_MP_DATA *CpuMpData
|
||||
)
|
||||
{
|
||||
//
|
||||
// Send 1st broadcast IPI to APs to wakeup APs
|
||||
//
|
||||
CpuMpData->InitFlag = ApInitConfig;
|
||||
CpuMpData->X2ApicEnable = FALSE;
|
||||
WakeUpAP (CpuMpData, TRUE, 0, NULL, NULL);
|
||||
//
|
||||
// Wait for AP task to complete and then exit.
|
||||
//
|
||||
MicroSecondDelay (PcdGet32(PcdCpuApInitTimeOutInMicroSeconds));
|
||||
CpuMpData->InitFlag = ApInitDone;
|
||||
ASSERT (CpuMpData->CpuCount <= PcdGet32 (PcdCpuMaxLogicalProcessorNumber));
|
||||
//
|
||||
// Wait for all APs finished the initialization
|
||||
//
|
||||
while (CpuMpData->FinishedCount < (CpuMpData->CpuCount - 1)) {
|
||||
CpuPause ();
|
||||
}
|
||||
|
||||
DEBUG ((DEBUG_INFO, "MpInitLib: Find %d processors in system.\n", CpuMpData->CpuCount));
|
||||
|
||||
return CpuMpData->CpuCount;
|
||||
}
|
||||
|
||||
/*
|
||||
Initialize CPU AP Data when AP is wakeup at the first time.
|
||||
|
||||
|
@ -704,6 +740,10 @@ MpInitLibInitialize (
|
|||
MtrrGetAllMtrrs (&CpuMpData->MtrrTable);
|
||||
|
||||
|
||||
//
|
||||
// Wakeup all APs and calculate the processor count in system
|
||||
//
|
||||
CollectProcessorCount (CpuMpData);
|
||||
//
|
||||
// Initialize global data for MP support
|
||||
//
|
||||
|
|
Loading…
Reference in New Issue