|
@@ -0,0 +1,139 @@
|
|
|
+/*
|
|
|
+ * arch/arm/include/asm/hardware/entry-macro-iomd.S
|
|
|
+ *
|
|
|
+ * Low-level IRQ helper macros for IOC/IOMD based platforms
|
|
|
+ *
|
|
|
+ * This file is licensed under the terms of the GNU General Public
|
|
|
+ * License version 2. This program is licensed "as is" without any
|
|
|
+ * warranty of any kind, whether express or implied.
|
|
|
+ */
|
|
|
+
|
|
|
+/* IOC / IOMD based hardware */
|
|
|
+#include <asm/hardware/iomd.h>
|
|
|
+
|
|
|
+ .macro disable_fiq
|
|
|
+ mov r12, #ioc_base_high
|
|
|
+ .if ioc_base_low
|
|
|
+ orr r12, r12, #ioc_base_low
|
|
|
+ .endif
|
|
|
+ strb r12, [r12, #0x38] @ Disable FIQ register
|
|
|
+ .endm
|
|
|
+
|
|
|
+ .macro get_irqnr_and_base, irqnr, irqstat, base, tmp
|
|
|
+ ldrb \irqstat, [\base, #IOMD_IRQREQB] @ get high priority first
|
|
|
+ ldr \tmp, =irq_prio_h
|
|
|
+ teq \irqstat, #0
|
|
|
+#ifdef IOMD_BASE
|
|
|
+ ldreqb \irqstat, [\base, #IOMD_DMAREQ] @ get dma
|
|
|
+ addeq \tmp, \tmp, #256 @ irq_prio_h table size
|
|
|
+ teqeq \irqstat, #0
|
|
|
+ bne 2406f
|
|
|
+#endif
|
|
|
+ ldreqb \irqstat, [\base, #IOMD_IRQREQA] @ get low priority
|
|
|
+ addeq \tmp, \tmp, #256 @ irq_prio_d table size
|
|
|
+ teqeq \irqstat, #0
|
|
|
+#ifdef IOMD_IRQREQC
|
|
|
+ ldreqb \irqstat, [\base, #IOMD_IRQREQC]
|
|
|
+ addeq \tmp, \tmp, #256 @ irq_prio_l table size
|
|
|
+ teqeq \irqstat, #0
|
|
|
+#endif
|
|
|
+#ifdef IOMD_IRQREQD
|
|
|
+ ldreqb \irqstat, [\base, #IOMD_IRQREQD]
|
|
|
+ addeq \tmp, \tmp, #256 @ irq_prio_lc table size
|
|
|
+ teqeq \irqstat, #0
|
|
|
+#endif
|
|
|
+2406: ldrneb \irqnr, [\tmp, \irqstat] @ get IRQ number
|
|
|
+ .endm
|
|
|
+
|
|
|
+/*
|
|
|
+ * Interrupt table (incorporates priority). Please note that we
|
|
|
+ * rely on the order of these tables (see above code).
|
|
|
+ */
|
|
|
+ .align 5
|
|
|
+irq_prio_h: .byte 0, 8, 9, 8,10,10,10,10,11,11,11,11,10,10,10,10
|
|
|
+ .byte 12, 8, 9, 8,10,10,10,10,11,11,11,11,10,10,10,10
|
|
|
+ .byte 13,13,13,13,10,10,10,10,11,11,11,11,10,10,10,10
|
|
|
+ .byte 13,13,13,13,10,10,10,10,11,11,11,11,10,10,10,10
|
|
|
+ .byte 14,14,14,14,10,10,10,10,11,11,11,11,10,10,10,10
|
|
|
+ .byte 14,14,14,14,10,10,10,10,11,11,11,11,10,10,10,10
|
|
|
+ .byte 13,13,13,13,10,10,10,10,11,11,11,11,10,10,10,10
|
|
|
+ .byte 13,13,13,13,10,10,10,10,11,11,11,11,10,10,10,10
|
|
|
+ .byte 15,15,15,15,10,10,10,10,11,11,11,11,10,10,10,10
|
|
|
+ .byte 15,15,15,15,10,10,10,10,11,11,11,11,10,10,10,10
|
|
|
+ .byte 13,13,13,13,10,10,10,10,11,11,11,11,10,10,10,10
|
|
|
+ .byte 13,13,13,13,10,10,10,10,11,11,11,11,10,10,10,10
|
|
|
+ .byte 15,15,15,15,10,10,10,10,11,11,11,11,10,10,10,10
|
|
|
+ .byte 15,15,15,15,10,10,10,10,11,11,11,11,10,10,10,10
|
|
|
+ .byte 13,13,13,13,10,10,10,10,11,11,11,11,10,10,10,10
|
|
|
+ .byte 13,13,13,13,10,10,10,10,11,11,11,11,10,10,10,10
|
|
|
+#ifdef IOMD_BASE
|
|
|
+irq_prio_d: .byte 0,16,17,16,18,16,17,16,19,16,17,16,18,16,17,16
|
|
|
+ .byte 20,16,17,16,18,16,17,16,19,16,17,16,18,16,17,16
|
|
|
+ .byte 21,16,17,16,18,16,17,16,19,16,17,16,18,16,17,16
|
|
|
+ .byte 21,16,17,16,18,16,17,16,19,16,17,16,18,16,17,16
|
|
|
+ .byte 22,16,17,16,18,16,17,16,19,16,17,16,18,16,17,16
|
|
|
+ .byte 22,16,17,16,18,16,17,16,19,16,17,16,18,16,17,16
|
|
|
+ .byte 21,16,17,16,18,16,17,16,19,16,17,16,18,16,17,16
|
|
|
+ .byte 21,16,17,16,18,16,17,16,19,16,17,16,18,16,17,16
|
|
|
+ .byte 23,16,17,16,18,16,17,16,19,16,17,16,18,16,17,16
|
|
|
+ .byte 23,16,17,16,18,16,17,16,19,16,17,16,18,16,17,16
|
|
|
+ .byte 21,16,17,16,18,16,17,16,19,16,17,16,18,16,17,16
|
|
|
+ .byte 21,16,17,16,18,16,17,16,19,16,17,16,18,16,17,16
|
|
|
+ .byte 22,16,17,16,18,16,17,16,19,16,17,16,18,16,17,16
|
|
|
+ .byte 22,16,17,16,18,16,17,16,19,16,17,16,18,16,17,16
|
|
|
+ .byte 21,16,17,16,18,16,17,16,19,16,17,16,18,16,17,16
|
|
|
+ .byte 21,16,17,16,18,16,17,16,19,16,17,16,18,16,17,16
|
|
|
+#endif
|
|
|
+irq_prio_l: .byte 0, 0, 1, 0, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3
|
|
|
+ .byte 4, 0, 1, 0, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3
|
|
|
+ .byte 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5
|
|
|
+ .byte 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5
|
|
|
+ .byte 6, 6, 6, 6, 6, 6, 6, 6, 3, 3, 3, 3, 3, 3, 3, 3
|
|
|
+ .byte 6, 6, 6, 6, 6, 6, 6, 6, 3, 3, 3, 3, 3, 3, 3, 3
|
|
|
+ .byte 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5
|
|
|
+ .byte 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5
|
|
|
+ .byte 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7
|
|
|
+ .byte 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7
|
|
|
+ .byte 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7
|
|
|
+ .byte 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7
|
|
|
+ .byte 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7
|
|
|
+ .byte 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7
|
|
|
+ .byte 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7
|
|
|
+ .byte 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7
|
|
|
+#ifdef IOMD_IRQREQC
|
|
|
+irq_prio_lc: .byte 24,24,25,24,26,26,26,26,27,27,27,27,27,27,27,27
|
|
|
+ .byte 28,24,25,24,26,26,26,26,27,27,27,27,27,27,27,27
|
|
|
+ .byte 29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29
|
|
|
+ .byte 29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29
|
|
|
+ .byte 30,30,30,30,30,30,30,30,27,27,27,27,27,27,27,27
|
|
|
+ .byte 30,30,30,30,30,30,30,30,27,27,27,27,27,27,27,27
|
|
|
+ .byte 29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29
|
|
|
+ .byte 29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29
|
|
|
+ .byte 31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31
|
|
|
+ .byte 31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31
|
|
|
+ .byte 31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31
|
|
|
+ .byte 31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31
|
|
|
+ .byte 31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31
|
|
|
+ .byte 31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31
|
|
|
+ .byte 31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31
|
|
|
+ .byte 31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31
|
|
|
+#endif
|
|
|
+#ifdef IOMD_IRQREQD
|
|
|
+irq_prio_ld: .byte 40,40,41,40,42,42,42,42,43,43,43,43,43,43,43,43
|
|
|
+ .byte 44,40,41,40,42,42,42,42,43,43,43,43,43,43,43,43
|
|
|
+ .byte 45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45
|
|
|
+ .byte 45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45
|
|
|
+ .byte 46,46,46,46,46,46,46,46,43,43,43,43,43,43,43,43
|
|
|
+ .byte 46,46,46,46,46,46,46,46,43,43,43,43,43,43,43,43
|
|
|
+ .byte 45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45
|
|
|
+ .byte 45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45
|
|
|
+ .byte 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47
|
|
|
+ .byte 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47
|
|
|
+ .byte 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47
|
|
|
+ .byte 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47
|
|
|
+ .byte 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47
|
|
|
+ .byte 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47
|
|
|
+ .byte 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47
|
|
|
+ .byte 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47
|
|
|
+#endif
|
|
|
+
|