render / rpms / qemu

Forked from rpms/qemu 4 months ago
Clone

Blame 2df5c1f5b014126595a26c6797089d284a3b211c.patch

5dc33a
From 2df5c1f5b014126595a26c6797089d284a3b211c Mon Sep 17 00:00:00 2001
5dc33a
From: Harsh Prateek Bora <harshpb@linux.ibm.com>
5dc33a
Date: Wed, 24 Jan 2024 10:30:55 +1000
5dc33a
Subject: [PATCH] ppc/spapr: Introduce SPAPR_IRQ_NR_IPIS to refer IRQ range for
5dc33a
 CPU IPIs.
5dc33a
MIME-Version: 1.0
5dc33a
Content-Type: text/plain; charset=UTF-8
5dc33a
Content-Transfer-Encoding: 8bit
5dc33a
5dc33a
spapr_irq_init currently uses existing macro SPAPR_XIRQ_BASE to refer to
5dc33a
the range of CPU IPIs during initialization of nr-irqs property.
5dc33a
It is more appropriate to have its own define which can be further
5dc33a
reused as appropriate for correct interpretation.
5dc33a
5dc33a
Suggested-by: Cedric Le Goater <clg@kaod.org>
5dc33a
Reviewed-by: Cédric Le Goater <clg@kaod.org>
5dc33a
Tested-by: Kowshik Jois <kowsjois@linux.ibm.com>
5dc33a
Signed-off-by: Harsh Prateek Bora <harshpb@linux.ibm.com>
5dc33a
Signed-off-by: Nicholas Piggin <npiggin@gmail.com>
5dc33a
---
5dc33a
 hw/ppc/spapr_irq.c         |  6 ++++--
5dc33a
 include/hw/ppc/spapr_irq.h | 14 +++++++++++++-
5dc33a
 2 files changed, 17 insertions(+), 3 deletions(-)
5dc33a
5dc33a
diff --git a/hw/ppc/spapr_irq.c b/hw/ppc/spapr_irq.c
5dc33a
index a0d1e1298e1e..97b2fc42ab03 100644
5dc33a
--- a/hw/ppc/spapr_irq.c
5dc33a
+++ b/hw/ppc/spapr_irq.c
5dc33a
@@ -23,6 +23,8 @@
5dc33a
 
5dc33a
 #include "trace.h"
5dc33a
 
5dc33a
+QEMU_BUILD_BUG_ON(SPAPR_IRQ_NR_IPIS > SPAPR_XIRQ_BASE);
5dc33a
+
5dc33a
 static const TypeInfo spapr_intc_info = {
5dc33a
     .name = TYPE_SPAPR_INTC,
5dc33a
     .parent = TYPE_INTERFACE,
5dc33a
@@ -329,7 +331,7 @@ void spapr_irq_init(SpaprMachineState *spapr, Error **errp)
5dc33a
         int i;
5dc33a
 
5dc33a
         dev = qdev_new(TYPE_SPAPR_XIVE);
5dc33a
-        qdev_prop_set_uint32(dev, "nr-irqs", smc->nr_xirqs + SPAPR_XIRQ_BASE);
5dc33a
+        qdev_prop_set_uint32(dev, "nr-irqs", smc->nr_xirqs + SPAPR_IRQ_NR_IPIS);
5dc33a
         /*
5dc33a
          * 8 XIVE END structures per CPU. One for each available
5dc33a
          * priority
5dc33a
@@ -356,7 +358,7 @@ void spapr_irq_init(SpaprMachineState *spapr, Error **errp)
5dc33a
     }
5dc33a
 
5dc33a
     spapr->qirqs = qemu_allocate_irqs(spapr_set_irq, spapr,
5dc33a
-                                      smc->nr_xirqs + SPAPR_XIRQ_BASE);
5dc33a
+                                      smc->nr_xirqs + SPAPR_IRQ_NR_IPIS);
5dc33a
 
5dc33a
     /*
5dc33a
      * Mostly we don't actually need this until reset, except that not
5dc33a
diff --git a/include/hw/ppc/spapr_irq.h b/include/hw/ppc/spapr_irq.h
5dc33a
index c22a72c9e270..4fd2d5853d8b 100644
5dc33a
--- a/include/hw/ppc/spapr_irq.h
5dc33a
+++ b/include/hw/ppc/spapr_irq.h
5dc33a
@@ -14,9 +14,21 @@
5dc33a
 #include "qom/object.h"
5dc33a
 
5dc33a
 /*
5dc33a
- * IRQ range offsets per device type
5dc33a
+ * The XIVE IRQ backend uses the same layout as the XICS backend but
5dc33a
+ * covers the full range of the IRQ number space. The IRQ numbers for
5dc33a
+ * the CPU IPIs are allocated at the bottom of this space, below 4K,
5dc33a
+ * to preserve compatibility with XICS which does not use that range.
5dc33a
+ */
5dc33a
+
5dc33a
+/*
5dc33a
+ * CPU IPI range (XIVE only)
5dc33a
  */
5dc33a
 #define SPAPR_IRQ_IPI        0x0
5dc33a
+#define SPAPR_IRQ_NR_IPIS    0x1000
5dc33a
+
5dc33a
+/*
5dc33a
+ * IRQ range offsets per device type
5dc33a
+ */
5dc33a
 
5dc33a
 #define SPAPR_XIRQ_BASE      XICS_IRQ_BASE /* 0x1000 */
5dc33a
 #define SPAPR_IRQ_EPOW       (SPAPR_XIRQ_BASE + 0x0000)