]> git.proxmox.com Git - mirror_edk2.git/commitdiff
OvmfPkg/PlatformPei: remove mFeatureControlValue
authorGerd Hoffmann <kraxel@redhat.com>
Fri, 2 Dec 2022 13:10:06 +0000 (14:10 +0100)
committermergify[bot] <37929162+mergify[bot]@users.noreply.github.com>
Wed, 14 Dec 2022 17:45:41 +0000 (17:45 +0000)
Use PlatformInfoHob->FeatureControlValue instead.
OnMpServicesAvailable() will find PlatformInfoHob using
GetFirstGuidHob() and pass a pointer to the WriteFeatureControl
callback.

Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
Tested-by: Tom Lendacky <thomas.lendacky@amd.com>
Acked-by: Ard Biesheuvel <ardb@kernel.org>
OvmfPkg/Include/Library/PlatformInitLib.h
OvmfPkg/PlatformPei/FeatureControl.c
OvmfPkg/PlatformPei/Platform.c
OvmfPkg/PlatformPei/Platform.h

index c5234bf26d45205d175db538841c25bae7fe5a50..da7ed76041d296c76277870af1a14aebc7aad570 100644 (file)
@@ -48,6 +48,8 @@ typedef struct {
 \r
   UINT32               S3AcpiReservedMemoryBase;\r
   UINT32               S3AcpiReservedMemorySize;\r
+\r
+  UINT64               FeatureControlValue;\r
 } EFI_HOB_PLATFORM_INFO;\r
 #pragma pack()\r
 \r
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
index ebce2ba1290e794c2375fb8460bea31e64b484d1..148240342b4b48603e6628c723912ce261b954fa 100644 (file)
@@ -396,7 +396,7 @@ InitializePlatform (
   }\r
 \r
   IntelTdxInitialize ();\r
-  InstallFeatureControlCallback ();\r
+  InstallFeatureControlCallback (PlatformInfoHob);\r
 \r
   return EFI_SUCCESS;\r
 }\r
index 86f603ff649c8906cdb04f8fcb96008b18dc345a..1cf44844a781f7cf3dbc03a5c3c45e2a55c8ff16 100644 (file)
@@ -70,7 +70,7 @@ MemTypeInfoInitialization (
 \r
 VOID\r
 InstallFeatureControlCallback (\r
-  VOID\r
+  IN OUT EFI_HOB_PLATFORM_INFO  *PlatformInfoHob\r
   );\r
 \r
 VOID\r