**/\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
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
{\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
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
//\r
// Now write the MSR on the BSP too.\r
//\r
- WriteFeatureControl (NULL);\r
+ WriteFeatureControl (PlatformInfoHob);\r
return EFI_SUCCESS;\r
}\r
\r
\r
VOID\r
InstallFeatureControlCallback (\r
- VOID\r
+ IN OUT EFI_HOB_PLATFORM_INFO *PlatformInfoHob\r
)\r
{\r
EFI_STATUS Status;\r
&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
}\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