Changeset 99404 in vbox for trunk/src/VBox/Devices/EFI/FirmwareNew/OvmfPkg/PlatformPei/FeatureControl.c
- Timestamp:
- Apr 14, 2023 3:17:44 PM (2 years ago)
- svn:sync-xref-src-repo-rev:
- 156854
- Location:
- trunk/src/VBox/Devices/EFI/FirmwareNew
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/Devices/EFI/FirmwareNew
-
Property svn:mergeinfo
changed from (toggle deleted branches)
to (toggle deleted branches)/vendor/edk2/current 103735-103757,103769-103776,129194-145445 /vendor/edk2/current 103735-103757,103769-103776,129194-156846
-
Property svn:mergeinfo
changed from (toggle deleted branches)
-
trunk/src/VBox/Devices/EFI/FirmwareNew/OvmfPkg/PlatformPei/FeatureControl.c
r85718 r99404 9 9 10 10 #include <Library/DebugLib.h> 11 #include <Library/HobLib.h> 11 12 #include <Library/PeiServicesLib.h> 12 13 #include <Library/QemuFwCfgLib.h> 13 14 #include <Ppi/MpServices.h> 14 15 #include <Register/ArchitecturalMsr.h> 16 #include <IndustryStandard/Tdx.h> 15 17 16 18 #include "Platform.h" 17 18 //19 // The value to be written to the Feature Control MSR, retrieved from fw_cfg.20 //21 STATIC UINT64 mFeatureControlValue;22 19 23 20 /** … … 35 32 EFIAPI 36 33 WriteFeatureControl ( 37 IN OUT VOID *WorkSpace34 IN OUT VOID *WorkSpace 38 35 ) 39 36 { 40 AsmWriteMsr64 (MSR_IA32_FEATURE_CONTROL, mFeatureControlValue); 37 EFI_HOB_PLATFORM_INFO *PlatformInfoHob = WorkSpace; 38 39 if (TdIsEnabled ()) { 40 TdVmCall ( 41 TDVMCALL_WRMSR, 42 (UINT64)MSR_IA32_FEATURE_CONTROL, 43 PlatformInfoHob->FeatureControlValue, 44 0, 45 0, 46 0 47 ); 48 } else { 49 AsmWriteMsr64 ( 50 MSR_IA32_FEATURE_CONTROL, 51 PlatformInfoHob->FeatureControlValue 52 ); 53 } 41 54 } 42 55 … … 61 74 ) 62 75 { 63 EFI_PEI_MP_SERVICES_PPI *MpServices; 64 EFI_STATUS Status; 76 EFI_PEI_MP_SERVICES_PPI *MpServices; 77 EFI_STATUS Status; 78 EFI_HOB_PLATFORM_INFO *PlatformInfoHob; 79 EFI_HOB_GUID_TYPE *GuidHob; 80 81 GuidHob = GetFirstGuidHob (&gUefiOvmfPkgPlatformInfoGuid); 82 if (GuidHob == NULL) { 83 return EFI_UNSUPPORTED; 84 } 85 86 PlatformInfoHob = (EFI_HOB_PLATFORM_INFO *)GET_GUID_HOB_DATA (GuidHob); 65 87 66 88 DEBUG ((DEBUG_VERBOSE, "%a: %a\n", gEfiCallerBaseName, __FUNCTION__)); … … 70 92 // 71 93 MpServices = Ppi; 72 Status = MpServices->StartupAllAPs (73 (CONST EFI_PEI_SERVICES **)PeiServices,74 MpServices,75 WriteFeatureControl, // Procedure76 FALSE, // SingleThread77 0, // TimeoutInMicroSeconds: inf.78 NULL// ProcedureArgument79 );80 if (EFI_ERROR (Status) && Status != EFI_NOT_STARTED) {94 Status = MpServices->StartupAllAPs ( 95 (CONST EFI_PEI_SERVICES **)PeiServices, 96 MpServices, 97 WriteFeatureControl, // Procedure 98 FALSE, // SingleThread 99 0, // TimeoutInMicroSeconds: inf. 100 PlatformInfoHob // ProcedureArgument 101 ); 102 if (EFI_ERROR (Status) && (Status != EFI_NOT_STARTED)) { 81 103 DEBUG ((DEBUG_ERROR, "%a: StartupAllAps(): %r\n", __FUNCTION__, Status)); 82 104 return Status; … … 86 108 // Now write the MSR on the BSP too. 87 109 // 88 WriteFeatureControl ( NULL);110 WriteFeatureControl (PlatformInfoHob); 89 111 return EFI_SUCCESS; 90 112 } … … 94 116 // EFI_PEI_MP_SERVICES_PPI becomes available. 95 117 // 96 STATIC CONST EFI_PEI_NOTIFY_DESCRIPTOR mMpServicesNotify = {118 STATIC CONST EFI_PEI_NOTIFY_DESCRIPTOR mMpServicesNotify = { 97 119 EFI_PEI_PPI_DESCRIPTOR_NOTIFY_CALLBACK | // Flags 98 120 EFI_PEI_PPI_DESCRIPTOR_TERMINATE_LIST, … … 103 125 VOID 104 126 InstallFeatureControlCallback ( 105 VOID127 IN OUT EFI_HOB_PLATFORM_INFO *PlatformInfoHob 106 128 ) 107 129 { 108 EFI_STATUS Status;109 FIRMWARE_CONFIG_ITEM FwCfgItem;110 UINTN FwCfgSize;130 EFI_STATUS Status; 131 FIRMWARE_CONFIG_ITEM FwCfgItem; 132 UINTN FwCfgSize; 111 133 112 Status = QemuFwCfgFindFile ("etc/msr_feature_control", &FwCfgItem, 113 &FwCfgSize); 114 if (EFI_ERROR (Status) || FwCfgSize != sizeof mFeatureControlValue) { 134 Status = QemuFwCfgFindFile ( 135 "etc/msr_feature_control", 136 &FwCfgItem, 137 &FwCfgSize 138 ); 139 if (EFI_ERROR (Status) || (FwCfgSize != sizeof (PlatformInfoHob->FeatureControlValue))) { 115 140 // 116 141 // Nothing to do. … … 118 143 return; 119 144 } 145 120 146 QemuFwCfgSelectItem (FwCfgItem); 121 QemuFwCfgReadBytes (sizeof mFeatureControlValue, &mFeatureControlValue); 147 QemuFwCfgReadBytes ( 148 sizeof (PlatformInfoHob->FeatureControlValue), 149 &(PlatformInfoHob->FeatureControlValue) 150 ); 122 151 123 152 Status = PeiServicesNotifyPpi (&mMpServicesNotify); 124 153 if (EFI_ERROR (Status)) { 125 DEBUG ((DEBUG_ERROR, "%a: failed to set up MP Services callback: %r\n", 126 __FUNCTION__, Status)); 154 DEBUG (( 155 DEBUG_ERROR, 156 "%a: failed to set up MP Services callback: %r\n", 157 __FUNCTION__, 158 Status 159 )); 127 160 } 128 161 }
Note:
See TracChangeset
for help on using the changeset viewer.