]> git.proxmox.com Git - mirror_edk2.git/blobdiff - UefiCpuPkg/Library/MpInitLib/MpLib.c
UefiCpuPkg/MpService: GetProcessorInfo returns 6-level topology
[mirror_edk2.git] / UefiCpuPkg / Library / MpInitLib / MpLib.c
index cbc5594c786a82ad68627e1bf54b137775f9d13a..ab7a8ed6633a52b0c7d4cb3b5d0646a5800916dd 100644 (file)
@@ -1879,10 +1879,17 @@ MpInitLibGetProcessorInfo (
   CPU_MP_DATA            *CpuMpData;\r
   UINTN                  CallerNumber;\r
   CPU_INFO_IN_HOB        *CpuInfoInHob;\r
+  UINTN                  OriginalProcessorNumber;\r
 \r
   CpuMpData = GetCpuMpData ();\r
   CpuInfoInHob = (CPU_INFO_IN_HOB *) (UINTN) CpuMpData->CpuInfoInHob;\r
 \r
+  //\r
+  // Lower 24 bits contains the actual processor number.\r
+  //\r
+  OriginalProcessorNumber = ProcessorNumber;\r
+  ProcessorNumber &= BIT24 - 1;\r
+\r
   //\r
   // Check whether caller processor is BSP\r
   //\r
@@ -1923,6 +1930,18 @@ MpInitLibGetProcessorInfo (
     &ProcessorInfoBuffer->Location.Thread\r
     );\r
 \r
+  if ((OriginalProcessorNumber & CPU_V2_EXTENDED_TOPOLOGY) != 0) {\r
+    GetProcessorLocation2ByApicId (\r
+      CpuInfoInHob[ProcessorNumber].ApicId,\r
+      &ProcessorInfoBuffer->ExtendedInformation.Location2.Package,\r
+      &ProcessorInfoBuffer->ExtendedInformation.Location2.Die,\r
+      &ProcessorInfoBuffer->ExtendedInformation.Location2.Tile,\r
+      &ProcessorInfoBuffer->ExtendedInformation.Location2.Module,\r
+      &ProcessorInfoBuffer->ExtendedInformation.Location2.Core,\r
+      &ProcessorInfoBuffer->ExtendedInformation.Location2.Thread\r
+      );\r
+  }\r
+\r
   if (HealthData != NULL) {\r
     HealthData->Uint32 = CpuInfoInHob[ProcessorNumber].Health;\r
   }\r