From cf4534c9daf2ead4ce530d374f0a06a95bd98693 Mon Sep 17 00:00:00 2001 From: Kun Qin Date: Wed, 23 Apr 2025 10:39:32 -0700 Subject: [PATCH] OvmfPkg: SmmControl2Dxe: Avoid double initialization This change adds a build time PCD to prevent the SmmControl2Dxe driver from re-initialization the MM related registers. This register is to be used when MmControlPei is already executed in PEI phase and completed setting up the MM control registers. Signed-off-by: Kun Qin --- OvmfPkg/OvmfPkg.dec | 4 ++++ OvmfPkg/SmmControl2Dxe/SmmControl2Dxe.c | 16 +++++++++------- OvmfPkg/SmmControl2Dxe/SmmControl2Dxe.inf | 1 + 3 files changed, 14 insertions(+), 7 deletions(-) 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