Message ID | 20231030132058.763556-3-sunilvl@ventanamicro.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | RISC-V: ACPI: Enable AIA, PLIC and update RHCT | expand |
Alistair, Sunil, This patch is breaking riscv-to-apply.next build when using 'clang' and --enable-debug: URCE=600 -DNCURSES_WIDECHAR=1 -DSTRUCT_IOVEC_DEFINED -MD -MQ libcommon.fa.p/hw_virtio_virtio-acpi.c.o -MF libcommon.fa.p/hw_virtio_virtio-acpi.c.o.d -o libcommon.fa.p/hw_virtio_virtio-acpi.c.o -c ../hw/virtio/virtio-acpi.c ../hw/virtio/virtio-acpi.c:14:12: error: variable 'virtio_base' set but not used [-Werror,-Wunused-but-set-variable] hwaddr virtio_base = base; ^ 1 error generated. Looking at the code: void virtio_acpi_dsdt_add(Aml *scope, const hwaddr base, const hwaddr size, uint32_t mmio_irq, long int start_index, int num) { long int i; hwaddr virtio_base = base; <------ for (i = start_index; i < start_index + num; i++) { uint32_t irq = mmio_irq + i; Aml *dev = aml_device("VR%02u", (unsigned)i); aml_append(dev, aml_name_decl("_HID", aml_string("LNRO0005"))); aml_append(dev, aml_name_decl("_UID", aml_int(i))); aml_append(dev, aml_name_decl("_CCA", aml_int(1))); Aml *crs = aml_resource_template(); aml_append(crs, aml_memory32_fixed(base, size, AML_READ_WRITE)); aml_append(crs, aml_interrupt(AML_CONSUMER, AML_LEVEL, AML_ACTIVE_HIGH, AML_EXCLUSIVE, &irq, 1)); aml_append(dev, aml_name_decl("_CRS", crs)); aml_append(scope, dev); virtio_base += size; <------ } } 'virtio_base' is initialized with 'base', and it is incremented in the loop, but nothing else is done with it. This solves it: $ git diff diff --git a/hw/virtio/virtio-acpi.c b/hw/virtio/virtio-acpi.c index 682283800f..eaf6028e93 100644 --- a/hw/virtio/virtio-acpi.c +++ b/hw/virtio/virtio-acpi.c @@ -11,7 +11,6 @@ void virtio_acpi_dsdt_add(Aml *scope, const hwaddr base, const hwaddr size, uint32_t mmio_irq, long int start_index, int num) { long int i; - hwaddr virtio_base = base; for (i = start_index; i < start_index + num; i++) { uint32_t irq = mmio_irq + i; @@ -27,6 +26,5 @@ void virtio_acpi_dsdt_add(Aml *scope, const hwaddr base, const hwaddr size, AML_EXCLUSIVE, &irq, 1)); aml_append(dev, aml_name_decl("_CRS", crs)); aml_append(scope, dev); - virtio_base += size; } } Thanks, Daniel On 10/30/23 10:20, Sunil V L wrote: > RISC-V also needs to create the virtio in DSDT in the same way as ARM. > So, instead of duplicating the code, move this function to the device > specific file which is common across architectures. > > Suggested-by: Igor Mammedov <imammedo@redhat.com> > Signed-off-by: Sunil V L <sunilvl@ventanamicro.com> > Reviewed-by: Alistair Francis <alistair.francis@wdc.com> > Reviewed-by: Andrew Jones <ajones@ventanamicro.com> > --- > hw/arm/virt-acpi-build.c | 32 ++++---------------------------- > hw/virtio/meson.build | 1 + > hw/virtio/virtio-acpi.c | 32 ++++++++++++++++++++++++++++++++ > include/hw/virtio/virtio-acpi.h | 16 ++++++++++++++++ > 4 files changed, 53 insertions(+), 28 deletions(-) > create mode 100644 hw/virtio/virtio-acpi.c > create mode 100644 include/hw/virtio/virtio-acpi.h > > diff --git a/hw/arm/virt-acpi-build.c b/hw/arm/virt-acpi-build.c > index dd2e95f0ea..b73ddd0c38 100644 > --- a/hw/arm/virt-acpi-build.c > +++ b/hw/arm/virt-acpi-build.c > @@ -58,6 +58,7 @@ > #include "migration/vmstate.h" > #include "hw/acpi/ghes.h" > #include "hw/acpi/viot.h" > +#include "hw/virtio/virtio-acpi.h" > > #define ARM_SPI_BASE 32 > > @@ -118,32 +119,6 @@ static void acpi_dsdt_add_flash(Aml *scope, const MemMapEntry *flash_memmap) > aml_append(scope, dev); > } > > -static void acpi_dsdt_add_virtio(Aml *scope, > - const MemMapEntry *virtio_mmio_memmap, > - uint32_t mmio_irq, int num) > -{ > - hwaddr base = virtio_mmio_memmap->base; > - hwaddr size = virtio_mmio_memmap->size; > - int i; > - > - for (i = 0; i < num; i++) { > - uint32_t irq = mmio_irq + i; > - Aml *dev = aml_device("VR%02u", i); > - aml_append(dev, aml_name_decl("_HID", aml_string("LNRO0005"))); > - aml_append(dev, aml_name_decl("_UID", aml_int(i))); > - aml_append(dev, aml_name_decl("_CCA", aml_int(1))); > - > - Aml *crs = aml_resource_template(); > - aml_append(crs, aml_memory32_fixed(base, size, AML_READ_WRITE)); > - aml_append(crs, > - aml_interrupt(AML_CONSUMER, AML_LEVEL, AML_ACTIVE_HIGH, > - AML_EXCLUSIVE, &irq, 1)); > - aml_append(dev, aml_name_decl("_CRS", crs)); > - aml_append(scope, dev); > - base += size; > - } > -} > - > static void acpi_dsdt_add_pci(Aml *scope, const MemMapEntry *memmap, > uint32_t irq, VirtMachineState *vms) > { > @@ -850,8 +825,9 @@ build_dsdt(GArray *table_data, BIOSLinker *linker, VirtMachineState *vms) > acpi_dsdt_add_flash(scope, &memmap[VIRT_FLASH]); > } > fw_cfg_acpi_dsdt_add(scope, &memmap[VIRT_FW_CFG]); > - acpi_dsdt_add_virtio(scope, &memmap[VIRT_MMIO], > - (irqmap[VIRT_MMIO] + ARM_SPI_BASE), NUM_VIRTIO_TRANSPORTS); > + virtio_acpi_dsdt_add(scope, memmap[VIRT_MMIO].base, memmap[VIRT_MMIO].size, > + (irqmap[VIRT_MMIO] + ARM_SPI_BASE), > + 0, NUM_VIRTIO_TRANSPORTS); > acpi_dsdt_add_pci(scope, memmap, irqmap[VIRT_PCIE] + ARM_SPI_BASE, vms); > if (vms->acpi_dev) { > build_ged_aml(scope, "\\_SB."GED_DEVICE, > diff --git a/hw/virtio/meson.build b/hw/virtio/meson.build > index c0055a7832..9d62097a21 100644 > --- a/hw/virtio/meson.build > +++ b/hw/virtio/meson.build > @@ -79,3 +79,4 @@ system_ss.add(when: 'CONFIG_ALL', if_true: files('virtio-stub.c')) > system_ss.add(files('virtio-hmp-cmds.c')) > > specific_ss.add_all(when: 'CONFIG_VIRTIO', if_true: specific_virtio_ss) > +system_ss.add(when: 'CONFIG_ACPI', if_true: files('virtio-acpi.c')) > diff --git a/hw/virtio/virtio-acpi.c b/hw/virtio/virtio-acpi.c > new file mode 100644 > index 0000000000..682283800f > --- /dev/null > +++ b/hw/virtio/virtio-acpi.c > @@ -0,0 +1,32 @@ > +// SPDX-License-Identifier: GPL-2.0+ > +/* > + * virtio ACPI Support > + * > + */ > + > +#include "hw/virtio/virtio-acpi.h" > +#include "hw/acpi/aml-build.h" > + > +void virtio_acpi_dsdt_add(Aml *scope, const hwaddr base, const hwaddr size, > + uint32_t mmio_irq, long int start_index, int num) > +{ > + long int i; > + hwaddr virtio_base = base; > + > + for (i = start_index; i < start_index + num; i++) { > + uint32_t irq = mmio_irq + i; > + Aml *dev = aml_device("VR%02u", (unsigned)i); > + aml_append(dev, aml_name_decl("_HID", aml_string("LNRO0005"))); > + aml_append(dev, aml_name_decl("_UID", aml_int(i))); > + aml_append(dev, aml_name_decl("_CCA", aml_int(1))); > + > + Aml *crs = aml_resource_template(); > + aml_append(crs, aml_memory32_fixed(base, size, AML_READ_WRITE)); > + aml_append(crs, > + aml_interrupt(AML_CONSUMER, AML_LEVEL, AML_ACTIVE_HIGH, > + AML_EXCLUSIVE, &irq, 1)); > + aml_append(dev, aml_name_decl("_CRS", crs)); > + aml_append(scope, dev); > + virtio_base += size; > + } > +} > diff --git a/include/hw/virtio/virtio-acpi.h b/include/hw/virtio/virtio-acpi.h > new file mode 100644 > index 0000000000..844e102569 > --- /dev/null > +++ b/include/hw/virtio/virtio-acpi.h > @@ -0,0 +1,16 @@ > +/* SPDX-License-Identifier: GPL-2.0+ */ > +/* > + * ACPI support for virtio > + */ > + > +#ifndef VIRTIO_ACPI_H > +#define VIRTIO_ACPI_H > + > +#include "qemu/osdep.h" > +#include "exec/hwaddr.h" > + > +void virtio_acpi_dsdt_add(Aml *scope, const hwaddr virtio_mmio_base, > + const hwaddr virtio_mmio_size, uint32_t mmio_irq, > + long int start_index, int num); > + > +#endif
On Thu, Nov 02, 2023 at 09:10:05AM -0300, Daniel Henrique Barboza wrote: > Alistair, Sunil, > > This patch is breaking riscv-to-apply.next build when using 'clang' and > --enable-debug: > > URCE=600 -DNCURSES_WIDECHAR=1 -DSTRUCT_IOVEC_DEFINED -MD -MQ libcommon.fa.p/hw_virtio_virtio-acpi.c.o -MF libcommon.fa.p/hw_virtio_virtio-acpi.c.o.d -o libcommon.fa.p/hw_virtio_virtio-acpi.c.o -c ../hw/virtio/virtio-acpi.c > ../hw/virtio/virtio-acpi.c:14:12: error: variable 'virtio_base' set but not used [-Werror,-Wunused-but-set-variable] > hwaddr virtio_base = base; > ^ > 1 error generated. > > > Looking at the code: > > void virtio_acpi_dsdt_add(Aml *scope, const hwaddr base, const hwaddr size, > uint32_t mmio_irq, long int start_index, int num) > { > long int i; > hwaddr virtio_base = base; <------ > > for (i = start_index; i < start_index + num; i++) { > uint32_t irq = mmio_irq + i; > Aml *dev = aml_device("VR%02u", (unsigned)i); > aml_append(dev, aml_name_decl("_HID", aml_string("LNRO0005"))); > aml_append(dev, aml_name_decl("_UID", aml_int(i))); > aml_append(dev, aml_name_decl("_CCA", aml_int(1))); > > Aml *crs = aml_resource_template(); > aml_append(crs, aml_memory32_fixed(base, size, AML_READ_WRITE)); > aml_append(crs, > aml_interrupt(AML_CONSUMER, AML_LEVEL, AML_ACTIVE_HIGH, > AML_EXCLUSIVE, &irq, 1)); > aml_append(dev, aml_name_decl("_CRS", crs)); > aml_append(scope, dev); > virtio_base += size; <------ > } > } > > 'virtio_base' is initialized with 'base', and it is incremented in the loop, but > nothing else is done with it. > > > This solves it: > > > $ git diff > diff --git a/hw/virtio/virtio-acpi.c b/hw/virtio/virtio-acpi.c > index 682283800f..eaf6028e93 100644 > --- a/hw/virtio/virtio-acpi.c > +++ b/hw/virtio/virtio-acpi.c > @@ -11,7 +11,6 @@ void virtio_acpi_dsdt_add(Aml *scope, const hwaddr base, const hwaddr size, > uint32_t mmio_irq, long int start_index, int num) > { > long int i; > - hwaddr virtio_base = base; > for (i = start_index; i < start_index + num; i++) { > uint32_t irq = mmio_irq + i; > @@ -27,6 +26,5 @@ void virtio_acpi_dsdt_add(Aml *scope, const hwaddr base, const hwaddr size, > AML_EXCLUSIVE, &irq, 1)); > aml_append(dev, aml_name_decl("_CRS", crs)); > aml_append(scope, dev); > - virtio_base += size; Thanks Daniel for catching this. But proper fix would be to use virtio_base. Let me send next version with proper fix. Sorry about this. Thanks, Sunil
diff --git a/hw/arm/virt-acpi-build.c b/hw/arm/virt-acpi-build.c index dd2e95f0ea..b73ddd0c38 100644 --- a/hw/arm/virt-acpi-build.c +++ b/hw/arm/virt-acpi-build.c @@ -58,6 +58,7 @@ #include "migration/vmstate.h" #include "hw/acpi/ghes.h" #include "hw/acpi/viot.h" +#include "hw/virtio/virtio-acpi.h" #define ARM_SPI_BASE 32 @@ -118,32 +119,6 @@ static void acpi_dsdt_add_flash(Aml *scope, const MemMapEntry *flash_memmap) aml_append(scope, dev); } -static void acpi_dsdt_add_virtio(Aml *scope, - const MemMapEntry *virtio_mmio_memmap, - uint32_t mmio_irq, int num) -{ - hwaddr base = virtio_mmio_memmap->base; - hwaddr size = virtio_mmio_memmap->size; - int i; - - for (i = 0; i < num; i++) { - uint32_t irq = mmio_irq + i; - Aml *dev = aml_device("VR%02u", i); - aml_append(dev, aml_name_decl("_HID", aml_string("LNRO0005"))); - aml_append(dev, aml_name_decl("_UID", aml_int(i))); - aml_append(dev, aml_name_decl("_CCA", aml_int(1))); - - Aml *crs = aml_resource_template(); - aml_append(crs, aml_memory32_fixed(base, size, AML_READ_WRITE)); - aml_append(crs, - aml_interrupt(AML_CONSUMER, AML_LEVEL, AML_ACTIVE_HIGH, - AML_EXCLUSIVE, &irq, 1)); - aml_append(dev, aml_name_decl("_CRS", crs)); - aml_append(scope, dev); - base += size; - } -} - static void acpi_dsdt_add_pci(Aml *scope, const MemMapEntry *memmap, uint32_t irq, VirtMachineState *vms) { @@ -850,8 +825,9 @@ build_dsdt(GArray *table_data, BIOSLinker *linker, VirtMachineState *vms) acpi_dsdt_add_flash(scope, &memmap[VIRT_FLASH]); } fw_cfg_acpi_dsdt_add(scope, &memmap[VIRT_FW_CFG]); - acpi_dsdt_add_virtio(scope, &memmap[VIRT_MMIO], - (irqmap[VIRT_MMIO] + ARM_SPI_BASE), NUM_VIRTIO_TRANSPORTS); + virtio_acpi_dsdt_add(scope, memmap[VIRT_MMIO].base, memmap[VIRT_MMIO].size, + (irqmap[VIRT_MMIO] + ARM_SPI_BASE), + 0, NUM_VIRTIO_TRANSPORTS); acpi_dsdt_add_pci(scope, memmap, irqmap[VIRT_PCIE] + ARM_SPI_BASE, vms); if (vms->acpi_dev) { build_ged_aml(scope, "\\_SB."GED_DEVICE, diff --git a/hw/virtio/meson.build b/hw/virtio/meson.build index c0055a7832..9d62097a21 100644 --- a/hw/virtio/meson.build +++ b/hw/virtio/meson.build @@ -79,3 +79,4 @@ system_ss.add(when: 'CONFIG_ALL', if_true: files('virtio-stub.c')) system_ss.add(files('virtio-hmp-cmds.c')) specific_ss.add_all(when: 'CONFIG_VIRTIO', if_true: specific_virtio_ss) +system_ss.add(when: 'CONFIG_ACPI', if_true: files('virtio-acpi.c')) diff --git a/hw/virtio/virtio-acpi.c b/hw/virtio/virtio-acpi.c new file mode 100644 index 0000000000..682283800f --- /dev/null +++ b/hw/virtio/virtio-acpi.c @@ -0,0 +1,32 @@ +// SPDX-License-Identifier: GPL-2.0+ +/* + * virtio ACPI Support + * + */ + +#include "hw/virtio/virtio-acpi.h" +#include "hw/acpi/aml-build.h" + +void virtio_acpi_dsdt_add(Aml *scope, const hwaddr base, const hwaddr size, + uint32_t mmio_irq, long int start_index, int num) +{ + long int i; + hwaddr virtio_base = base; + + for (i = start_index; i < start_index + num; i++) { + uint32_t irq = mmio_irq + i; + Aml *dev = aml_device("VR%02u", (unsigned)i); + aml_append(dev, aml_name_decl("_HID", aml_string("LNRO0005"))); + aml_append(dev, aml_name_decl("_UID", aml_int(i))); + aml_append(dev, aml_name_decl("_CCA", aml_int(1))); + + Aml *crs = aml_resource_template(); + aml_append(crs, aml_memory32_fixed(base, size, AML_READ_WRITE)); + aml_append(crs, + aml_interrupt(AML_CONSUMER, AML_LEVEL, AML_ACTIVE_HIGH, + AML_EXCLUSIVE, &irq, 1)); + aml_append(dev, aml_name_decl("_CRS", crs)); + aml_append(scope, dev); + virtio_base += size; + } +} diff --git a/include/hw/virtio/virtio-acpi.h b/include/hw/virtio/virtio-acpi.h new file mode 100644 index 0000000000..844e102569 --- /dev/null +++ b/include/hw/virtio/virtio-acpi.h @@ -0,0 +1,16 @@ +/* SPDX-License-Identifier: GPL-2.0+ */ +/* + * ACPI support for virtio + */ + +#ifndef VIRTIO_ACPI_H +#define VIRTIO_ACPI_H + +#include "qemu/osdep.h" +#include "exec/hwaddr.h" + +void virtio_acpi_dsdt_add(Aml *scope, const hwaddr virtio_mmio_base, + const hwaddr virtio_mmio_size, uint32_t mmio_irq, + long int start_index, int num); + +#endif