浏览代码

hw/intc/arm_gicv3: Add external IRQ lines for NMI

Augment the GICv3's QOM device interface by adding one
new set of sysbus IRQ line, to signal NMI to each CPU.

Signed-off-by: Jinjie Ruan <ruanjinjie@huawei.com>
Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
Reviewed-by: Peter Maydell <peter.maydell@linaro.org>
Message-id: 20240407081733.3231820-11-ruanjinjie@huawei.com
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
Jinjie Ruan 1 年之前
父节点
当前提交
83f3207538
共有 3 个文件被更改,包括 10 次插入0 次删除
  1. 6 0
      hw/intc/arm_gicv3_common.c
  2. 2 0
      include/hw/intc/arm_gic_common.h
  3. 2 0
      include/hw/intc/arm_gicv3_common.h

+ 6 - 0
hw/intc/arm_gicv3_common.c

@@ -299,6 +299,12 @@ void gicv3_init_irqs_and_mmio(GICv3State *s, qemu_irq_handler handler,
     for (i = 0; i < s->num_cpu; i++) {
     for (i = 0; i < s->num_cpu; i++) {
         sysbus_init_irq(sbd, &s->cpu[i].parent_vfiq);
         sysbus_init_irq(sbd, &s->cpu[i].parent_vfiq);
     }
     }
+    for (i = 0; i < s->num_cpu; i++) {
+        sysbus_init_irq(sbd, &s->cpu[i].parent_nmi);
+    }
+    for (i = 0; i < s->num_cpu; i++) {
+        sysbus_init_irq(sbd, &s->cpu[i].parent_vnmi);
+    }
 
 
     memory_region_init_io(&s->iomem_dist, OBJECT(s), ops, s,
     memory_region_init_io(&s->iomem_dist, OBJECT(s), ops, s,
                           "gicv3_dist", 0x10000);
                           "gicv3_dist", 0x10000);

+ 2 - 0
include/hw/intc/arm_gic_common.h

@@ -71,6 +71,8 @@ struct GICState {
     qemu_irq parent_fiq[GIC_NCPU];
     qemu_irq parent_fiq[GIC_NCPU];
     qemu_irq parent_virq[GIC_NCPU];
     qemu_irq parent_virq[GIC_NCPU];
     qemu_irq parent_vfiq[GIC_NCPU];
     qemu_irq parent_vfiq[GIC_NCPU];
+    qemu_irq parent_nmi[GIC_NCPU];
+    qemu_irq parent_vnmi[GIC_NCPU];
     qemu_irq maintenance_irq[GIC_NCPU];
     qemu_irq maintenance_irq[GIC_NCPU];
 
 
     /* GICD_CTLR; for a GIC with the security extensions the NS banked version
     /* GICD_CTLR; for a GIC with the security extensions the NS banked version

+ 2 - 0
include/hw/intc/arm_gicv3_common.h

@@ -155,6 +155,8 @@ struct GICv3CPUState {
     qemu_irq parent_fiq;
     qemu_irq parent_fiq;
     qemu_irq parent_virq;
     qemu_irq parent_virq;
     qemu_irq parent_vfiq;
     qemu_irq parent_vfiq;
+    qemu_irq parent_nmi;
+    qemu_irq parent_vnmi;
 
 
     /* Redistributor */
     /* Redistributor */
     uint32_t level;                  /* Current IRQ level */
     uint32_t level;                  /* Current IRQ level */