Instead of hard coding the number interrrupt identities used by the IMSIC pass it in as a parameter. This allows other machines to configure this as required.
No functional change. Signed-off-by: Stefan Butz <[email protected]> --- hw/riscv/virt-acpi-build.c | 4 ++-- hw/riscv/virt.c | 7 ++++--- include/hw/riscv/virt.h | 1 + 3 files changed, 7 insertions(+), 5 deletions(-) diff --git a/hw/riscv/virt-acpi-build.c b/hw/riscv/virt-acpi-build.c index 8e516ec114..0ebfa10a02 100644 --- a/hw/riscv/virt-acpi-build.c +++ b/hw/riscv/virt-acpi-build.c @@ -576,9 +576,9 @@ static void build_madt(GArray *table_data, build_append_int_noprefix(table_data, 0, 1); /* Reserved */ build_append_int_noprefix(table_data, 0, 4); /* Flags */ /* Number of supervisor mode Interrupt Identities */ - build_append_int_noprefix(table_data, VIRT_IRQCHIP_NUM_MSIS, 2); + build_append_int_noprefix(table_data, s->num_msis, 2); /* Number of guest mode Interrupt Identities */ - build_append_int_noprefix(table_data, VIRT_IRQCHIP_NUM_MSIS, 2); + build_append_int_noprefix(table_data, s->num_msis, 2); /* Guest Index Bits */ build_append_int_noprefix(table_data, guest_index_bits, 1); /* Hart Index Bits */ diff --git a/hw/riscv/virt.c b/hw/riscv/virt.c index d4b501802f..0ee726b4c0 100644 --- a/hw/riscv/virt.c +++ b/hw/riscv/virt.c @@ -277,7 +277,7 @@ static void create_fdt_sockets(RISCVVirtState *s, .imsic_m_base = !kvm_enabled() ? s->memmap[VIRT_IMSIC_M].base : 0, .imsic_s_base = s->memmap[VIRT_IMSIC_S].base, .imsic_group_max_size = VIRT_IMSIC_GROUP_MAX_SIZE, - .irqchip_num_msis = VIRT_IRQCHIP_NUM_MSIS, + .irqchip_num_msis = s->num_msis, .aia_guests = s->aia_guests }; @@ -826,7 +826,7 @@ static void virt_machine_init(MachineState *machine) &s->memmap[VIRT_IMSIC_M], &s->memmap[VIRT_IMSIC_S], i, base_hartid, hart_count, - VIRT_IRQCHIP_NUM_MSIS, + s->num_msis, VIRT_IRQCHIP_NUM_PRIO_BITS); } @@ -847,7 +847,7 @@ static void virt_machine_init(MachineState *machine) if (kvm_enabled() && virt_use_kvm_aia_aplic_imsic(s->aia_type)) { kvm_riscv_aia_create(machine, IMSIC_MMIO_GROUP_MIN_SHIFT, - VIRT_IRQCHIP_NUM_SOURCES, VIRT_IRQCHIP_NUM_MSIS, + s->num_sources, s->num_msis, s->memmap[VIRT_APLIC_S].base, s->memmap[VIRT_IMSIC_S].base, s->aia_guests); @@ -972,6 +972,7 @@ static void virt_machine_instance_init(Object *obj) s->acpi = ON_OFF_AUTO_AUTO; s->iommu_sys = ON_OFF_AUTO_AUTO; s->num_sources = VIRT_IRQCHIP_NUM_SOURCES; + s->num_msis = VIRT_IRQCHIP_NUM_MSIS; } static char *virt_get_aia_guests(Object *obj, Error **errp) diff --git a/include/hw/riscv/virt.h b/include/hw/riscv/virt.h index e516898f9a..98e48ac894 100644 --- a/include/hw/riscv/virt.h +++ b/include/hw/riscv/virt.h @@ -66,6 +66,7 @@ struct RISCVVirtState { OnOffAuto iommu_sys; uint16_t pci_iommu_bdf; uint16_t num_sources; + uint16_t num_msis; }; enum { -- Git-157)
