mirror of
https://gitlab.com/qemu-project/edk2.git
synced 2025-06-29 04:33:04 +08:00
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:
@ -268,6 +268,42 @@ GetProcessorNumber (
|
|||||||
return EFI_NOT_FOUND;
|
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.
|
Initialize CPU AP Data when AP is wakeup at the first time.
|
||||||
|
|
||||||
@ -704,6 +740,10 @@ MpInitLibInitialize (
|
|||||||
MtrrGetAllMtrrs (&CpuMpData->MtrrTable);
|
MtrrGetAllMtrrs (&CpuMpData->MtrrTable);
|
||||||
|
|
||||||
|
|
||||||
|
//
|
||||||
|
// Wakeup all APs and calculate the processor count in system
|
||||||
|
//
|
||||||
|
CollectProcessorCount (CpuMpData);
|
||||||
//
|
//
|
||||||
// Initialize global data for MP support
|
// Initialize global data for MP support
|
||||||
//
|
//
|
||||||
|
Reference in New Issue
Block a user