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:
committed by
Alistair Francis
parent
2a4d7ad49b
commit
992d918d01
@@ -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);
|
||||
}
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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],
|
||||
|
||||
Reference in New Issue
Block a user