From: Isaku Yamahata <isaku.yamahata@xxxxxxxxx> Disable S3/S4 unconditionally when TDX is enabled. Because cpu state is protected, it's not allowed to reset cpu state. So S3/S4 can't be supported. Signed-off-by: Isaku Yamahata <isaku.yamahata@xxxxxxxxx> --- target/i386/kvm/tdx.c | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/target/i386/kvm/tdx.c b/target/i386/kvm/tdx.c index 0621317b0a..0dd6d94c2a 100644 --- a/target/i386/kvm/tdx.c +++ b/target/i386/kvm/tdx.c @@ -31,6 +31,9 @@ #include "sysemu/tdx.h" #include "tdx.h" +#include "hw/southbridge/piix.h" +#include "hw/i386/ich9.h" + #define TDX1_TD_ATTRIBUTE_DEBUG BIT_ULL(0) #define TDX1_TD_ATTRIBUTE_PERFMON BIT_ULL(63) #define TDX1_MIN_TSC_FREQUENCY_KHZ (100 * 1000) @@ -103,10 +106,27 @@ static TdxFirmwareEntry *tdx_get_hob_entry(TdxGuest *tdx) static void tdx_finalize_vm(Notifier *notifier, void *unused) { + Object *pm; + bool ambig; MachineState *ms = MACHINE(qdev_get_machine()); TdxGuest *tdx = TDX_GUEST(ms->cgs); TdxFirmwareEntry *entry; + /* + * object look up logic is copied from acpi_get_pm_info() + * @ hw/ie86/acpi-build.c + * This property override needs to be done after machine initialization + * as there is no ordering of creation of objects/properties. + */ + pm = object_resolve_path_type("", TYPE_PIIX4_PM, &ambig); + if (ambig || !pm) { + pm = object_resolve_path_type("", TYPE_ICH9_LPC_DEVICE, &ambig); + } + if (!ambig && pm) { + object_property_set_uint(pm, ACPI_PM_PROP_S3_DISABLED, 1, NULL); + object_property_set_uint(pm, ACPI_PM_PROP_S4_DISABLED, 1, NULL); + } + tdvf_hob_create(tdx, tdx_get_hob_entry(tdx)); for_each_fw_entry(&tdx->fw, entry) { -- 2.25.1