On Wed, Jan 28, 2026 at 2:35 PM Nutty.Liu <[email protected]> wrote: > > > On 1/14/2026 9:28 AM, Joel Stanley wrote: > > Instead of hard coding the number of IRQ sources used by the APLIC pass > > it in as a parameter. This allows other machines to configure this as > > required. > > > > The maximum number of sources is 1023. > > > > Signed-off-by: Joel Stanley <[email protected]> > > --- > > v2: Add assert for the number of irq sources > > --- > > hw/riscv/aia.h | 1 + > > include/hw/riscv/virt.h | 1 + > > hw/riscv/aia.c | 8 ++++++-- > > hw/riscv/virt-acpi-build.c | 25 ++++++++++++++++--------- > > hw/riscv/virt.c | 2 ++ > > 5 files changed, 26 insertions(+), 11 deletions(-) > > > > diff --git a/hw/riscv/aia.h b/hw/riscv/aia.h > > index 50c48ea4d79c..a63a1ab293fe 100644 > > --- a/hw/riscv/aia.h > > +++ b/hw/riscv/aia.h > > @@ -48,6 +48,7 @@ > > uint32_t imsic_num_bits(uint32_t count); > > > > DeviceState *riscv_create_aia(bool msimode, int aia_guests, > > + uint16_t num_sources, > > const MemMapEntry *aplic_m, > > const MemMapEntry *aplic_s, > > const MemMapEntry *imsic_m, > > diff --git a/include/hw/riscv/virt.h b/include/hw/riscv/virt.h > > index 25ec5c665780..fa7fe8d4f648 100644 > > --- a/include/hw/riscv/virt.h > > +++ b/include/hw/riscv/virt.h > > @@ -64,6 +64,7 @@ struct RISCVVirtState { > > struct GPEXHost *gpex_host; > > OnOffAuto iommu_sys; > > uint16_t pci_iommu_bdf; > > + uint16_t num_sources; > > }; > > > > enum { > > diff --git a/hw/riscv/aia.c b/hw/riscv/aia.c > > index 0a89d7b49b7b..a9130896fba2 100644 > > --- a/hw/riscv/aia.c > > +++ b/hw/riscv/aia.c > > @@ -25,6 +25,7 @@ uint32_t imsic_num_bits(uint32_t count) > > } > > > > DeviceState *riscv_create_aia(bool msimode, int aia_guests, > > + uint16_t num_sources, > > const MemMapEntry *aplic_m, > > const MemMapEntry *aplic_s, > > const MemMapEntry *imsic_m, > > @@ -37,6 +38,9 @@ DeviceState *riscv_create_aia(bool msimode, int > > aia_guests, > > DeviceState *aplic_s_dev = NULL; > > DeviceState *aplic_m_dev = NULL; > > > > + /* The RISC-V Advanced Interrupt Architecture, Chapter 1.2. Limits */ > > + g_assert(num_sources <= 1023); > > + > How about the below check ? > > g_assert(num_sources <= VIRT_IRQCHIP_NUM_SOURCES); > > And modify VIRT_IRQCHIP_NUM_SOURCES in "aia.h" as below ? > > #define VIRT_IRQCHIP_NUM_SOURCES 1023
The names should probably be changed as new code is added. AFAIKS VIRT only comes from the riscv virt machine which was the first to use it. E.g., use something like #define RISCV_APLIC_MAX_NR_SORUCES 1023 Thanks, Nick
