diff --git a/OvmfPkg/OvmfPkg.dec b/OvmfPkg/OvmfPkg.dec index 2078cf27a8..edc72a98fe 100644 --- a/OvmfPkg/OvmfPkg.dec +++ b/OvmfPkg/OvmfPkg.dec @@ -485,3 +485,7 @@ ## This feature flag indicates the firmware build needs the qemu variable service. gUefiOvmfPkgTokenSpaceGuid.PcdQemuVarsRequire|FALSE|BOOLEAN|0x77 + + ## Informs modules whether the platform firmware supports Standalone MM. + # + gUefiOvmfPkgTokenSpaceGuid.PcdStandaloneMmEnable|FALSE|BOOLEAN|0x100065 diff --git a/OvmfPkg/SmmControl2Dxe/SmmControl2Dxe.c b/OvmfPkg/SmmControl2Dxe/SmmControl2Dxe.c index e7438b18dd..5632b84af9 100644 --- a/OvmfPkg/SmmControl2Dxe/SmmControl2Dxe.c +++ b/OvmfPkg/SmmControl2Dxe/SmmControl2Dxe.c @@ -201,13 +201,15 @@ SmmControl2DxeEntryPoint ( // this bit is clear after each reset. // SmiEnableVal = IoRead32 (mSmiEnable); - if ((SmiEnableVal & ICH9_SMI_EN_APMC_EN) != 0) { - DEBUG (( - DEBUG_ERROR, - "%a: this Q35 implementation lacks SMI\n", - __func__ - )); - goto FatalError; + if (!FeaturePcdGet (PcdStandaloneMmEnable)) { + if ((SmiEnableVal & ICH9_SMI_EN_APMC_EN) != 0) { + DEBUG (( + DEBUG_ERROR, + "%a: this Q35 implementation lacks SMI\n", + __func__ + )); + goto FatalError; + } } // diff --git a/OvmfPkg/SmmControl2Dxe/SmmControl2Dxe.inf b/OvmfPkg/SmmControl2Dxe/SmmControl2Dxe.inf index d20198cab7..c31aee411c 100644 --- a/OvmfPkg/SmmControl2Dxe/SmmControl2Dxe.inf +++ b/OvmfPkg/SmmControl2Dxe/SmmControl2Dxe.inf @@ -69,6 +69,7 @@ [FeaturePcd] gUefiOvmfPkgTokenSpaceGuid.PcdSmmSmramRequire + gUefiOvmfPkgTokenSpaceGuid.PcdStandaloneMmEnable [Depex] TRUE