On 8/26/2026 7:05 PM, 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.
Signed-off-by: Joel Stanley <[email protected]>
---
Reviewed-by: Daniel Henrique Barboza <[email protected]>
hw/riscv/aia.h | 2 +-
hw/riscv/aia.c | 2 +-
hw/riscv/tt_atlantis.c | 3 ++-
hw/riscv/virt.c | 3 ++-
4 files changed, 6 insertions(+), 4 deletions(-)
diff --git a/hw/riscv/aia.h b/hw/riscv/aia.h
index 3b6d7f962506..82ab601bf188 100644
--- a/hw/riscv/aia.h
+++ b/hw/riscv/aia.h
@@ -13,7 +13,7 @@
uint32_t imsic_num_bits(uint32_t count);
-DeviceState *riscv_create_aia(bool msimode, int aia_guests,
+DeviceState *riscv_create_aia(MemoryRegion *mr, 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..651552c8f970 100644
--- a/hw/riscv/aia.c
+++ b/hw/riscv/aia.c
@@ -24,7 +24,7 @@ uint32_t imsic_num_bits(uint32_t count)
return ret;
}
-DeviceState *riscv_create_aia(bool msimode, int aia_guests,
+DeviceState *riscv_create_aia(MemoryRegion *mr, 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 babce2b680f2..d69851df0a01 100644
--- a/hw/riscv/tt_atlantis.c
+++ b/hw/riscv/tt_atlantis.c
@@ -496,7 +496,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 329ccdb5a7b6..22a607ed10bf 100644
--- a/hw/riscv/virt.c
+++ b/hw/riscv/virt.c
@@ -1411,8 +1411,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),