Reviewed-by: Michael Kinney <[email protected]> > -----Original Message----- > From: Fan, Jeff > Sent: Tuesday, November 24, 2015 12:55 AM > To: [email protected] > Cc: Tian, Feng <[email protected]>; Kinney, Michael D > <[email protected]> > Subject: [Patch v2 2/2] 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 <[email protected]> > Cc: Michael Kinney <[email protected]> > Contributed-under: TianoCore Contribution Agreement 1.0 > Signed-off-by: Jeff Fan <[email protected]> > --- > UefiCpuPkg/CpuMpPei/CpuMpPei.c | 39 +++++++++++++++++++++++++++++++++++++++ > 1 file changed, 39 insertions(+) > > diff --git a/UefiCpuPkg/CpuMpPei/CpuMpPei.c b/UefiCpuPkg/CpuMpPei/CpuMpPei.c > index 8ed5243..c222522 100644 > --- a/UefiCpuPkg/CpuMpPei/CpuMpPei.c > +++ b/UefiCpuPkg/CpuMpPei/CpuMpPei.c > @@ -102,6 +102,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. > > @return Pointer to Pointer to PEI CPU MP Data > @@ -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); > -- > 1.9.5.msysgit.0
_______________________________________________ edk2-devel mailing list [email protected] https://lists.01.org/mailman/listinfo/edk2-devel

