From: Igor Mammedov <imammedo@redhat.com>
To: Gerd Hoffmann <kraxel@redhat.com>
Cc: Paolo Bonzini <pbonzini@redhat.com>,
Richard Henderson <rth@twiddle.net>,
"Michael S. Tsirkin" <mst@redhat.com>,
qemu-devel@nongnu.org, Eduardo Habkost <ehabkost@redhat.com>
Subject: Re: [PATCH 5/6] acpi: serial: don't use _STA method
Date: Fri, 27 Mar 2020 15:33:40 +0100 [thread overview]
Message-ID: <20200327153340.519fac3f@redhat.com> (raw)
In-Reply-To: <20200327121111.1530-6-kraxel@redhat.com>
On Fri, 27 Mar 2020 13:11:10 +0100
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>
> ---
> hw/i386/acpi-build-pc.c | 32 ++++++++------------------------
> 1 file changed, 8 insertions(+), 24 deletions(-)
>
> diff --git a/hw/i386/acpi-build-pc.c b/hw/i386/acpi-build-pc.c
> index 18ca2fd46961..97af5eac3d79 100644
> --- a/hw/i386/acpi-build-pc.c
> +++ b/hw/i386/acpi-build-pc.c
> @@ -1204,50 +1204,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)) {
^^^^^^
even though acpi_setup() is a part of board code, usually it's not recommended to
use get_system_foo() outside of machine_init()
how about fishing out present serial ports from isa device in a helper
like acpi_get_misc_info(), and then generalize AML like
build_com_device_aml(Aml *scope, uint8_t uid, io_port, irq)
> + 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)
> @@ -1265,8 +1249,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");
next prev parent reply other threads:[~2020-03-27 14:34 UTC|newest]
Thread overview: 18+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-03-27 12:11 [PATCH 0/6] acpi: i386 tweaks Gerd Hoffmann
2020-03-27 12:11 ` [PATCH 1/6] acpi: split hw/i386/acpi-build.c Gerd Hoffmann
2020-03-27 14:17 ` Igor Mammedov
2020-03-27 12:11 ` [PATCH 2/6] acpi: make build_madt() more generic Gerd Hoffmann
2020-03-27 12:11 ` [PATCH 3/6] acpi: factor out acpi_dsdt_add_fw_cfg() Gerd Hoffmann
2020-03-27 14:18 ` Igor Mammedov
2020-03-27 12:11 ` [PATCH 4/6] acpi: drop pointless _STA method Gerd Hoffmann
2020-03-27 14:21 ` Igor Mammedov
2020-03-27 12:11 ` [PATCH 5/6] acpi: serial: don't use " Gerd Hoffmann
2020-03-27 14:33 ` Igor Mammedov [this message]
2020-03-31 15:23 ` Gerd Hoffmann
2020-03-31 19:53 ` Igor Mammedov
2020-04-01 5:51 ` Gerd Hoffmann
2020-03-27 12:11 ` [PATCH 6/6] acpi: parallel: " Gerd Hoffmann
2020-03-27 14:35 ` Igor Mammedov
2020-03-27 12:47 ` [PATCH 0/6] acpi: i386 tweaks no-reply
2020-03-27 12:49 ` no-reply
2020-03-29 12:46 ` Michael S. Tsirkin
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20200327153340.519fac3f@redhat.com \
--to=imammedo@redhat.com \
--cc=ehabkost@redhat.com \
--cc=kraxel@redhat.com \
--cc=mst@redhat.com \
--cc=pbonzini@redhat.com \
--cc=qemu-devel@nongnu.org \
--cc=rth@twiddle.net \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.