* [PATCH v4 RESEND 0/2] hw/riscv/virt: Add acpi ged and powerdown support @ 2025-11-13 1:27 liu.xuemei1 2025-11-13 1:30 ` [PATCH v4 RESEND 1/2] " liu.xuemei1 2025-11-13 1:44 ` [PATCH v4 RESEND 2/2] tests/acpi: Add acpi ged and power button in DSDT for RISC-V liu.xuemei1 0 siblings, 2 replies; 6+ messages in thread From: liu.xuemei1 @ 2025-11-13 1:27 UTC (permalink / raw) To: imammedo, alistair.francis, dbarboza, sunilvl, anisinha Cc: pbonzini, palmer, liwei1518, zhiwei_liu, mst, qemu-devel, qemu-riscv, liu.xuemei1 From: Xuemei Liu <liu.xuemei1@zte.com.cn> Add riscv acpi powerdown support Changes in v4: - Added modifies of DSDT blob in another patch - Link to v3: https://lore.kernel.org/qemu-riscv/20250723113739751COZ5PkRzx6aXEuKzsHhm_@zte.com.cn/ Changes in v3: - Added missing param to virt_is_acpi_enabled - Fixed failure of bios-tables-test - Link to v2: https://lore.kernel.org/qemu-riscv/202506201130099861lTkD839Hh6oko8Jo2W2H@zte.com.cn/ Changes in v2: - Unwrappered acpi_dsdt_add_ged function - Modified base address of VIRT_ACPI_GED - Added conditions for function calls - Adjusted code formatting - Link to v1: https://lore.kernel.org/qemu-riscv/202506191556260735QxWC8sxRwFURYEvlD24y@zte.com.cn/ Xuemei Liu (2): hw/riscv/virt: Add acpi ged and powerdown support tests/acpi: Add acpi ged and power button in DSDT for RISC-V hw/riscv/Kconfig | 1 + hw/riscv/virt-acpi-build.c | 10 +++++++++ hw/riscv/virt.c | 35 ++++++++++++++++++++++++++++++ include/hw/riscv/virt.h | 4 ++++ tests/data/acpi/riscv64/virt/DSDT | Bin 3538 -> 3681 bytes 5 files changed, 50 insertions(+) -- 2.27.0 ^ permalink raw reply [flat|nested] 6+ messages in thread
* [PATCH v4 RESEND 1/2] hw/riscv/virt: Add acpi ged and powerdown support 2025-11-13 1:27 [PATCH v4 RESEND 0/2] hw/riscv/virt: Add acpi ged and powerdown support liu.xuemei1 @ 2025-11-13 1:30 ` liu.xuemei1 2025-11-17 10:01 ` Daniel Henrique Barboza 2025-12-10 13:54 ` Igor Mammedov 2025-11-13 1:44 ` [PATCH v4 RESEND 2/2] tests/acpi: Add acpi ged and power button in DSDT for RISC-V liu.xuemei1 1 sibling, 2 replies; 6+ messages in thread From: liu.xuemei1 @ 2025-11-13 1:30 UTC (permalink / raw) To: imammedo, alistair.francis, dbarboza, sunilvl, anisinha Cc: pbonzini, palmer, liwei1518, zhiwei_liu, mst, qemu-devel, qemu-riscv, liu.xuemei1 From: Xuemei Liu <liu.xuemei1@zte.com.cn> This adds powerdown support by implementing the ACPI GED. Co-authored-by: Björn Töpel <bjorn@rivosinc.com> Signed-off-by: Xuemei Liu <liu.xuemei1@zte.com.cn> --- hw/riscv/Kconfig | 1 + hw/riscv/virt-acpi-build.c | 10 ++++++ hw/riscv/virt.c | 35 +++++++++++++++++++++ include/hw/riscv/virt.h | 4 +++ tests/qtest/bios-tables-test-allowed-diff.h | 1 + 5 files changed, 51 insertions(+) diff --git a/hw/riscv/Kconfig b/hw/riscv/Kconfig index fc9c35bd98..f89a6e3672 100644 --- a/hw/riscv/Kconfig +++ b/hw/riscv/Kconfig @@ -68,6 +68,7 @@ config RISCV_VIRT select PLATFORM_BUS select ACPI select ACPI_PCI + select ACPI_HW_REDUCED config SHAKTI_C bool diff --git a/hw/riscv/virt-acpi-build.c b/hw/riscv/virt-acpi-build.c index f1406cb683..64fd8aa426 100644 --- a/hw/riscv/virt-acpi-build.c +++ b/hw/riscv/virt-acpi-build.c @@ -27,6 +27,7 @@ #include "hw/acpi/acpi-defs.h" #include "hw/acpi/acpi.h" #include "hw/acpi/aml-build.h" +#include "hw/acpi/generic_event_device.h" #include "hw/acpi/pci.h" #include "hw/acpi/utils.h" #include "hw/intc/riscv_aclint.h" @@ -498,6 +499,15 @@ static void build_dsdt(GArray *table_data, acpi_dsdt_add_gpex_host(scope, PCIE_IRQ + VIRT_IRQCHIP_NUM_SOURCES * 2); } + if (s->acpi_ged) { + build_ged_aml(scope, "\\_SB."GED_DEVICE, + HOTPLUG_HANDLER(s->acpi_ged), + ACPI_GED_IRQ, AML_SYSTEM_MEMORY, + s->memmap[VIRT_ACPI_GED].base); + } + + acpi_dsdt_add_power_button(scope); + aml_append(dsdt, scope); /* copy AML table into ACPI tables blob and patch header there */ diff --git a/hw/riscv/virt.c b/hw/riscv/virt.c index 17909206c7..a853184105 100644 --- a/hw/riscv/virt.c +++ b/hw/riscv/virt.c @@ -51,10 +51,12 @@ #include "system/kvm.h" #include "system/tpm.h" #include "system/qtest.h" +#include "system/runstate.h" #include "hw/pci/pci.h" #include "hw/pci-host/gpex.h" #include "hw/display/ramfb.h" #include "hw/acpi/aml-build.h" +#include "hw/acpi/generic_event_device.h" #include "qapi/qapi-visit-common.h" #include "hw/virtio/virtio-iommu.h" #include "hw/uefi/var-service-api.h" @@ -95,6 +97,7 @@ static const MemMapEntry virt_memmap[] = { [VIRT_UART0] = { 0x10000000, 0x100 }, [VIRT_VIRTIO] = { 0x10001000, 0x1000 }, [VIRT_FW_CFG] = { 0x10100000, 0x18 }, + [VIRT_ACPI_GED] = { 0x10101000, ACPI_GED_EVT_SEL_LEN }, [VIRT_FLASH] = { 0x20000000, 0x4000000 }, [VIRT_IMSIC_M] = { 0x24000000, VIRT_IMSIC_MAX_SIZE }, [VIRT_IMSIC_S] = { 0x28000000, VIRT_IMSIC_MAX_SIZE }, @@ -1270,6 +1273,22 @@ static inline DeviceState *gpex_pcie_init(MemoryRegion *sys_mem, return dev; } +static DeviceState *create_acpi_ged(RISCVVirtState *s, DeviceState *irqchip) +{ + DeviceState *dev; + uint32_t event = ACPI_GED_PWR_DOWN_EVT; + + dev = qdev_new(TYPE_ACPI_GED); + qdev_prop_set_uint32(dev, "ged-event", event); + sysbus_realize_and_unref(SYS_BUS_DEVICE(dev), &error_fatal); + + sysbus_mmio_map(SYS_BUS_DEVICE(dev), 0, s->memmap[VIRT_ACPI_GED].base); + sysbus_connect_irq(SYS_BUS_DEVICE(dev), 0, + qdev_get_gpio_in(irqchip, ACPI_GED_IRQ)); + + return dev; +} + static FWCfgState *create_fw_cfg(const MachineState *ms, hwaddr base) { FWCfgState *fw_cfg; @@ -1428,6 +1447,14 @@ static void virt_build_smbios(RISCVVirtState *s) } } +static void virt_powerdown_req(Notifier *notifier, void *opaque) +{ + RISCVVirtState *s; + + s = container_of(notifier, RISCVVirtState, powerdown_notifier); + acpi_send_event(s->acpi_ged, ACPI_POWER_DOWN_STATUS); +} + static void virt_machine_done(Notifier *notifier, void *data) { RISCVVirtState *s = container_of(notifier, RISCVVirtState, @@ -1701,6 +1728,11 @@ static void virt_machine_init(MachineState *machine) create_platform_bus(s, mmio_irqchip); + /* acpi ged */ + if (virt_is_acpi_enabled(s)) { + s->acpi_ged = create_acpi_ged(s, mmio_irqchip); + } + serial_mm_init(system_memory, s->memmap[VIRT_UART0].base, 0, qdev_get_gpio_in(mmio_irqchip, UART0_IRQ), 399193, serial_hd(0), DEVICE_LITTLE_ENDIAN); @@ -1742,6 +1774,9 @@ static void virt_machine_init(MachineState *machine) sysbus_realize_and_unref(SYS_BUS_DEVICE(iommu_sys), &error_fatal); } + s->powerdown_notifier.notify = virt_powerdown_req; + qemu_register_powerdown_notifier(&s->powerdown_notifier); + s->machine_done.notify = virt_machine_done; qemu_add_machine_init_done_notifier(&s->machine_done); } diff --git a/include/hw/riscv/virt.h b/include/hw/riscv/virt.h index 7b4c2c8b7d..9422b45d0c 100644 --- a/include/hw/riscv/virt.h +++ b/include/hw/riscv/virt.h @@ -47,6 +47,8 @@ struct RISCVVirtState { /*< public >*/ Notifier machine_done; + Notifier powerdown_notifier; + DeviceState *acpi_ged; DeviceState *platform_bus_dev; RISCVHartArrayState soc[VIRT_SOCKETS_MAX]; DeviceState *irqchip[VIRT_SOCKETS_MAX]; @@ -88,9 +90,11 @@ enum { VIRT_PLATFORM_BUS, VIRT_PCIE_ECAM, VIRT_IOMMU_SYS, + VIRT_ACPI_GED, }; enum { + ACPI_GED_IRQ = 9, UART0_IRQ = 10, RTC_IRQ = 11, VIRTIO_IRQ = 1, /* 1 to 8 */ diff --git a/tests/qtest/bios-tables-test-allowed-diff.h b/tests/qtest/bios-tables-test-allowed-diff.h index dfb8523c8b..8e85fcdee9 100644 --- a/tests/qtest/bios-tables-test-allowed-diff.h +++ b/tests/qtest/bios-tables-test-allowed-diff.h @@ -1 +1,2 @@ /* List of comma-separated changed AML files to ignore */ +"tests/data/acpi/riscv64/virt/DSDT", -- 2.27.0 ^ permalink raw reply related [flat|nested] 6+ messages in thread
* Re: [PATCH v4 RESEND 1/2] hw/riscv/virt: Add acpi ged and powerdown support 2025-11-13 1:30 ` [PATCH v4 RESEND 1/2] " liu.xuemei1 @ 2025-11-17 10:01 ` Daniel Henrique Barboza 2025-12-10 13:54 ` Igor Mammedov 1 sibling, 0 replies; 6+ messages in thread From: Daniel Henrique Barboza @ 2025-11-17 10:01 UTC (permalink / raw) To: liu.xuemei1, imammedo, alistair.francis, sunilvl, anisinha Cc: pbonzini, palmer, liwei1518, zhiwei_liu, mst, qemu-devel, qemu-riscv On 11/12/25 10:30 PM, liu.xuemei1@zte.com.cn wrote: > From: Xuemei Liu <liu.xuemei1@zte.com.cn> > > This adds powerdown support by implementing the ACPI GED. > > Co-authored-by: Björn Töpel <bjorn@rivosinc.com> > Signed-off-by: Xuemei Liu <liu.xuemei1@zte.com.cn> > --- Reviewed-by: Daniel Henrique Barboza <dbarboza@ventanamicro.com> > hw/riscv/Kconfig | 1 + > hw/riscv/virt-acpi-build.c | 10 ++++++ > hw/riscv/virt.c | 35 +++++++++++++++++++++ > include/hw/riscv/virt.h | 4 +++ > tests/qtest/bios-tables-test-allowed-diff.h | 1 + > 5 files changed, 51 insertions(+) > > diff --git a/hw/riscv/Kconfig b/hw/riscv/Kconfig > index fc9c35bd98..f89a6e3672 100644 > --- a/hw/riscv/Kconfig > +++ b/hw/riscv/Kconfig > @@ -68,6 +68,7 @@ config RISCV_VIRT > select PLATFORM_BUS > select ACPI > select ACPI_PCI > + select ACPI_HW_REDUCED > > config SHAKTI_C > bool > diff --git a/hw/riscv/virt-acpi-build.c b/hw/riscv/virt-acpi-build.c > index f1406cb683..64fd8aa426 100644 > --- a/hw/riscv/virt-acpi-build.c > +++ b/hw/riscv/virt-acpi-build.c > @@ -27,6 +27,7 @@ > #include "hw/acpi/acpi-defs.h" > #include "hw/acpi/acpi.h" > #include "hw/acpi/aml-build.h" > +#include "hw/acpi/generic_event_device.h" > #include "hw/acpi/pci.h" > #include "hw/acpi/utils.h" > #include "hw/intc/riscv_aclint.h" > @@ -498,6 +499,15 @@ static void build_dsdt(GArray *table_data, > acpi_dsdt_add_gpex_host(scope, PCIE_IRQ + VIRT_IRQCHIP_NUM_SOURCES * 2); > } > > + if (s->acpi_ged) { > + build_ged_aml(scope, "\\_SB."GED_DEVICE, > + HOTPLUG_HANDLER(s->acpi_ged), > + ACPI_GED_IRQ, AML_SYSTEM_MEMORY, > + s->memmap[VIRT_ACPI_GED].base); > + } > + > + acpi_dsdt_add_power_button(scope); > + > aml_append(dsdt, scope); > > /* copy AML table into ACPI tables blob and patch header there */ > diff --git a/hw/riscv/virt.c b/hw/riscv/virt.c > index 17909206c7..a853184105 100644 > --- a/hw/riscv/virt.c > +++ b/hw/riscv/virt.c > @@ -51,10 +51,12 @@ > #include "system/kvm.h" > #include "system/tpm.h" > #include "system/qtest.h" > +#include "system/runstate.h" > #include "hw/pci/pci.h" > #include "hw/pci-host/gpex.h" > #include "hw/display/ramfb.h" > #include "hw/acpi/aml-build.h" > +#include "hw/acpi/generic_event_device.h" > #include "qapi/qapi-visit-common.h" > #include "hw/virtio/virtio-iommu.h" > #include "hw/uefi/var-service-api.h" > @@ -95,6 +97,7 @@ static const MemMapEntry virt_memmap[] = { > [VIRT_UART0] = { 0x10000000, 0x100 }, > [VIRT_VIRTIO] = { 0x10001000, 0x1000 }, > [VIRT_FW_CFG] = { 0x10100000, 0x18 }, > + [VIRT_ACPI_GED] = { 0x10101000, ACPI_GED_EVT_SEL_LEN }, > [VIRT_FLASH] = { 0x20000000, 0x4000000 }, > [VIRT_IMSIC_M] = { 0x24000000, VIRT_IMSIC_MAX_SIZE }, > [VIRT_IMSIC_S] = { 0x28000000, VIRT_IMSIC_MAX_SIZE }, > @@ -1270,6 +1273,22 @@ static inline DeviceState *gpex_pcie_init(MemoryRegion *sys_mem, > return dev; > } > > +static DeviceState *create_acpi_ged(RISCVVirtState *s, DeviceState *irqchip) > +{ > + DeviceState *dev; > + uint32_t event = ACPI_GED_PWR_DOWN_EVT; > + > + dev = qdev_new(TYPE_ACPI_GED); > + qdev_prop_set_uint32(dev, "ged-event", event); > + sysbus_realize_and_unref(SYS_BUS_DEVICE(dev), &error_fatal); > + > + sysbus_mmio_map(SYS_BUS_DEVICE(dev), 0, s->memmap[VIRT_ACPI_GED].base); > + sysbus_connect_irq(SYS_BUS_DEVICE(dev), 0, > + qdev_get_gpio_in(irqchip, ACPI_GED_IRQ)); > + > + return dev; > +} > + > static FWCfgState *create_fw_cfg(const MachineState *ms, hwaddr base) > { > FWCfgState *fw_cfg; > @@ -1428,6 +1447,14 @@ static void virt_build_smbios(RISCVVirtState *s) > } > } > > +static void virt_powerdown_req(Notifier *notifier, void *opaque) > +{ > + RISCVVirtState *s; > + > + s = container_of(notifier, RISCVVirtState, powerdown_notifier); > + acpi_send_event(s->acpi_ged, ACPI_POWER_DOWN_STATUS); > +} > + > static void virt_machine_done(Notifier *notifier, void *data) > { > RISCVVirtState *s = container_of(notifier, RISCVVirtState, > @@ -1701,6 +1728,11 @@ static void virt_machine_init(MachineState *machine) > > create_platform_bus(s, mmio_irqchip); > > + /* acpi ged */ > + if (virt_is_acpi_enabled(s)) { > + s->acpi_ged = create_acpi_ged(s, mmio_irqchip); > + } > + > serial_mm_init(system_memory, s->memmap[VIRT_UART0].base, > 0, qdev_get_gpio_in(mmio_irqchip, UART0_IRQ), 399193, > serial_hd(0), DEVICE_LITTLE_ENDIAN); > @@ -1742,6 +1774,9 @@ static void virt_machine_init(MachineState *machine) > sysbus_realize_and_unref(SYS_BUS_DEVICE(iommu_sys), &error_fatal); > } > > + s->powerdown_notifier.notify = virt_powerdown_req; > + qemu_register_powerdown_notifier(&s->powerdown_notifier); > + > s->machine_done.notify = virt_machine_done; > qemu_add_machine_init_done_notifier(&s->machine_done); > } > diff --git a/include/hw/riscv/virt.h b/include/hw/riscv/virt.h > index 7b4c2c8b7d..9422b45d0c 100644 > --- a/include/hw/riscv/virt.h > +++ b/include/hw/riscv/virt.h > @@ -47,6 +47,8 @@ struct RISCVVirtState { > > /*< public >*/ > Notifier machine_done; > + Notifier powerdown_notifier; > + DeviceState *acpi_ged; > DeviceState *platform_bus_dev; > RISCVHartArrayState soc[VIRT_SOCKETS_MAX]; > DeviceState *irqchip[VIRT_SOCKETS_MAX]; > @@ -88,9 +90,11 @@ enum { > VIRT_PLATFORM_BUS, > VIRT_PCIE_ECAM, > VIRT_IOMMU_SYS, > + VIRT_ACPI_GED, > }; > > enum { > + ACPI_GED_IRQ = 9, > UART0_IRQ = 10, > RTC_IRQ = 11, > VIRTIO_IRQ = 1, /* 1 to 8 */ > diff --git a/tests/qtest/bios-tables-test-allowed-diff.h b/tests/qtest/bios-tables-test-allowed-diff.h > index dfb8523c8b..8e85fcdee9 100644 > --- a/tests/qtest/bios-tables-test-allowed-diff.h > +++ b/tests/qtest/bios-tables-test-allowed-diff.h > @@ -1 +1,2 @@ > /* List of comma-separated changed AML files to ignore */ > +"tests/data/acpi/riscv64/virt/DSDT", ^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [PATCH v4 RESEND 1/2] hw/riscv/virt: Add acpi ged and powerdown support 2025-11-13 1:30 ` [PATCH v4 RESEND 1/2] " liu.xuemei1 2025-11-17 10:01 ` Daniel Henrique Barboza @ 2025-12-10 13:54 ` Igor Mammedov 1 sibling, 0 replies; 6+ messages in thread From: Igor Mammedov @ 2025-12-10 13:54 UTC (permalink / raw) To: liu.xuemei1 Cc: alistair.francis, dbarboza, sunilvl, anisinha, pbonzini, palmer, liwei1518, zhiwei_liu, mst, qemu-devel, qemu-riscv On Thu, 13 Nov 2025 09:30:22 +0800 (CST) <liu.xuemei1@zte.com.cn> wrote: > From: Xuemei Liu <liu.xuemei1@zte.com.cn> > > This adds powerdown support by implementing the ACPI GED. > > Co-authored-by: Björn Töpel <bjorn@rivosinc.com> > Signed-off-by: Xuemei Liu <liu.xuemei1@zte.com.cn> > --- > hw/riscv/Kconfig | 1 + > hw/riscv/virt-acpi-build.c | 10 ++++++ > hw/riscv/virt.c | 35 +++++++++++++++++++++ > include/hw/riscv/virt.h | 4 +++ > tests/qtest/bios-tables-test-allowed-diff.h | 1 + > 5 files changed, 51 insertions(+) > > diff --git a/hw/riscv/Kconfig b/hw/riscv/Kconfig > index fc9c35bd98..f89a6e3672 100644 > --- a/hw/riscv/Kconfig > +++ b/hw/riscv/Kconfig > @@ -68,6 +68,7 @@ config RISCV_VIRT > select PLATFORM_BUS > select ACPI > select ACPI_PCI > + select ACPI_HW_REDUCED > > config SHAKTI_C > bool > diff --git a/hw/riscv/virt-acpi-build.c b/hw/riscv/virt-acpi-build.c > index f1406cb683..64fd8aa426 100644 > --- a/hw/riscv/virt-acpi-build.c > +++ b/hw/riscv/virt-acpi-build.c > @@ -27,6 +27,7 @@ > #include "hw/acpi/acpi-defs.h" > #include "hw/acpi/acpi.h" > #include "hw/acpi/aml-build.h" > +#include "hw/acpi/generic_event_device.h" > #include "hw/acpi/pci.h" > #include "hw/acpi/utils.h" > #include "hw/intc/riscv_aclint.h" > @@ -498,6 +499,15 @@ static void build_dsdt(GArray *table_data, > acpi_dsdt_add_gpex_host(scope, PCIE_IRQ + VIRT_IRQCHIP_NUM_SOURCES * 2); > } > > + if (s->acpi_ged) { > + build_ged_aml(scope, "\\_SB."GED_DEVICE, > + HOTPLUG_HANDLER(s->acpi_ged), > + ACPI_GED_IRQ, AML_SYSTEM_MEMORY, > + s->memmap[VIRT_ACPI_GED].base); > + } > + > + acpi_dsdt_add_power_button(scope); I suggest splitting patch on adding GED 1st and only then adding power button on top of it > + > aml_append(dsdt, scope); > > /* copy AML table into ACPI tables blob and patch header there */ > diff --git a/hw/riscv/virt.c b/hw/riscv/virt.c > index 17909206c7..a853184105 100644 > --- a/hw/riscv/virt.c > +++ b/hw/riscv/virt.c > @@ -51,10 +51,12 @@ > #include "system/kvm.h" > #include "system/tpm.h" > #include "system/qtest.h" > +#include "system/runstate.h" > #include "hw/pci/pci.h" > #include "hw/pci-host/gpex.h" > #include "hw/display/ramfb.h" > #include "hw/acpi/aml-build.h" > +#include "hw/acpi/generic_event_device.h" > #include "qapi/qapi-visit-common.h" > #include "hw/virtio/virtio-iommu.h" > #include "hw/uefi/var-service-api.h" > @@ -95,6 +97,7 @@ static const MemMapEntry virt_memmap[] = { > [VIRT_UART0] = { 0x10000000, 0x100 }, > [VIRT_VIRTIO] = { 0x10001000, 0x1000 }, > [VIRT_FW_CFG] = { 0x10100000, 0x18 }, > + [VIRT_ACPI_GED] = { 0x10101000, ACPI_GED_EVT_SEL_LEN }, > [VIRT_FLASH] = { 0x20000000, 0x4000000 }, > [VIRT_IMSIC_M] = { 0x24000000, VIRT_IMSIC_MAX_SIZE }, > [VIRT_IMSIC_S] = { 0x28000000, VIRT_IMSIC_MAX_SIZE }, > @@ -1270,6 +1273,22 @@ static inline DeviceState *gpex_pcie_init(MemoryRegion *sys_mem, > return dev; > } > > +static DeviceState *create_acpi_ged(RISCVVirtState *s, DeviceState *irqchip) > +{ > + DeviceState *dev; > + uint32_t event = ACPI_GED_PWR_DOWN_EVT; > + > + dev = qdev_new(TYPE_ACPI_GED); > + qdev_prop_set_uint32(dev, "ged-event", event); > + sysbus_realize_and_unref(SYS_BUS_DEVICE(dev), &error_fatal); > + > + sysbus_mmio_map(SYS_BUS_DEVICE(dev), 0, s->memmap[VIRT_ACPI_GED].base); > + sysbus_connect_irq(SYS_BUS_DEVICE(dev), 0, > + qdev_get_gpio_in(irqchip, ACPI_GED_IRQ)); > + > + return dev; > +} > + > static FWCfgState *create_fw_cfg(const MachineState *ms, hwaddr base) > { > FWCfgState *fw_cfg; > @@ -1428,6 +1447,14 @@ static void virt_build_smbios(RISCVVirtState *s) > } > } > > +static void virt_powerdown_req(Notifier *notifier, void *opaque) > +{ > + RISCVVirtState *s; > + > + s = container_of(notifier, RISCVVirtState, powerdown_notifier); > + acpi_send_event(s->acpi_ged, ACPI_POWER_DOWN_STATUS); Can acpi_ged be NULL at this point? /in the next hunk I see it being a conditional/ > +} > + > static void virt_machine_done(Notifier *notifier, void *data) > { > RISCVVirtState *s = container_of(notifier, RISCVVirtState, > @@ -1701,6 +1728,11 @@ static void virt_machine_init(MachineState *machine) > > create_platform_bus(s, mmio_irqchip); > > + /* acpi ged */ > + if (virt_is_acpi_enabled(s)) { > + s->acpi_ged = create_acpi_ged(s, mmio_irqchip); > + } > + > serial_mm_init(system_memory, s->memmap[VIRT_UART0].base, > 0, qdev_get_gpio_in(mmio_irqchip, UART0_IRQ), 399193, > serial_hd(0), DEVICE_LITTLE_ENDIAN); > @@ -1742,6 +1774,9 @@ static void virt_machine_init(MachineState *machine) > sysbus_realize_and_unref(SYS_BUS_DEVICE(iommu_sys), &error_fatal); > } > > + s->powerdown_notifier.notify = virt_powerdown_req; > + qemu_register_powerdown_notifier(&s->powerdown_notifier); > + > s->machine_done.notify = virt_machine_done; > qemu_add_machine_init_done_notifier(&s->machine_done); > } > diff --git a/include/hw/riscv/virt.h b/include/hw/riscv/virt.h > index 7b4c2c8b7d..9422b45d0c 100644 > --- a/include/hw/riscv/virt.h > +++ b/include/hw/riscv/virt.h > @@ -47,6 +47,8 @@ struct RISCVVirtState { > > /*< public >*/ > Notifier machine_done; > + Notifier powerdown_notifier; > + DeviceState *acpi_ged; > DeviceState *platform_bus_dev; > RISCVHartArrayState soc[VIRT_SOCKETS_MAX]; > DeviceState *irqchip[VIRT_SOCKETS_MAX]; > @@ -88,9 +90,11 @@ enum { > VIRT_PLATFORM_BUS, > VIRT_PCIE_ECAM, > VIRT_IOMMU_SYS, > + VIRT_ACPI_GED, > }; > > enum { > + ACPI_GED_IRQ = 9, > UART0_IRQ = 10, > RTC_IRQ = 11, > VIRTIO_IRQ = 1, /* 1 to 8 */ > diff --git a/tests/qtest/bios-tables-test-allowed-diff.h b/tests/qtest/bios-tables-test-allowed-diff.h > index dfb8523c8b..8e85fcdee9 100644 > --- a/tests/qtest/bios-tables-test-allowed-diff.h > +++ b/tests/qtest/bios-tables-test-allowed-diff.h > @@ -1 +1,2 @@ > /* List of comma-separated changed AML files to ignore */ > +"tests/data/acpi/riscv64/virt/DSDT", I'd split it out in a separate whitelist patch like we usually do elsewhere. ^ permalink raw reply [flat|nested] 6+ messages in thread
* [PATCH v4 RESEND 2/2] tests/acpi: Add acpi ged and power button in DSDT for RISC-V 2025-11-13 1:27 [PATCH v4 RESEND 0/2] hw/riscv/virt: Add acpi ged and powerdown support liu.xuemei1 2025-11-13 1:30 ` [PATCH v4 RESEND 1/2] " liu.xuemei1 @ 2025-11-13 1:44 ` liu.xuemei1 2025-11-17 12:54 ` Daniel Henrique Barboza 1 sibling, 1 reply; 6+ messages in thread From: liu.xuemei1 @ 2025-11-13 1:44 UTC (permalink / raw) To: imammedo, alistair.francis, dbarboza, sunilvl, anisinha Cc: pbonzini, palmer, liwei1518, zhiwei_liu, mst, qemu-devel, qemu-riscv, liu.xuemei1 From: Xuemei Liu <liu.xuemei1@zte.com.cn> Update the reference DSDT blob to include acpi ged and power button for RISC-V. DSDT diff: }) } } + + Device (\_SB.GED) + { + Name (_HID, "ACPI0013" /* Generic Event Device */) // _HID: Hardware ID + Name (_UID, "GED") // _UID: Unique ID + Name (_CRS, ResourceTemplate () // _CRS: Current Resource Settings + { + Interrupt (ResourceConsumer, Edge, ActiveHigh, Exclusive, ,, ) + { + 0x00000009, + } + }) + OperationRegion (EREG, SystemMemory, 0x10101000, 0x04) + Field (EREG, DWordAcc, NoLock, WriteAsZeros) + { + ESEL, 32 + } + + Method (_EVT, 1, Serialized) // _EVT: Event + { + Local0 = ESEL /* \_SB_.GED_.ESEL */ + If (((Local0 & 0x02) == 0x02)) + { + Notify (PWRB, 0x80) // Status Change + } + } + } + + Device (PWRB) + { + Name (_HID, "PNP0C0C" /* Power Button Device */) // _HID: Hardware ID + Name (_UID, Zero) // _UID: Unique ID + } } } Signed-off-by: Xuemei Liu <liu.xuemei1@zte.com.cn> --- tests/data/acpi/riscv64/virt/DSDT | Bin 3538 -> 3681 bytes tests/qtest/bios-tables-test-allowed-diff.h | 1 - 2 files changed, 1 deletion(-) diff --git a/tests/data/acpi/riscv64/virt/DSDT b/tests/data/acpi/riscv64/virt/DSDT index 968e1a15c87bb5753b3a84ddb357e26312767220..90de02e889f0057cbaeadb932ae135e2ca8943c9 100644 GIT binary patch delta 170 zcmca4{ZNL>CD<h-k&l6a>CZ$iX(pe?8`W3y)<-uvvB&7e2Rp^PySl`4#Cv$U@H#pN zcp4ZO8Z&UjhXT1k2_VZkC|Hn>i@TGJftit$fq|itA-cge$km;Jhe1F<fQu!%ksHKy zb`5s*Q4o=hcMS{SEC6v576?qPPT*o<;9_bE2oG}NYKU%<1TjFC3ApeE_yrg^8#qHO GV*mhK>?tS! delta 25 hcmaDTb4i-ZCD<k85-$S-lj=k+X(r!W8`W3y0sv*P2bll> diff --git a/tests/qtest/bios-tables-test-allowed-diff.h b/tests/qtest/bios-tables-test-allowed-diff.h index 8e85fcdee9..dfb8523c8b 100644 --- a/tests/qtest/bios-tables-test-allowed-diff.h +++ b/tests/qtest/bios-tables-test-allowed-diff.h @@ -1,2 +1 @@ /* List of comma-separated changed AML files to ignore */ -"tests/data/acpi/riscv64/virt/DSDT", -- 2.27.0 ^ permalink raw reply related [flat|nested] 6+ messages in thread
* Re: [PATCH v4 RESEND 2/2] tests/acpi: Add acpi ged and power button in DSDT for RISC-V 2025-11-13 1:44 ` [PATCH v4 RESEND 2/2] tests/acpi: Add acpi ged and power button in DSDT for RISC-V liu.xuemei1 @ 2025-11-17 12:54 ` Daniel Henrique Barboza 0 siblings, 0 replies; 6+ messages in thread From: Daniel Henrique Barboza @ 2025-11-17 12:54 UTC (permalink / raw) To: liu.xuemei1, imammedo, alistair.francis, sunilvl, anisinha Cc: pbonzini, palmer, liwei1518, zhiwei_liu, mst, qemu-devel, qemu-riscv On 11/12/25 10:44 PM, liu.xuemei1@zte.com.cn wrote: > From: Xuemei Liu <liu.xuemei1@zte.com.cn> > > Update the reference DSDT blob to include acpi ged and power button > for RISC-V. > > DSDT diff: > }) > } > } > + > + Device (\_SB.GED) > + { > + Name (_HID, "ACPI0013" /* Generic Event Device */) // _HID: Hardware ID > + Name (_UID, "GED") // _UID: Unique ID > + Name (_CRS, ResourceTemplate () // _CRS: Current Resource Settings > + { > + Interrupt (ResourceConsumer, Edge, ActiveHigh, Exclusive, ,, ) > + { > + 0x00000009, > + } > + }) > + OperationRegion (EREG, SystemMemory, 0x10101000, 0x04) > + Field (EREG, DWordAcc, NoLock, WriteAsZeros) > + { > + ESEL, 32 > + } > + > + Method (_EVT, 1, Serialized) // _EVT: Event > + { > + Local0 = ESEL /* \_SB_.GED_.ESEL */ > + If (((Local0 & 0x02) == 0x02)) > + { > + Notify (PWRB, 0x80) // Status Change > + } > + } > + } > + > + Device (PWRB) > + { > + Name (_HID, "PNP0C0C" /* Power Button Device */) // _HID: Hardware ID > + Name (_UID, Zero) // _UID: Unique ID > + } > } > } > > Signed-off-by: Xuemei Liu <liu.xuemei1@zte.com.cn> > --- Reviewed-by: Daniel Henrique Barboza <dbarboza@ventanamicro.com> > tests/data/acpi/riscv64/virt/DSDT | Bin 3538 -> 3681 bytes > tests/qtest/bios-tables-test-allowed-diff.h | 1 - > 2 files changed, 1 deletion(-) > > diff --git a/tests/data/acpi/riscv64/virt/DSDT b/tests/data/acpi/riscv64/virt/DSDT > index 968e1a15c87bb5753b3a84ddb357e26312767220..90de02e889f0057cbaeadb932ae135e2ca8943c9 100644 > GIT binary patch > delta 170 > zcmca4{ZNL>CD<h-k&l6a>CZ$iX(pe?8`W3y)<-uvvB&7e2Rp^PySl`4#Cv$U@H#pN > zcp4ZO8Z&UjhXT1k2_VZkC|Hn>i@TGJftit$fq|itA-cge$km;Jhe1F<fQu!%ksHKy > zb`5s*Q4o=hcMS{SEC6v576?qPPT*o<;9_bE2oG}NYKU%<1TjFC3ApeE_yrg^8#qHO > GV*mhK>?tS! > > delta 25 > hcmaDTb4i-ZCD<k85-$S-lj=k+X(r!W8`W3y0sv*P2bll> > > diff --git a/tests/qtest/bios-tables-test-allowed-diff.h b/tests/qtest/bios-tables-test-allowed-diff.h > index 8e85fcdee9..dfb8523c8b 100644 > --- a/tests/qtest/bios-tables-test-allowed-diff.h > +++ b/tests/qtest/bios-tables-test-allowed-diff.h > @@ -1,2 +1 @@ > /* List of comma-separated changed AML files to ignore */ > -"tests/data/acpi/riscv64/virt/DSDT", ^ permalink raw reply [flat|nested] 6+ messages in thread
end of thread, other threads:[~2025-12-10 13:55 UTC | newest] Thread overview: 6+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2025-11-13 1:27 [PATCH v4 RESEND 0/2] hw/riscv/virt: Add acpi ged and powerdown support liu.xuemei1 2025-11-13 1:30 ` [PATCH v4 RESEND 1/2] " liu.xuemei1 2025-11-17 10:01 ` Daniel Henrique Barboza 2025-12-10 13:54 ` Igor Mammedov 2025-11-13 1:44 ` [PATCH v4 RESEND 2/2] tests/acpi: Add acpi ged and power button in DSDT for RISC-V liu.xuemei1 2025-11-17 12:54 ` Daniel Henrique Barboza
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for NNTP newsgroup(s).