1414
1515#define  INVALID_APIC_ID   0xFFFFFFFF
1616
17- EFI_GUID   mCpuInitMpLibHobGuid  =  CPU_INIT_MP_LIB_HOB_GUID ;
17+ EFI_GUID                  mCpuInitMpLibHobGuid     =  CPU_INIT_MP_LIB_HOB_GUID ;
18+ PROCESSOR_RESOURCE_DATA   * mProcessorResourceData  =  NULL ;
1819
1920/** 
2021  Get the Application Processors state. 
@@ -223,12 +224,6 @@ CollectProcessorCount (
223224  IN  CPU_MP_DATA   * CpuMpData 
224225  )
225226{
226-   PROCESSOR_RESOURCE_DATA   * ProcessorResourceData ;
227-   CPU_INFO_IN_HOB           * CpuInfoInHob ;
228-   UINTN                     Index ;
229- 
230-   ProcessorResourceData  =  NULL ;
231- 
232227  // 
233228  // Set the default loop mode for APs. 
234229  // 
@@ -240,16 +235,11 @@ CollectProcessorCount (
240235  // as the first broadcast method to wake up all APs, and all of APs will read NODE0 
241236  // Core0 Mailbox0 in an infinit loop. 
242237  // 
243-   ProcessorResourceData  =  GetProcessorResourceDataFromGuidedHob  ();
238+   mProcessorResourceData  =  GetProcessorResourceDataFromGuidedHob  ();
244239
245-   if  (ProcessorResourceData  !=  NULL ) {
240+   if  (mProcessorResourceData  !=  NULL ) {
246241    CpuMpData -> ApLoopMode  =  ApInHltLoop ;
247-     CpuMpData -> CpuCount    =  ProcessorResourceData -> NumberOfProcessor ;
248-     CpuInfoInHob           =  (CPU_INFO_IN_HOB  * )(UINTN )(CpuMpData -> CpuInfoInHob );
249- 
250-     for  (Index  =  0 ; Index  <  CpuMpData -> CpuCount ; Index ++ ) {
251-       CpuInfoInHob [Index ].ApicId  =  ProcessorResourceData -> ApicId [Index ];
252-     }
242+     CpuMpData -> CpuCount    =  mProcessorResourceData -> NumberOfProcessor ;
253243  }
254244
255245  // 
@@ -380,15 +370,15 @@ ApWakeupFunction (
380370    // 
381371    InterlockedIncrement  ((UINT32  * )& CpuMpData -> FinishedCount );
382372
383-     while  (TRUE) {
384-       // 
385-       // Clean per-core mail box registers. 
386-       // 
387-       IoCsrWrite64  (LOONGARCH_IOCSR_MBUF0 , 0x0 );
388-       IoCsrWrite64  (LOONGARCH_IOCSR_MBUF1 , 0x0 );
389-       IoCsrWrite64  (LOONGARCH_IOCSR_MBUF2 , 0x0 );
390-       IoCsrWrite64  (LOONGARCH_IOCSR_MBUF3 , 0x0 );
373+     // 
374+     // Clean per-core mail box registers. 
375+     // 
376+     IoCsrWrite64  (LOONGARCH_IOCSR_MBUF0 , 0x0 );
377+     IoCsrWrite64  (LOONGARCH_IOCSR_MBUF1 , 0x0 );
378+     IoCsrWrite64  (LOONGARCH_IOCSR_MBUF2 , 0x0 );
379+     IoCsrWrite64  (LOONGARCH_IOCSR_MBUF3 , 0x0 );
391380
381+     while  (TRUE) {
392382      // 
393383      // Enable IPI interrupt and global interrupt 
394384      // 
@@ -699,34 +689,34 @@ WakeUpAP (
699689    DEBUG  ((DEBUG_INFO , "%a: func 0x%llx, ExchangeInfo 0x%llx\n" , __func__ , ApWakeupFunction , (UINTN )ExchangeInfo ));
700690    if  (CpuMpData -> ApLoopMode  ==  ApInHltLoop ) {
701691      for  (Index  =  0 ; Index  <  CpuMpData -> CpuCount ; Index ++ ) {
702-         if  (Index  !=  CpuMpData -> BspNumber ) {
692+         if  (mProcessorResourceData -> ApicId [ Index ]  !=  CpuMpData -> BspNumber ) {
703693          IoCsrWrite64  (
704694            LOONGARCH_IOCSR_MBUF_SEND ,
705695            (IOCSR_MBUF_SEND_BLOCKING  |
706696             (IOCSR_MBUF_SEND_BOX_HI  (0x3 ) << IOCSR_MBUF_SEND_BOX_SHIFT ) |
707-              (CpuInfoInHob [Index ]. ApicId  << IOCSR_MBUF_SEND_CPU_SHIFT ) |
697+              (mProcessorResourceData -> ApicId [Index ] << IOCSR_MBUF_SEND_CPU_SHIFT ) |
708698             ((UINTN )(ExchangeInfo ) &  IOCSR_MBUF_SEND_H32_MASK ))
709699            );
710700          IoCsrWrite64  (
711701            LOONGARCH_IOCSR_MBUF_SEND ,
712702            (IOCSR_MBUF_SEND_BLOCKING  |
713703             (IOCSR_MBUF_SEND_BOX_LO  (0x3 ) << IOCSR_MBUF_SEND_BOX_SHIFT ) |
714-              (CpuInfoInHob [Index ]. ApicId  << IOCSR_MBUF_SEND_CPU_SHIFT ) |
704+              (mProcessorResourceData -> ApicId [Index ] << IOCSR_MBUF_SEND_CPU_SHIFT ) |
715705             ((UINTN )ExchangeInfo ) << IOCSR_MBUF_SEND_BUF_SHIFT )
716706            );
717707
718708          IoCsrWrite64  (
719709            LOONGARCH_IOCSR_MBUF_SEND ,
720710            (IOCSR_MBUF_SEND_BLOCKING  |
721711             (IOCSR_MBUF_SEND_BOX_HI  (0x0 ) << IOCSR_MBUF_SEND_BOX_SHIFT ) |
722-              (CpuInfoInHob [Index ]. ApicId  << IOCSR_MBUF_SEND_CPU_SHIFT ) |
712+              (mProcessorResourceData -> ApicId [Index ] << IOCSR_MBUF_SEND_CPU_SHIFT ) |
723713             ((UINTN )(ApWakeupFunction ) &  IOCSR_MBUF_SEND_H32_MASK ))
724714            );
725715          IoCsrWrite64  (
726716            LOONGARCH_IOCSR_MBUF_SEND ,
727717            (IOCSR_MBUF_SEND_BLOCKING  |
728718             (IOCSR_MBUF_SEND_BOX_LO  (0x0 ) << IOCSR_MBUF_SEND_BOX_SHIFT ) |
729-              (CpuInfoInHob [Index ]. ApicId  << IOCSR_MBUF_SEND_CPU_SHIFT ) |
719+              (mProcessorResourceData -> ApicId [Index ] << IOCSR_MBUF_SEND_CPU_SHIFT ) |
730720             ((UINTN )ApWakeupFunction ) << IOCSR_MBUF_SEND_BUF_SHIFT )
731721            );
732722
@@ -736,7 +726,7 @@ WakeUpAP (
736726          IoCsrWrite64  (
737727            LOONGARCH_IOCSR_IPI_SEND ,
738728            (IOCSR_MBUF_SEND_BLOCKING  |
739-              (CpuInfoInHob [Index ]. ApicId  << IOCSR_MBUF_SEND_CPU_SHIFT ) |
729+              (mProcessorResourceData -> ApicId [Index ] << IOCSR_MBUF_SEND_CPU_SHIFT ) |
740730             0x2  // Bit 2 
741731            )
742732            );
@@ -1360,7 +1350,7 @@ MpInitLibInitialize (
13601350  // 
13611351  // Set BSP basic information 
13621352  // 
1363-   InitializeApData  (CpuMpData , 0 , 0 );
1353+   InitializeApData  (CpuMpData , CpuMpData -> BspNumber , 0 );
13641354
13651355  // 
13661356  // Set up APs wakeup signal buffer and initialization APs ApicId status. 
0 commit comments