hw/riscv/aia: Configure stride for the M-mode IMSIC

riscv_create_aia() currently hard-codes the M-IMSIC at one 4 KiB page
per hart and gives callers no way to widen it.

Add an m_imsic_stride parameter that supplies the per hart byte
stride directly. The virt machine passes IMSIC_HART_SIZE(0)
(= 4 KiB), preserving its existing compact layout.

The parameter only changes how the slots are spaced, with the rest of
each slot reserved. This allows future platforms that have different
layouts to control the stride.

Reviewed-by: Philippe Mathieu-Daudé <philmd@mailo.com>
Reviewed-by: Alistair Francis <alistair.francis@wdc.com>
Signed-off-by: Joel Stanley <joel@jms.id.au>
Message-ID: <20260630024952.1520546-6-joel@jms.id.au>
Signed-off-by: Alistair Francis <alistair.francis@wdc.com>
This commit is contained in:
Joel Stanley
2026-06-30 12:19:43 +09:30
committed by Alistair Francis
parent 2a4d7ad49b
commit 992d918d01
3 changed files with 4 additions and 1 deletions

View File

@@ -25,6 +25,7 @@ uint32_t imsic_num_bits(uint32_t count)
}
DeviceState *riscv_create_aia(bool msimode, int aia_guests,
uint32_t m_imsic_stride,
uint16_t num_sources,
const MemMapEntry *aplic_m,
const MemMapEntry *aplic_s,
@@ -47,7 +48,7 @@ DeviceState *riscv_create_aia(bool msimode, int aia_guests,
/* Per-socket M-level IMSICs */
addr = imsic_m->base + socket * (1U << IMSIC_MMIO_GROUP_MIN_SHIFT);
for (i = 0; i < hart_count; i++) {
riscv_imsic_create(addr + i * IMSIC_HART_SIZE(0),
riscv_imsic_create(addr + i * m_imsic_stride,
base_hartid + i, true, 1,
num_msis);
}

View File

@@ -14,6 +14,7 @@
uint32_t imsic_num_bits(uint32_t count);
DeviceState *riscv_create_aia(bool msimode, int aia_guests,
uint32_t m_imsic_stride,
uint16_t num_sources,
const MemMapEntry *aplic_m,
const MemMapEntry *aplic_s,

View File

@@ -1401,6 +1401,7 @@ static void virt_machine_init(MachineState *machine)
} else {
s->irqchip[i] = riscv_create_aia(s->aia_type == VIRT_AIA_TYPE_APLIC_IMSIC,
s->aia_guests,
IMSIC_HART_SIZE(0),
s->num_sources,
&s->memmap[VIRT_APLIC_M],
&s->memmap[VIRT_APLIC_S],