From e63d707db946519d04590b86e241ac82e328339b Mon Sep 17 00:00:00 2001 From: "Dr. David Alan Gilbert" Date: Wed, 11 Oct 2017 17:54:59 +0200 Subject: [PATCH 14/69] acpi: Force rev1 FADT on old q35 machine types RH-Author: Dr. David Alan Gilbert Message-id: <20171011175500.12390-2-dgilbert@redhat.com> Patchwork-id: 77177 O-Subject: [RHV7.5 qemu-kvm-rhev PATCH v3 1/2] acpi: Force rev1 FADT on old q35 machine types Bugzilla: 1489800 RH-Acked-by: Laszlo Ersek RH-Acked-by: Gerd Hoffmann RH-Acked-by: Igor Mammedov From: "Dr. David Alan Gilbert" Upstream lp's 1714331 found that older OVMF didn't boot various versions of windows on 2.10+q35 due to the change to the newer FADT version. That's fixed with a newer OVMF, and it's too late upstream to keep compatibility. Downstream, keep the compatibility on the older rhel-q35 machine types by forcing rev1 FADT. Signed-off-by: Dr. David Alan Gilbert Signed-off-by: Miroslav Rezanina --- hw/acpi/ich9.c | 16 ++++++++++++++++ hw/i386/acpi-build.c | 2 ++ include/hw/acpi/ich9.h | 3 +++ include/hw/i386/pc.h | 5 +++++ 4 files changed, 26 insertions(+) diff --git a/hw/acpi/ich9.c b/hw/acpi/ich9.c index a4e87b8..23a7baa 100644 --- a/hw/acpi/ich9.c +++ b/hw/acpi/ich9.c @@ -441,6 +441,18 @@ static void ich9_pm_set_enable_tco(Object *obj, bool value, Error **errp) s->pm.enable_tco = value; } +static bool ich9_pm_get_force_rev1_fadt(Object *obj, Error **errp) +{ + ICH9LPCState *s = ICH9_LPC_DEVICE(obj); + return s->pm.force_rev1_fadt; +} + +static void ich9_pm_set_force_rev1_fadt(Object *obj, bool value, Error **errp) +{ + ICH9LPCState *s = ICH9_LPC_DEVICE(obj); + s->pm.force_rev1_fadt = value; +} + void ich9_pm_add_properties(Object *obj, ICH9LPCPMRegs *pm, Error **errp) { static const uint32_t gpe0_len = ICH9_PMIO_GPE0_LEN; @@ -465,6 +477,10 @@ void ich9_pm_add_properties(Object *obj, ICH9LPCPMRegs *pm, Error **errp) ich9_pm_get_cpu_hotplug_legacy, ich9_pm_set_cpu_hotplug_legacy, NULL); + object_property_add_bool(obj, "__com.redhat_force-rev1-fadt", + ich9_pm_get_force_rev1_fadt, + ich9_pm_set_force_rev1_fadt, + NULL); object_property_add(obj, ACPI_PM_PROP_S3_DISABLED, "uint8", ich9_pm_get_disable_s3, ich9_pm_set_disable_s3, diff --git a/hw/i386/acpi-build.c b/hw/i386/acpi-build.c index 98dd424..e38fff2 100644 --- a/hw/i386/acpi-build.c +++ b/hw/i386/acpi-build.c @@ -146,6 +146,8 @@ static void acpi_get_pm_info(AcpiPmInfo *pm) } if (lpc) { obj = lpc; + pm->force_rev1_fadt = object_property_get_bool(lpc, + "__com.redhat_force-rev1-fadt", NULL); pm->cpu_hp_io_base = ICH9_CPU_HOTPLUG_IO_BASE; } assert(obj); diff --git a/include/hw/acpi/ich9.h b/include/hw/acpi/ich9.h index a352c94..e9a8fad 100644 --- a/include/hw/acpi/ich9.h +++ b/include/hw/acpi/ich9.h @@ -61,6 +61,9 @@ typedef struct ICH9LPCPMRegs { uint8_t smm_enabled; bool enable_tco; TCOIORegs tco_regs; + + /* RH addition, see bz 1489800 */ + bool force_rev1_fadt; } ICH9LPCPMRegs; void ich9_pm_init(PCIDevice *lpc_pci, ICH9LPCPMRegs *pm, diff --git a/include/hw/i386/pc.h b/include/hw/i386/pc.h index 89bdaa4..a8d6857 100644 --- a/include/hw/i386/pc.h +++ b/include/hw/i386/pc.h @@ -1007,6 +1007,11 @@ extern void igd_passthrough_isa_bridge_create(PCIBus *bus, uint16_t gpu_dev_id); .driver = "mch",\ .property = "extended-tseg-mbytes",\ .value = stringify(0),\ + },\ + { /* PC_RHEL7_4_COMPAT bz 1489800 */ \ + .driver = "ICH9-LPC",\ + .property = "__com.redhat_force-rev1-fadt",\ + .value = "on",\ }, -- 1.8.3.1