[ARM] 5233/1: Allow PXA to have ISA IRQs numbered 0-15
authorMarc Zyngier <maz@misterjones.org>
Mon, 1 Sep 2008 12:03:32 +0000 (13:03 +0100)
committerRussell King <rmk+kernel@arm.linux.org.uk>
Mon, 1 Sep 2008 16:13:26 +0000 (17:13 +0100)
Allow PXA IRQs to be numbered starting at 16, leaving 0 to 15 for the
ISA IRQs, if needed.

This patch depends on RMK's PXA_HAVE_BOARD_IRQS patch.

Signed-off-by: Marc Zyngier <marc.zyngier@altran.com>
Acked-by: Russel King <linux@arm.linux.org.uk>
Acked-by: Eric Miao <eric.y.miao@gmail.com>
Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
arch/arm/mach-pxa/Kconfig
arch/arm/mach-pxa/include/mach/entry-macro.S
arch/arm/mach-pxa/include/mach/irqs.h
arch/arm/mach-pxa/irq.c

index c9643bd..b041712 100644 (file)
@@ -353,4 +353,7 @@ config TOSA_BT
 config PXA_HAVE_BOARD_IRQS
        bool
 
+config PXA_HAVE_ISA_IRQS
+       bool
+
 endif
index de16c12..f6b4bf3 100644 (file)
@@ -41,7 +41,7 @@
                and     \irqstat, \irqstat, \irqnr
                clz     \irqnr, \irqstat
                rsb     \irqnr, \irqnr, #31
-               add     \irqnr, \irqnr, #32
+               add     \irqnr, \irqnr, #(32 + PXA_IRQ(0))
                b       1001f
 1003:
                mrc     p6, 0, \irqstat, c0, c0, 0      @ ICIP
@@ -52,6 +52,6 @@
                rsb     \irqstat, \irqnr, #0
                and     \irqstat, \irqstat, \irqnr
                clz     \irqnr, \irqstat
-               rsb     \irqnr, \irqnr, #31
+               rsb     \irqnr, \irqnr, #(31 + PXA_IRQ(0))
 1001:
                .endm
index ce3ce17..9c163e1 100644 (file)
  */
 
 
-#define PXA_IRQ(x)     (x)
+#ifdef CONFIG_PXA_HAVE_ISA_IRQS
+#define PXA_ISA_IRQ(x) (x)
+#define PXA_ISA_IRQ_NUM        (16)
+#else
+#define PXA_ISA_IRQ_NUM        (0)
+#endif
+
+#define PXA_IRQ(x)     (PXA_ISA_IRQ_NUM + (x))
 
 #if defined(CONFIG_PXA27x) || defined(CONFIG_PXA3xx)
 #define IRQ_SSP3       PXA_IRQ(0)      /* SSP3 service request */
@@ -73,7 +80,7 @@
 #define IRQ_MMC3       PXA_IRQ(55)     /* MMC3 Controller (PXA310) */
 #endif
 
-#define PXA_GPIO_IRQ_BASE      (64)
+#define PXA_GPIO_IRQ_BASE      PXA_IRQ(64)
 #define PXA_GPIO_IRQ_NUM       (128)
 
 #define GPIO_2_x_TO_IRQ(x)     (PXA_GPIO_IRQ_BASE + (x))
index 5e95c53..fa69c3a 100644 (file)
@@ -57,7 +57,7 @@ void __init pxa_init_irq(int irq_nr, set_wake_t fn)
 
        pxa_internal_irq_nr = irq_nr;
 
-       for (irq = 0; irq < irq_nr; irq += 32) {
+       for (irq = PXA_IRQ(0); irq < PXA_IRQ(irq_nr); irq += 32) {
                _ICMR(irq) = 0; /* disable all IRQs */
                _ICLR(irq) = 0; /* all IRQs are IRQ, not FIQ */
        }