// Store BSP's MTRR setting\r
//\r
MtrrGetAllMtrrs (&PeiCpuMpData->MtrrTable);\r
+\r
//\r
- // Send broadcast IPI to APs to wakeup APs\r
- //\r
- PeiCpuMpData->InitFlag = 1;\r
- WakeUpAP (PeiCpuMpData, TRUE, 0, NULL, NULL);\r
- //\r
- // Wait for AP task to complete and then exit.\r
- //\r
- MicroSecondDelay (PcdGet32 (PcdCpuApInitTimeOutInMicroSeconds));\r
- PeiCpuMpData->InitFlag = 0;\r
- PeiCpuMpData->CpuCount += (UINT32) PeiCpuMpData->MpCpuExchangeInfo->NumApsExecuting;\r
- //\r
- // Sort BSP/Aps by CPU APIC ID in ascending order\r
+ // Only perform AP detection if PcdCpuMaxLogicalProcessorNumber is greater than 1\r
//\r
- SortApicId (PeiCpuMpData);\r
+ if (PcdGet32 (PcdCpuMaxLogicalProcessorNumber) > 1) {\r
+ //\r
+ // Send broadcast IPI to APs to wakeup APs\r
+ //\r
+ PeiCpuMpData->InitFlag = 1;\r
+ WakeUpAP (PeiCpuMpData, TRUE, 0, NULL, NULL);\r
+ //\r
+ // Wait for AP task to complete and then exit.\r
+ //\r
+ MicroSecondDelay (PcdGet32 (PcdCpuApInitTimeOutInMicroSeconds));\r
+ PeiCpuMpData->InitFlag = 0;\r
+ PeiCpuMpData->CpuCount += (UINT32)PeiCpuMpData->MpCpuExchangeInfo->NumApsExecuting;\r
+ ASSERT (PeiCpuMpData->CpuCount <= PcdGet32 (PcdCpuMaxLogicalProcessorNumber));\r
+ //\r
+ // Sort BSP/Aps by CPU APIC ID in ascending order\r
+ //\r
+ SortApicId (PeiCpuMpData);\r
+ }\r
\r
DEBUG ((EFI_D_INFO, "CpuMpPei: Find %d processors in system.\n", PeiCpuMpData->CpuCount));\r
return PeiCpuMpData->CpuCount;\r
\r
PeiCpuMpData->CpuCount = 1;\r
PeiCpuMpData->BspNumber = 0;\r
- PeiCpuMpData->CpuData = (PEI_CPU_DATA *) (PeiCpuMpData->MpCpuExchangeInfo + 1);\r
+ PeiCpuMpData->CpuData = (PEI_CPU_DATA *) (PeiCpuMpData->BackupBuffer +\r
+ PeiCpuMpData->BackupBufferSize);\r
PeiCpuMpData->CpuData[0].ApicId = GetInitialApicId ();\r
PeiCpuMpData->CpuData[0].Health.Uint32 = 0;\r
PeiCpuMpData->EndOfPeiFlag = FALSE;\r