]> git.proxmox.com Git - mirror_edk2.git/blobdiff - OvmfPkg/PlatformPei/FeatureControl.c
OvmfPkg/PlatformPei: remove mFeatureControlValue
[mirror_edk2.git] / OvmfPkg / PlatformPei / FeatureControl.c
index 5864ee0c214d3223c6e74c8ba6063b5f465c595e..d8a398cd556566c83876bc248477bc7d9d378f28 100644 (file)
@@ -8,6 +8,7 @@
 **/\r
 \r
 #include <Library/DebugLib.h>\r
+#include <Library/HobLib.h>\r
 #include <Library/PeiServicesLib.h>\r
 #include <Library/QemuFwCfgLib.h>\r
 #include <Ppi/MpServices.h>\r
 \r
 #include "Platform.h"\r
 \r
-//\r
-// The value to be written to the Feature Control MSR, retrieved from fw_cfg.\r
-//\r
-STATIC UINT64  mFeatureControlValue;\r
-\r
 /**\r
   Write the Feature Control MSR on an Application Processor or the Boot\r
   Processor.\r
@@ -38,10 +34,22 @@ WriteFeatureControl (
   IN OUT VOID  *WorkSpace\r
   )\r
 {\r
+  EFI_HOB_PLATFORM_INFO  *PlatformInfoHob = WorkSpace;\r
+\r
   if (TdIsEnabled ()) {\r
-    TdVmCall (TDVMCALL_WRMSR, (UINT64)MSR_IA32_FEATURE_CONTROL, mFeatureControlValue, 0, 0, 0);\r
+    TdVmCall (\r
+      TDVMCALL_WRMSR,\r
+      (UINT64)MSR_IA32_FEATURE_CONTROL,\r
+      PlatformInfoHob->FeatureControlValue,\r
+      0,\r
+      0,\r
+      0\r
+      );\r
   } else {\r
-    AsmWriteMsr64 (MSR_IA32_FEATURE_CONTROL, mFeatureControlValue);\r
+    AsmWriteMsr64 (\r
+      MSR_IA32_FEATURE_CONTROL,\r
+      PlatformInfoHob->FeatureControlValue\r
+      );\r
   }\r
 }\r
 \r
@@ -67,6 +75,15 @@ OnMpServicesAvailable (
 {\r
   EFI_PEI_MP_SERVICES_PPI  *MpServices;\r
   EFI_STATUS               Status;\r
+  EFI_HOB_PLATFORM_INFO    *PlatformInfoHob;\r
+  EFI_HOB_GUID_TYPE        *GuidHob;\r
+\r
+  GuidHob = GetFirstGuidHob (&gUefiOvmfPkgPlatformInfoGuid);\r
+  if (GuidHob == NULL) {\r
+    return EFI_UNSUPPORTED;\r
+  }\r
+\r
+  PlatformInfoHob = (EFI_HOB_PLATFORM_INFO *)GET_GUID_HOB_DATA (GuidHob);\r
 \r
   DEBUG ((DEBUG_VERBOSE, "%a: %a\n", gEfiCallerBaseName, __FUNCTION__));\r
 \r
@@ -80,7 +97,7 @@ OnMpServicesAvailable (
                              WriteFeatureControl, // Procedure\r
                              FALSE,               // SingleThread\r
                              0,                   // TimeoutInMicroSeconds: inf.\r
-                             NULL                 // ProcedureArgument\r
+                             PlatformInfoHob      // ProcedureArgument\r
                              );\r
   if (EFI_ERROR (Status) && (Status != EFI_NOT_STARTED)) {\r
     DEBUG ((DEBUG_ERROR, "%a: StartupAllAps(): %r\n", __FUNCTION__, Status));\r
@@ -90,7 +107,7 @@ OnMpServicesAvailable (
   //\r
   // Now write the MSR on the BSP too.\r
   //\r
-  WriteFeatureControl (NULL);\r
+  WriteFeatureControl (PlatformInfoHob);\r
   return EFI_SUCCESS;\r
 }\r
 \r
@@ -107,7 +124,7 @@ STATIC CONST EFI_PEI_NOTIFY_DESCRIPTOR  mMpServicesNotify = {
 \r
 VOID\r
 InstallFeatureControlCallback (\r
-  VOID\r
+  IN OUT EFI_HOB_PLATFORM_INFO  *PlatformInfoHob\r
   )\r
 {\r
   EFI_STATUS            Status;\r
@@ -119,7 +136,7 @@ InstallFeatureControlCallback (
              &FwCfgItem,\r
              &FwCfgSize\r
              );\r
-  if (EFI_ERROR (Status) || (FwCfgSize != sizeof mFeatureControlValue)) {\r
+  if (EFI_ERROR (Status) || (FwCfgSize != sizeof (PlatformInfoHob->FeatureControlValue))) {\r
     //\r
     // Nothing to do.\r
     //\r
@@ -127,7 +144,10 @@ InstallFeatureControlCallback (
   }\r
 \r
   QemuFwCfgSelectItem (FwCfgItem);\r
-  QemuFwCfgReadBytes (sizeof mFeatureControlValue, &mFeatureControlValue);\r
+  QemuFwCfgReadBytes (\r
+    sizeof (PlatformInfoHob->FeatureControlValue),\r
+    &(PlatformInfoHob->FeatureControlValue)\r
+    );\r
 \r
   Status = PeiServicesNotifyPpi (&mMpServicesNotify);\r
   if (EFI_ERROR (Status)) {\r