Message ID | 20200403080502.8154-5-kraxel@redhat.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | acpi: i386 tweaks | expand |
On Fri, 3 Apr 2020 10:04:54 +0200 Gerd Hoffmann <kraxel@redhat.com> wrote: > The _STA method dates back to the days where we had a static DSDT. The > device is listed in the DSDT table unconditionally and the _STA method > checks a bit in the isa bridge pci config space to figure whenever a > given is isa device is present or not, then evaluates to 0x0f (present) > or 0x00 (absent). > > These days the DSDT is generated by qemu anyway, so if a device is not > present we can simply drop it from the DSDT instead. > > Signed-off-by: Gerd Hoffmann <kraxel@redhat.com> I'd drop this patch and squash commit message into 8/12, but I don't insist since get_system_io() added here is removed by 8/12, so either way Reviewed-by: Igor Mammedov <imammedo@redhat.com> also for patches that modify DSDT, see comment at the start of tests/qtest/bios-tables-test.c to make 'make check' happy and don't break tests during bisection > --- > hw/i386/acpi-build.c | 32 ++++++++------------------------ > 1 file changed, 8 insertions(+), 24 deletions(-) > > diff --git a/hw/i386/acpi-build.c b/hw/i386/acpi-build.c > index 214b98671bf2..08433a06039f 100644 > --- a/hw/i386/acpi-build.c > +++ b/hw/i386/acpi-build.c > @@ -1218,50 +1218,34 @@ static Aml *build_lpt_device_aml(void) > return dev; > } > > -static Aml *build_com_device_aml(uint8_t uid) > +static void build_com_device_aml(Aml *scope, uint8_t uid) > { > Aml *dev; > Aml *crs; > - Aml *method; > - Aml *if_ctx; > - Aml *else_ctx; > - Aml *zero = aml_int(0); > - Aml *is_present = aml_local(0); > - const char *enabled_field = "CAEN"; > uint8_t irq = 4; > uint16_t io_port = 0x03F8; > > assert(uid == 1 || uid == 2); > if (uid == 2) { > - enabled_field = "CBEN"; > irq = 3; > io_port = 0x02F8; > } > + if (!memory_region_present(get_system_io(), io_port)) { > + return; > + } > > dev = aml_device("COM%d", uid); > aml_append(dev, aml_name_decl("_HID", aml_eisaid("PNP0501"))); > aml_append(dev, aml_name_decl("_UID", aml_int(uid))); > > - method = aml_method("_STA", 0, AML_NOTSERIALIZED); > - aml_append(method, aml_store(aml_name("%s", enabled_field), is_present)); > - if_ctx = aml_if(aml_equal(is_present, zero)); > - { > - aml_append(if_ctx, aml_return(aml_int(0x00))); > - } > - aml_append(method, if_ctx); > - else_ctx = aml_else(); > - { > - aml_append(else_ctx, aml_return(aml_int(0x0f))); > - } > - aml_append(method, else_ctx); > - aml_append(dev, method); > + aml_append(dev, aml_name_decl("_STA", aml_int(0xf))); > > crs = aml_resource_template(); > aml_append(crs, aml_io(AML_DECODE16, io_port, io_port, 0x00, 0x08)); > aml_append(crs, aml_irq_no_flags(irq)); > aml_append(dev, aml_name_decl("_CRS", crs)); > > - return dev; > + aml_append(scope, dev); > } > > static void build_isa_devices_aml(Aml *table) > @@ -1279,8 +1263,8 @@ static void build_isa_devices_aml(Aml *table) > aml_append(scope, build_fdc_device_aml(fdc)); > } > aml_append(scope, build_lpt_device_aml()); > - aml_append(scope, build_com_device_aml(1)); > - aml_append(scope, build_com_device_aml(2)); > + build_com_device_aml(scope, 1); > + build_com_device_aml(scope, 2); > > if (ambiguous) { > error_report("Multiple ISA busses, unable to define IPMI ACPI data");
> > Signed-off-by: Gerd Hoffmann <kraxel@redhat.com> > I'd drop this patch and squash commit message into 8/12, > but I don't insist since get_system_io() added here is removed by 8/12, > so either way They are logically separate changes (even though the first enables the second), so I'd prefer to keep them separate. Reordering the series so they are grouped makes sense though I think. take care, Gerd
diff --git a/hw/i386/acpi-build.c b/hw/i386/acpi-build.c index 214b98671bf2..08433a06039f 100644 --- a/hw/i386/acpi-build.c +++ b/hw/i386/acpi-build.c @@ -1218,50 +1218,34 @@ static Aml *build_lpt_device_aml(void) return dev; } -static Aml *build_com_device_aml(uint8_t uid) +static void build_com_device_aml(Aml *scope, uint8_t uid) { Aml *dev; Aml *crs; - Aml *method; - Aml *if_ctx; - Aml *else_ctx; - Aml *zero = aml_int(0); - Aml *is_present = aml_local(0); - const char *enabled_field = "CAEN"; uint8_t irq = 4; uint16_t io_port = 0x03F8; assert(uid == 1 || uid == 2); if (uid == 2) { - enabled_field = "CBEN"; irq = 3; io_port = 0x02F8; } + if (!memory_region_present(get_system_io(), io_port)) { + return; + } dev = aml_device("COM%d", uid); aml_append(dev, aml_name_decl("_HID", aml_eisaid("PNP0501"))); aml_append(dev, aml_name_decl("_UID", aml_int(uid))); - method = aml_method("_STA", 0, AML_NOTSERIALIZED); - aml_append(method, aml_store(aml_name("%s", enabled_field), is_present)); - if_ctx = aml_if(aml_equal(is_present, zero)); - { - aml_append(if_ctx, aml_return(aml_int(0x00))); - } - aml_append(method, if_ctx); - else_ctx = aml_else(); - { - aml_append(else_ctx, aml_return(aml_int(0x0f))); - } - aml_append(method, else_ctx); - aml_append(dev, method); + aml_append(dev, aml_name_decl("_STA", aml_int(0xf))); crs = aml_resource_template(); aml_append(crs, aml_io(AML_DECODE16, io_port, io_port, 0x00, 0x08)); aml_append(crs, aml_irq_no_flags(irq)); aml_append(dev, aml_name_decl("_CRS", crs)); - return dev; + aml_append(scope, dev); } static void build_isa_devices_aml(Aml *table) @@ -1279,8 +1263,8 @@ static void build_isa_devices_aml(Aml *table) aml_append(scope, build_fdc_device_aml(fdc)); } aml_append(scope, build_lpt_device_aml()); - aml_append(scope, build_com_device_aml(1)); - aml_append(scope, build_com_device_aml(2)); + build_com_device_aml(scope, 1); + build_com_device_aml(scope, 2); if (ambiguous) { error_report("Multiple ISA busses, unable to define IPMI ACPI data");
The _STA method dates back to the days where we had a static DSDT. The device is listed in the DSDT table unconditionally and the _STA method checks a bit in the isa bridge pci config space to figure whenever a given is isa device is present or not, then evaluates to 0x0f (present) or 0x00 (absent). These days the DSDT is generated by qemu anyway, so if a device is not present we can simply drop it from the DSDT instead. Signed-off-by: Gerd Hoffmann <kraxel@redhat.com> --- hw/i386/acpi-build.c | 32 ++++++++------------------------ 1 file changed, 8 insertions(+), 24 deletions(-)