]> git.proxmox.com Git - mirror_edk2.git/blobdiff - UefiCpuPkg/CpuDxe/CpuMp.c
CorebootModulePkg: Remove unused PCI non-enumeration drivers
[mirror_edk2.git] / UefiCpuPkg / CpuDxe / CpuMp.c
index f3a5a24b0f6639aa9005a74eff9a54990fe532e9..98fdfdf5e0e7b9bdc2c96cf47a9811bff44e53ce 100644 (file)
@@ -801,7 +801,7 @@ StartupAllAPs (
       goto Done;\r
     }\r
 \r
-    gBS->Stall (gPollInterval);\r
+    MicroSecondDelay (gPollInterval);\r
     mMpSystemData.Timeout -= gPollInterval;\r
   }\r
 \r
@@ -987,7 +987,7 @@ StartupThisAP (
       return EFI_TIMEOUT;\r
     }\r
 \r
-    gBS->Stall (gPollInterval);\r
+    MicroSecondDelay (gPollInterval);\r
     CpuData->Timeout -= gPollInterval;\r
   }\r
 \r
@@ -1666,6 +1666,22 @@ ExitBootServicesCallback (
   SendInitIpiAllExcludingSelf ();\r
 }\r
 \r
+/**\r
+  A minimal wrapper function that allows MtrrSetAllMtrrs() to be passed to\r
+  EFI_MP_SERVICES_PROTOCOL.StartupAllAPs() as Procedure.\r
+\r
+  @param[in] Buffer  Pointer to an MTRR_SETTINGS object, to be passed to\r
+                     MtrrSetAllMtrrs().\r
+**/\r
+VOID\r
+EFIAPI\r
+SetMtrrsFromBuffer (\r
+  IN VOID *Buffer\r
+  )\r
+{\r
+  MtrrSetAllMtrrs (Buffer);\r
+}\r
+\r
 /**\r
   Initialize Multi-processor support.\r
 \r
@@ -1676,6 +1692,7 @@ InitializeMpSupport (
   )\r
 {\r
   EFI_STATUS     Status;\r
+  MTRR_SETTINGS  MtrrSettings;\r
   UINTN          Timeout;\r
 \r
   gMaxLogicalProcessorNumber = (UINTN) PcdGet32 (PcdCpuMaxLogicalProcessorNumber);\r
@@ -1738,7 +1755,7 @@ InitializeMpSupport (
     if (CheckAllAPsSleeping ()) {\r
       break;\r
     }\r
-    gBS->Stall (gPollInterval);\r
+    MicroSecondDelay (gPollInterval);\r
     Timeout += gPollInterval;\r
   } while (Timeout <= PcdGet32 (PcdCpuApInitTimeOutInMicroSeconds));\r
   ASSERT (Timeout <= PcdGet32 (PcdCpuApInitTimeOutInMicroSeconds));\r
@@ -1748,6 +1765,21 @@ InitializeMpSupport (
   //\r
   CollectBistDataFromHob ();\r
 \r
+  //\r
+  // Synchronize MTRR settings to APs.\r
+  //\r
+  MtrrGetAllMtrrs (&MtrrSettings);\r
+  Status = mMpServicesTemplate.StartupAllAPs (\r
+                                 &mMpServicesTemplate, // This\r
+                                 SetMtrrsFromBuffer,   // Procedure\r
+                                 TRUE,                 // SingleThread\r
+                                 NULL,                 // WaitEvent\r
+                                 0,                    // TimeoutInMicrosecsond\r
+                                 &MtrrSettings,        // ProcedureArgument\r
+                                 NULL                  // FailedCpuList\r
+                                 );\r
+  ASSERT (Status == EFI_SUCCESS || Status == EFI_NOT_STARTED);\r
+\r
   Status = gBS->InstallMultipleProtocolInterfaces (\r
                   &mMpServiceHandle,\r
                   &gEfiMpServiceProtocolGuid,  &mMpServicesTemplate,\r