On Thu, Sep 03, 2026 at 03:21:15PM +0800, Joel Stanley wrote:
> Add a MemoryRegion parameter to riscv_create_aia(), to be passed on to
> the IMSIC and APLIC helpers so a SoC can have the controllers mapped
> into its own memory container. Both callers pass system_memory, so there
> is no change in behaviour.
>
> As the controllers don't yet take a MemoryRegion the parameter is not
> yet passed on. Changing riscv_create_aia first avoids churn in the
> intermediate commits.
>
> Reviewed-by: Daniel Henrique Barboza <[email protected]>
> Reviewed-by: Alistair Francis <[email protected]>
> Reviewed-by: Philippe Mathieu-Daudé <[email protected]>
> Signed-off-by: Joel Stanley <[email protected]>
Reviewed-by: Chao Liu <[email protected]>
Thanks,
Chao
> ---
> hw/riscv/aia.h | 3 ++-
> hw/riscv/aia.c | 3 ++-
> hw/riscv/tt_atlantis.c | 3 ++-
> hw/riscv/virt.c | 3 ++-
> 4 files changed, 8 insertions(+), 4 deletions(-)
>
> diff --git a/hw/riscv/aia.h b/hw/riscv/aia.h
> index 3b6d7f962506..5df3292610e9 100644
> --- a/hw/riscv/aia.h
> +++ b/hw/riscv/aia.h
> @@ -13,7 +13,8 @@
>
> uint32_t imsic_num_bits(uint32_t count);
>
> -DeviceState *riscv_create_aia(bool msimode, int aia_guests,
> +DeviceState *riscv_create_aia(MemoryRegion *container,
> + bool msimode, int aia_guests,
> uint32_t m_imsic_stride,
> uint32_t s_imsic_stride,
> uint16_t num_sources,
> diff --git a/hw/riscv/aia.c b/hw/riscv/aia.c
> index c1a5982856c5..e11382e512da 100644
> --- a/hw/riscv/aia.c
> +++ b/hw/riscv/aia.c
> @@ -24,7 +24,8 @@ uint32_t imsic_num_bits(uint32_t count)
> return ret;
> }
>
> -DeviceState *riscv_create_aia(bool msimode, int aia_guests,
> +DeviceState *riscv_create_aia(MemoryRegion *container,
> + bool msimode, int aia_guests,
> uint32_t m_imsic_stride,
> uint32_t s_imsic_stride,
> uint16_t num_sources,
> diff --git a/hw/riscv/tt_atlantis.c b/hw/riscv/tt_atlantis.c
> index 812051a11fd4..f395236d88ab 100644
> --- a/hw/riscv/tt_atlantis.c
> +++ b/hw/riscv/tt_atlantis.c
> @@ -498,7 +498,8 @@ static void tt_atlantis_machine_init(MachineState
> *machine)
> &error_abort);
> sysbus_realize(SYS_BUS_DEVICE(&s->soc), &error_fatal);
>
> - s->irqchip = riscv_create_aia(true, TT_IMSIC_GUESTS,
> + s->irqchip = riscv_create_aia(system_memory,
> + true, TT_IMSIC_GUESTS,
> TT_IMSIC_STRIDE,
> TT_IMSIC_STRIDE,
> TT_IRQCHIP_NUM_SOURCES,
> diff --git a/hw/riscv/virt.c b/hw/riscv/virt.c
> index de7b99c6a51e..6480a3f0a9c0 100644
> --- a/hw/riscv/virt.c
> +++ b/hw/riscv/virt.c
> @@ -809,8 +809,9 @@ static void virt_machine_init(MachineState *machine)
> s->irqchip[i] = virt_create_plic(s->memmap, i,
> base_hartid, hart_count);
> } else {
> + bool msimode = s->aia_type == VIRT_AIA_TYPE_APLIC_IMSIC;
> int imsic_bits = imsic_num_bits(s->aia_guests + 1);
> - s->irqchip[i] = riscv_create_aia(s->aia_type ==
> VIRT_AIA_TYPE_APLIC_IMSIC,
> + s->irqchip[i] = riscv_create_aia(system_memory, msimode,
> s->aia_guests,
> IMSIC_HART_SIZE(0),
> IMSIC_HART_SIZE(imsic_bits),
> --
> 2.47.3
>