On 6/4/23 12:00, Song Gao wrote:
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.
Signed-off-by: Song Gao <gaos...@loongson.cn>
---
hw/intc/loongarch_extioi.c | 4 ++--
hw/loongarch/virt.c | 21 ++++++++++++++-------
include/hw/intc/loongarch_extioi.h | 10 ++++++----
include/hw/loongarch/virt.h | 2 +-
4 files changed, 23 insertions(+), 14 deletions(-)
@@ -618,10 +623,12 @@ static void loongarch_irq_init(LoongArchMachineState
*lams)
* cpu_pin[9:2] <= intc_pin[7:0]
*/
for (cpu = 0; cpu < ms->smp.cpus; cpu++) {
- cpudev = DEVICE(qemu_get_cpu(cpu));
- for (pin = 0; pin < LS3A_INTC_IP; pin++) {
- qdev_connect_gpio_out(extioi, (cpu * 8 + pin),
- qdev_get_gpio_in(cpudev, pin + 2));
+ if (cpu < EXTIOI_CPUS) {
Alternatively:
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),
+ qdev_get_gpio_in(cpudev, pin + 2));
+ }
}
}
Reviewed-by: Philippe Mathieu-Daudé <phi...@linaro.org>