From: Igor Mammedov <imammedo@redhat.com>
To: <liu.xuemei1@zte.com.cn>
Cc: <alistair.francis@wdc.com>, <dbarboza@ventanamicro.com>,
<sunilvl@ventanamicro.com>, <anisinha@redhat.com>,
<pbonzini@redhat.com>, <palmer@dabbelt.com>,
<liwei1518@gmail.com>, <zhiwei_liu@linux.alibaba.com>,
<mst@redhat.com>, <qemu-devel@nongnu.org>,
<qemu-riscv@nongnu.org>
Subject: Re: [PATCH v5 2/4] hw/riscv/virt: Add acpi ged support
Date: Fri, 6 Feb 2026 15:22:58 +0100 [thread overview]
Message-ID: <20260206152258.4ed0b84e@imammedo> (raw)
In-Reply-To: <20260204182349717JK25oWZ6r2DzYQ6XTSj1D@zte.com.cn>
On Wed, 4 Feb 2026 18:23:49 +0800 (CST)
<liu.xuemei1@zte.com.cn> wrote:
> From: Xuemei Liu <liu.xuemei1@zte.com.cn>
>
> This patch adds ACPI Generic Event Device (GED) support to
> the RISC-V virt machine.
>
> 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 | 8 ++++++++
> hw/riscv/virt.c | 23 +++++++++++++++++++++++
> include/hw/riscv/virt.h | 3 +++
> 4 files changed, 35 insertions(+)
>
> diff --git a/hw/riscv/Kconfig b/hw/riscv/Kconfig
> index 0222c93f87..3dad43669f 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..07d1024316 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,13 @@ static void build_dsdt(GArray *table_data,
> acpi_dsdt_add_gpex_host(scope, PCIE_IRQ + VIRT_IRQCHIP_NUM_SOURCES * 2);
> }
>
> + if (s->acpi_ged) {
is this check necessary?
You probably won't get here at all if acpi is not enabled
and in hunk below you always create GED if acpi is enabled
other than that LGTM
> + build_ged_aml(scope, "\\_SB."GED_DEVICE,
> + HOTPLUG_HANDLER(s->acpi_ged),
> + ACPI_GED_IRQ, AML_SYSTEM_MEMORY,
> + s->memmap[VIRT_ACPI_GED].base);
> + }
> +
> 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 bd8608ea5b..1d7011b952 100644
> --- a/hw/riscv/virt.c
> +++ b/hw/riscv/virt.c
> @@ -55,6 +55,7 @@
> #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 +96,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 +1272,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;
> @@ -1702,6 +1720,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);
> diff --git a/include/hw/riscv/virt.h b/include/hw/riscv/virt.h
> index 18a2a323a3..9ea0b3b7b6 100644
> --- a/include/hw/riscv/virt.h
> +++ b/include/hw/riscv/virt.h
> @@ -47,6 +47,7 @@ struct RISCVVirtState {
>
> /*< public >*/
> Notifier machine_done;
> + DeviceState *acpi_ged;
> DeviceState *platform_bus_dev;
> RISCVHartArrayState soc[VIRT_SOCKETS_MAX];
> DeviceState *irqchip[VIRT_SOCKETS_MAX];
> @@ -88,9 +89,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 */
next prev parent reply other threads:[~2026-02-06 14:23 UTC|newest]
Thread overview: 6+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-02-04 10:20 [PATCH v5 0/4] hw/riscv/virt: Add acpi ged and powerdown support liu.xuemei1
2026-02-04 10:22 ` [PATCH v5 1/4] tests/acpi: virt: allow DSDT acpi table changes liu.xuemei1
2026-02-04 10:23 ` [PATCH v5 2/4] hw/riscv/virt: Add acpi ged support liu.xuemei1
2026-02-06 14:22 ` Igor Mammedov [this message]
2026-02-04 10:25 ` [PATCH v5 3/4] hw/riscv/virt: add system_powerdown hmp command support liu.xuemei1
2026-02-04 10:26 ` [PATCH v5 4/4] tests/acpi: Add acpi ged and power button in DSDT for RISC-V liu.xuemei1
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=20260206152258.4ed0b84e@imammedo \
--to=imammedo@redhat.com \
--cc=alistair.francis@wdc.com \
--cc=anisinha@redhat.com \
--cc=dbarboza@ventanamicro.com \
--cc=liu.xuemei1@zte.com.cn \
--cc=liwei1518@gmail.com \
--cc=mst@redhat.com \
--cc=palmer@dabbelt.com \
--cc=pbonzini@redhat.com \
--cc=qemu-devel@nongnu.org \
--cc=qemu-riscv@nongnu.org \
--cc=sunilvl@ventanamicro.com \
--cc=zhiwei_liu@linux.alibaba.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.