mirror of
https://github.com/Motorhead1991/qemu.git
synced 2025-08-10 11:04:58 -06:00
hw/loongarch/virt: Set max 256 cpus support on loongarch virt machine
Add separate macro EXTIOI_CPUS for extioi interrupt controller, extioi only supports 4 cpu. And set macro LOONGARCH_MAX_CPUS as 256 so that loongarch virt machine supports more cpus. Interrupts from external devices can only be routed cpu 0-3 because of extioi limits, cpu internal interrupt such as timer/ipi can be triggered on all cpus. Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org> Reviewed-by: Richard Henderson <richard.henderson@linaro.org> Signed-off-by: Song Gao <gaosong@loongson.cn> Message-Id: <20230512100421.1867848-3-gaosong@loongson.cn>
This commit is contained in:
parent
78464f023b
commit
646c39b220
4 changed files with 18 additions and 11 deletions
|
@ -607,8 +607,13 @@ static void loongarch_irq_init(LoongArchMachineState *lams)
|
|||
memory_region_add_subregion(&env->system_iocsr, MAIL_SEND_ADDR,
|
||||
sysbus_mmio_get_region(SYS_BUS_DEVICE(ipi),
|
||||
1));
|
||||
/* extioi iocsr memory region */
|
||||
memory_region_add_subregion(&env->system_iocsr, APIC_BASE,
|
||||
/*
|
||||
* extioi iocsr memory region
|
||||
* only one extioi is added on loongarch virt machine
|
||||
* external device interrupt can only be routed to cpu 0-3
|
||||
*/
|
||||
if (cpu < EXTIOI_CPUS)
|
||||
memory_region_add_subregion(&env->system_iocsr, APIC_BASE,
|
||||
sysbus_mmio_get_region(SYS_BUS_DEVICE(extioi),
|
||||
cpu));
|
||||
}
|
||||
|
@ -617,7 +622,7 @@ static void loongarch_irq_init(LoongArchMachineState *lams)
|
|||
* connect ext irq to the cpu irq
|
||||
* cpu_pin[9:2] <= intc_pin[7:0]
|
||||
*/
|
||||
for (cpu = 0; cpu < ms->smp.cpus; cpu++) {
|
||||
for (cpu = 0; cpu < MIN(ms->smp.cpus, EXTIOI_CPUS); cpu++) {
|
||||
cpudev = DEVICE(qemu_get_cpu(cpu));
|
||||
for (pin = 0; pin < LS3A_INTC_IP; pin++) {
|
||||
qdev_connect_gpio_out(extioi, (cpu * 8 + pin),
|
||||
|
@ -1026,7 +1031,7 @@ static void loongarch_class_init(ObjectClass *oc, void *data)
|
|||
mc->default_ram_size = 1 * GiB;
|
||||
mc->default_cpu_type = LOONGARCH_CPU_TYPE_NAME("la464");
|
||||
mc->default_ram_id = "loongarch.ram";
|
||||
mc->max_cpus = LOONGARCH_MAX_VCPUS;
|
||||
mc->max_cpus = LOONGARCH_MAX_CPUS;
|
||||
mc->is_default = 1;
|
||||
mc->default_kernel_irqchip_split = false;
|
||||
mc->block_default_type = IF_VIRTIO;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue