From: "Michael S. Tsirkin" <mst@redhat.com>
To: Gerd Hoffmann <kraxel@redhat.com>
Cc: "Laurent Vivier" <lvivier@redhat.com>,
"Kevin Wolf" <kwolf@redhat.com>, "Thomas Huth" <thuth@redhat.com>,
"Eduardo Habkost" <ehabkost@redhat.com>,
qemu-block@nongnu.org, qemu-devel@nongnu.org,
"Max Reitz" <mreitz@redhat.com>,
"Marc-André Lureau" <marcandre.lureau@redhat.com>,
"Paolo Bonzini" <pbonzini@redhat.com>,
"Igor Mammedov" <imammedo@redhat.com>,
"John Snow" <jsnow@redhat.com>,
"Richard Henderson" <rth@twiddle.net>
Subject: Re: [PATCH v9 02/10] acpi: move aml builder code for floppy device
Date: Thu, 18 Jun 2020 16:07:11 -0400 [thread overview]
Message-ID: <20200618160642-mutt-send-email-mst@kernel.org> (raw)
In-Reply-To: <20200617071138.11159-3-kraxel@redhat.com>
On Wed, Jun 17, 2020 at 09:11:30AM +0200, Gerd Hoffmann wrote:
> DSDT change: isa device order changes in case MI1 (ipmi) is present.
>
> Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
> Reviewed-by: Igor Mammedov <imammedo@redhat.com>
> ---
Pls follow process outlined at the top of tests/qtest/bios-tables-test.c
Don't change expected files with source.
Thanks!
> hw/block/fdc.c | 83 ++++++++++++++++++++++++++++++++
> hw/i386/acpi-build.c | 83 --------------------------------
> stubs/cmos.c | 7 +++
> stubs/Makefile.objs | 1 +
> tests/data/acpi/pc/DSDT.ipmikcs | Bin 5086 -> 5086 bytes
> 5 files changed, 91 insertions(+), 83 deletions(-)
> create mode 100644 stubs/cmos.c
>
> diff --git a/hw/block/fdc.c b/hw/block/fdc.c
> index 8528b9a3c722..c92436772292 100644
> --- a/hw/block/fdc.c
> +++ b/hw/block/fdc.c
> @@ -32,6 +32,8 @@
> #include "qapi/error.h"
> #include "qemu/error-report.h"
> #include "qemu/timer.h"
> +#include "hw/i386/pc.h"
> +#include "hw/acpi/aml-build.h"
> #include "hw/irq.h"
> #include "hw/isa/isa.h"
> #include "hw/qdev-properties.h"
> @@ -2765,6 +2767,85 @@ void isa_fdc_get_drive_max_chs(FloppyDriveType type,
> (*maxc)--;
> }
>
> +static Aml *build_fdinfo_aml(int idx, FloppyDriveType type)
> +{
> + Aml *dev, *fdi;
> + uint8_t maxc, maxh, maxs;
> +
> + isa_fdc_get_drive_max_chs(type, &maxc, &maxh, &maxs);
> +
> + dev = aml_device("FLP%c", 'A' + idx);
> +
> + aml_append(dev, aml_name_decl("_ADR", aml_int(idx)));
> +
> + fdi = aml_package(16);
> + aml_append(fdi, aml_int(idx)); /* Drive Number */
> + aml_append(fdi,
> + aml_int(cmos_get_fd_drive_type(type))); /* Device Type */
> + /*
> + * the values below are the limits of the drive, and are thus independent
> + * of the inserted media
> + */
> + aml_append(fdi, aml_int(maxc)); /* Maximum Cylinder Number */
> + aml_append(fdi, aml_int(maxs)); /* Maximum Sector Number */
> + aml_append(fdi, aml_int(maxh)); /* Maximum Head Number */
> + /*
> + * SeaBIOS returns the below values for int 0x13 func 0x08 regardless of
> + * the drive type, so shall we
> + */
> + aml_append(fdi, aml_int(0xAF)); /* disk_specify_1 */
> + aml_append(fdi, aml_int(0x02)); /* disk_specify_2 */
> + aml_append(fdi, aml_int(0x25)); /* disk_motor_wait */
> + aml_append(fdi, aml_int(0x02)); /* disk_sector_siz */
> + aml_append(fdi, aml_int(0x12)); /* disk_eot */
> + aml_append(fdi, aml_int(0x1B)); /* disk_rw_gap */
> + aml_append(fdi, aml_int(0xFF)); /* disk_dtl */
> + aml_append(fdi, aml_int(0x6C)); /* disk_formt_gap */
> + aml_append(fdi, aml_int(0xF6)); /* disk_fill */
> + aml_append(fdi, aml_int(0x0F)); /* disk_head_sttl */
> + aml_append(fdi, aml_int(0x08)); /* disk_motor_strt */
> +
> + aml_append(dev, aml_name_decl("_FDI", fdi));
> + return dev;
> +}
> +
> +static void fdc_isa_build_aml(ISADevice *isadev, Aml *scope)
> +{
> + Aml *dev;
> + Aml *crs;
> + int i;
> +
> +#define ACPI_FDE_MAX_FD 4
> + uint32_t fde_buf[5] = {
> + 0, 0, 0, 0, /* presence of floppy drives #0 - #3 */
> + cpu_to_le32(2) /* tape presence (2 == never present) */
> + };
> +
> + crs = aml_resource_template();
> + aml_append(crs, aml_io(AML_DECODE16, 0x03F2, 0x03F2, 0x00, 0x04));
> + aml_append(crs, aml_io(AML_DECODE16, 0x03F7, 0x03F7, 0x00, 0x01));
> + aml_append(crs, aml_irq_no_flags(6));
> + aml_append(crs,
> + aml_dma(AML_COMPATIBILITY, AML_NOTBUSMASTER, AML_TRANSFER8, 2));
> +
> + dev = aml_device("FDC0");
> + aml_append(dev, aml_name_decl("_HID", aml_eisaid("PNP0700")));
> + aml_append(dev, aml_name_decl("_CRS", crs));
> +
> + for (i = 0; i < MIN(MAX_FD, ACPI_FDE_MAX_FD); i++) {
> + FloppyDriveType type = isa_fdc_get_drive_type(isadev, i);
> +
> + if (type < FLOPPY_DRIVE_TYPE_NONE) {
> + fde_buf[i] = cpu_to_le32(1); /* drive present */
> + aml_append(dev, build_fdinfo_aml(i, type));
> + }
> + }
> + aml_append(dev, aml_name_decl("_FDE",
> + aml_buffer(sizeof(fde_buf), (uint8_t *)fde_buf)));
> +
> + aml_append(scope, dev);
> +}
> +
> static const VMStateDescription vmstate_isa_fdc ={
> .name = "fdc",
> .version_id = 2,
> @@ -2798,11 +2879,13 @@ static Property isa_fdc_properties[] = {
> static void isabus_fdc_class_init(ObjectClass *klass, void *data)
> {
> DeviceClass *dc = DEVICE_CLASS(klass);
> + ISADeviceClass *isa = ISA_DEVICE_CLASS(klass);
>
> dc->realize = isabus_fdc_realize;
> dc->fw_name = "fdc";
> dc->reset = fdctrl_external_reset_isa;
> dc->vmsd = &vmstate_isa_fdc;
> + isa->build_aml = fdc_isa_build_aml;
> device_class_set_props(dc, isa_fdc_properties);
> set_bit(DEVICE_CATEGORY_STORAGE, dc->categories);
> }
> diff --git a/hw/i386/acpi-build.c b/hw/i386/acpi-build.c
> index 900f786d08de..45297d9a90e7 100644
> --- a/hw/i386/acpi-build.c
> +++ b/hw/i386/acpi-build.c
> @@ -938,85 +938,6 @@ static void build_hpet_aml(Aml *table)
> aml_append(table, scope);
> }
>
> -static Aml *build_fdinfo_aml(int idx, FloppyDriveType type)
> -{
> - Aml *dev, *fdi;
> - uint8_t maxc, maxh, maxs;
> -
> - isa_fdc_get_drive_max_chs(type, &maxc, &maxh, &maxs);
> -
> - dev = aml_device("FLP%c", 'A' + idx);
> -
> - aml_append(dev, aml_name_decl("_ADR", aml_int(idx)));
> -
> - fdi = aml_package(16);
> - aml_append(fdi, aml_int(idx)); /* Drive Number */
> - aml_append(fdi,
> - aml_int(cmos_get_fd_drive_type(type))); /* Device Type */
> - /*
> - * the values below are the limits of the drive, and are thus independent
> - * of the inserted media
> - */
> - aml_append(fdi, aml_int(maxc)); /* Maximum Cylinder Number */
> - aml_append(fdi, aml_int(maxs)); /* Maximum Sector Number */
> - aml_append(fdi, aml_int(maxh)); /* Maximum Head Number */
> - /*
> - * SeaBIOS returns the below values for int 0x13 func 0x08 regardless of
> - * the drive type, so shall we
> - */
> - aml_append(fdi, aml_int(0xAF)); /* disk_specify_1 */
> - aml_append(fdi, aml_int(0x02)); /* disk_specify_2 */
> - aml_append(fdi, aml_int(0x25)); /* disk_motor_wait */
> - aml_append(fdi, aml_int(0x02)); /* disk_sector_siz */
> - aml_append(fdi, aml_int(0x12)); /* disk_eot */
> - aml_append(fdi, aml_int(0x1B)); /* disk_rw_gap */
> - aml_append(fdi, aml_int(0xFF)); /* disk_dtl */
> - aml_append(fdi, aml_int(0x6C)); /* disk_formt_gap */
> - aml_append(fdi, aml_int(0xF6)); /* disk_fill */
> - aml_append(fdi, aml_int(0x0F)); /* disk_head_sttl */
> - aml_append(fdi, aml_int(0x08)); /* disk_motor_strt */
> -
> - aml_append(dev, aml_name_decl("_FDI", fdi));
> - return dev;
> -}
> -
> -static Aml *build_fdc_device_aml(ISADevice *fdc)
> -{
> - int i;
> - Aml *dev;
> - Aml *crs;
> -
> -#define ACPI_FDE_MAX_FD 4
> - uint32_t fde_buf[5] = {
> - 0, 0, 0, 0, /* presence of floppy drives #0 - #3 */
> - cpu_to_le32(2) /* tape presence (2 == never present) */
> - };
> -
> - dev = aml_device("FDC0");
> - aml_append(dev, aml_name_decl("_HID", aml_eisaid("PNP0700")));
> -
> - crs = aml_resource_template();
> - aml_append(crs, aml_io(AML_DECODE16, 0x03F2, 0x03F2, 0x00, 0x04));
> - aml_append(crs, aml_io(AML_DECODE16, 0x03F7, 0x03F7, 0x00, 0x01));
> - aml_append(crs, aml_irq_no_flags(6));
> - aml_append(crs,
> - aml_dma(AML_COMPATIBILITY, AML_NOTBUSMASTER, AML_TRANSFER8, 2));
> - aml_append(dev, aml_name_decl("_CRS", crs));
> -
> - for (i = 0; i < MIN(MAX_FD, ACPI_FDE_MAX_FD); i++) {
> - FloppyDriveType type = isa_fdc_get_drive_type(fdc, i);
> -
> - if (type < FLOPPY_DRIVE_TYPE_NONE) {
> - fde_buf[i] = cpu_to_le32(1); /* drive present */
> - aml_append(dev, build_fdinfo_aml(i, type));
> - }
> - }
> - aml_append(dev, aml_name_decl("_FDE",
> - aml_buffer(sizeof(fde_buf), (uint8_t *)fde_buf)));
> -
> - return dev;
> -}
> -
> static Aml *build_kbd_device_aml(void)
> {
> Aml *dev;
> @@ -1092,7 +1013,6 @@ static Aml *build_vmbus_device_aml(VMBusBridge *vmbus_bridge)
>
> static void build_isa_devices_aml(Aml *table)
> {
> - ISADevice *fdc = pc_find_fdc0();
> VMBusBridge *vmbus_bridge = vmbus_bridge_find();
> bool ambiguous;
>
> @@ -1101,9 +1021,6 @@ static void build_isa_devices_aml(Aml *table)
>
> aml_append(scope, build_kbd_device_aml());
> aml_append(scope, build_mouse_device_aml());
> - if (fdc) {
> - aml_append(scope, build_fdc_device_aml(fdc));
> - }
>
> if (ambiguous) {
> error_report("Multiple ISA busses, unable to define IPMI ACPI data");
> diff --git a/stubs/cmos.c b/stubs/cmos.c
> new file mode 100644
> index 000000000000..416cbe4055ff
> --- /dev/null
> +++ b/stubs/cmos.c
> @@ -0,0 +1,7 @@
> +#include "qemu/osdep.h"
> +#include "hw/i386/pc.h"
> +
> +int cmos_get_fd_drive_type(FloppyDriveType fd0)
> +{
> + return 0;
> +}
> diff --git a/stubs/Makefile.objs b/stubs/Makefile.objs
> index 28e48171d1f3..f32b9e47a3d8 100644
> --- a/stubs/Makefile.objs
> +++ b/stubs/Makefile.objs
> @@ -1,4 +1,5 @@
> stub-obj-y += blk-commit-all.o
> +stub-obj-y += cmos.o
> stub-obj-y += cpu-get-clock.o
> stub-obj-y += cpu-get-icount.o
> stub-obj-y += dump.o
> diff --git a/tests/data/acpi/pc/DSDT.ipmikcs b/tests/data/acpi/pc/DSDT.ipmikcs
> index 57b78358744a5bb13639ccddb887be2721240807..c285651131dc2ab8b0f32de750d7ac02a8b09936 100644
> GIT binary patch
> delta 20
> ccmcboeouV^E7Rl-CXdOiOwF4wF!2cj08$MG=l}o!
>
> delta 20
> ccmcboeouV^E7N3Orsm14OdgvrF!2cj08ljstpET3
>
> --
> 2.18.4
next prev parent reply other threads:[~2020-06-18 20:08 UTC|newest]
Thread overview: 22+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-06-17 7:11 [PATCH v9 00/10] acpi: i386 tweaks Gerd Hoffmann
2020-06-17 7:11 ` [PATCH v9 01/10] acpi: bios-tables-test: show more context on asl diffs Gerd Hoffmann
2020-06-17 7:31 ` Philippe Mathieu-Daudé
2020-06-17 7:11 ` [PATCH v9 02/10] acpi: move aml builder code for floppy device Gerd Hoffmann
2020-06-17 8:40 ` Thomas Huth
2020-06-17 11:31 ` Gerd Hoffmann
2020-06-17 11:34 ` Thomas Huth
2020-06-18 20:07 ` Michael S. Tsirkin [this message]
2020-06-17 7:11 ` [PATCH v9 03/10] floppy: make isa_fdc_get_drive_max_chs static Gerd Hoffmann
2020-06-17 7:11 ` [PATCH v9 04/10] floppy: move cmos_get_fd_drive_type() from pc Gerd Hoffmann
2020-06-17 7:11 ` [PATCH v9 05/10] acpi: move aml builder code for i8042 (kbd+mouse) device Gerd Hoffmann
2020-06-18 20:05 ` Michael S. Tsirkin
2020-06-17 7:11 ` [PATCH v9 06/10] acpi: factor out fw_cfg_add_acpi_dsdt() Gerd Hoffmann
2020-06-17 7:11 ` [PATCH v9 07/10] acpi: simplify build_isa_devices_aml() Gerd Hoffmann
2020-06-17 7:11 ` [PATCH v9 08/10] acpi: drop serial/parallel enable bits from dsdt Gerd Hoffmann
2020-06-18 20:08 ` Michael S. Tsirkin
2020-06-17 7:11 ` [PATCH v9 09/10] acpi: drop build_piix4_pm() Gerd Hoffmann
2020-06-17 7:11 ` [PATCH v9 10/10] acpi: q35: drop _SB.PCI0.ISA.LPCD opregion Gerd Hoffmann
2020-06-17 7:24 ` [PATCH v9 00/10] acpi: i386 tweaks no-reply
2020-06-17 7:42 ` no-reply
2020-06-17 7:47 ` no-reply
2020-06-18 20:09 ` 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=20200618160642-mutt-send-email-mst@kernel.org \
--to=mst@redhat.com \
--cc=ehabkost@redhat.com \
--cc=imammedo@redhat.com \
--cc=jsnow@redhat.com \
--cc=kraxel@redhat.com \
--cc=kwolf@redhat.com \
--cc=lvivier@redhat.com \
--cc=marcandre.lureau@redhat.com \
--cc=mreitz@redhat.com \
--cc=pbonzini@redhat.com \
--cc=qemu-block@nongnu.org \
--cc=qemu-devel@nongnu.org \
--cc=rth@twiddle.net \
--cc=thuth@redhat.com \
/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.