diff options
Diffstat (limited to 'arch/arm/include/asm/hardware/entry-macro-iomd.S')
-rw-r--r-- | arch/arm/include/asm/hardware/entry-macro-iomd.S | 139 |
1 files changed, 139 insertions, 0 deletions
diff --git a/arch/arm/include/asm/hardware/entry-macro-iomd.S b/arch/arm/include/asm/hardware/entry-macro-iomd.S new file mode 100644 index 000000000000..e0af4983723f --- /dev/null +++ b/arch/arm/include/asm/hardware/entry-macro-iomd.S | |||
@@ -0,0 +1,139 @@ | |||
1 | /* | ||
2 | * arch/arm/include/asm/hardware/entry-macro-iomd.S | ||
3 | * | ||
4 | * Low-level IRQ helper macros for IOC/IOMD based platforms | ||
5 | * | ||
6 | * This file is licensed under the terms of the GNU General Public | ||
7 | * License version 2. This program is licensed "as is" without any | ||
8 | * warranty of any kind, whether express or implied. | ||
9 | */ | ||
10 | |||
11 | /* IOC / IOMD based hardware */ | ||
12 | #include <asm/hardware/iomd.h> | ||
13 | |||
14 | .macro disable_fiq | ||
15 | mov r12, #ioc_base_high | ||
16 | .if ioc_base_low | ||
17 | orr r12, r12, #ioc_base_low | ||
18 | .endif | ||
19 | strb r12, [r12, #0x38] @ Disable FIQ register | ||
20 | .endm | ||
21 | |||
22 | .macro get_irqnr_and_base, irqnr, irqstat, base, tmp | ||
23 | ldrb \irqstat, [\base, #IOMD_IRQREQB] @ get high priority first | ||
24 | ldr \tmp, =irq_prio_h | ||
25 | teq \irqstat, #0 | ||
26 | #ifdef IOMD_BASE | ||
27 | ldreqb \irqstat, [\base, #IOMD_DMAREQ] @ get dma | ||
28 | addeq \tmp, \tmp, #256 @ irq_prio_h table size | ||
29 | teqeq \irqstat, #0 | ||
30 | bne 2406f | ||
31 | #endif | ||
32 | ldreqb \irqstat, [\base, #IOMD_IRQREQA] @ get low priority | ||
33 | addeq \tmp, \tmp, #256 @ irq_prio_d table size | ||
34 | teqeq \irqstat, #0 | ||
35 | #ifdef IOMD_IRQREQC | ||
36 | ldreqb \irqstat, [\base, #IOMD_IRQREQC] | ||
37 | addeq \tmp, \tmp, #256 @ irq_prio_l table size | ||
38 | teqeq \irqstat, #0 | ||
39 | #endif | ||
40 | #ifdef IOMD_IRQREQD | ||
41 | ldreqb \irqstat, [\base, #IOMD_IRQREQD] | ||
42 | addeq \tmp, \tmp, #256 @ irq_prio_lc table size | ||
43 | teqeq \irqstat, #0 | ||
44 | #endif | ||
45 | 2406: ldrneb \irqnr, [\tmp, \irqstat] @ get IRQ number | ||
46 | .endm | ||
47 | |||
48 | /* | ||
49 | * Interrupt table (incorporates priority). Please note that we | ||
50 | * rely on the order of these tables (see above code). | ||
51 | */ | ||
52 | .align 5 | ||
53 | irq_prio_h: .byte 0, 8, 9, 8,10,10,10,10,11,11,11,11,10,10,10,10 | ||
54 | .byte 12, 8, 9, 8,10,10,10,10,11,11,11,11,10,10,10,10 | ||
55 | .byte 13,13,13,13,10,10,10,10,11,11,11,11,10,10,10,10 | ||
56 | .byte 13,13,13,13,10,10,10,10,11,11,11,11,10,10,10,10 | ||
57 | .byte 14,14,14,14,10,10,10,10,11,11,11,11,10,10,10,10 | ||
58 | .byte 14,14,14,14,10,10,10,10,11,11,11,11,10,10,10,10 | ||
59 | .byte 13,13,13,13,10,10,10,10,11,11,11,11,10,10,10,10 | ||
60 | .byte 13,13,13,13,10,10,10,10,11,11,11,11,10,10,10,10 | ||
61 | .byte 15,15,15,15,10,10,10,10,11,11,11,11,10,10,10,10 | ||
62 | .byte 15,15,15,15,10,10,10,10,11,11,11,11,10,10,10,10 | ||
63 | .byte 13,13,13,13,10,10,10,10,11,11,11,11,10,10,10,10 | ||
64 | .byte 13,13,13,13,10,10,10,10,11,11,11,11,10,10,10,10 | ||
65 | .byte 15,15,15,15,10,10,10,10,11,11,11,11,10,10,10,10 | ||
66 | .byte 15,15,15,15,10,10,10,10,11,11,11,11,10,10,10,10 | ||
67 | .byte 13,13,13,13,10,10,10,10,11,11,11,11,10,10,10,10 | ||
68 | .byte 13,13,13,13,10,10,10,10,11,11,11,11,10,10,10,10 | ||
69 | #ifdef IOMD_BASE | ||
70 | irq_prio_d: .byte 0,16,17,16,18,16,17,16,19,16,17,16,18,16,17,16 | ||
71 | .byte 20,16,17,16,18,16,17,16,19,16,17,16,18,16,17,16 | ||
72 | .byte 21,16,17,16,18,16,17,16,19,16,17,16,18,16,17,16 | ||
73 | .byte 21,16,17,16,18,16,17,16,19,16,17,16,18,16,17,16 | ||
74 | .byte 22,16,17,16,18,16,17,16,19,16,17,16,18,16,17,16 | ||
75 | .byte 22,16,17,16,18,16,17,16,19,16,17,16,18,16,17,16 | ||
76 | .byte 21,16,17,16,18,16,17,16,19,16,17,16,18,16,17,16 | ||
77 | .byte 21,16,17,16,18,16,17,16,19,16,17,16,18,16,17,16 | ||
78 | .byte 23,16,17,16,18,16,17,16,19,16,17,16,18,16,17,16 | ||
79 | .byte 23,16,17,16,18,16,17,16,19,16,17,16,18,16,17,16 | ||
80 | .byte 21,16,17,16,18,16,17,16,19,16,17,16,18,16,17,16 | ||
81 | .byte 21,16,17,16,18,16,17,16,19,16,17,16,18,16,17,16 | ||
82 | .byte 22,16,17,16,18,16,17,16,19,16,17,16,18,16,17,16 | ||
83 | .byte 22,16,17,16,18,16,17,16,19,16,17,16,18,16,17,16 | ||
84 | .byte 21,16,17,16,18,16,17,16,19,16,17,16,18,16,17,16 | ||
85 | .byte 21,16,17,16,18,16,17,16,19,16,17,16,18,16,17,16 | ||
86 | #endif | ||
87 | irq_prio_l: .byte 0, 0, 1, 0, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3 | ||
88 | .byte 4, 0, 1, 0, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3 | ||
89 | .byte 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5 | ||
90 | .byte 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5 | ||
91 | .byte 6, 6, 6, 6, 6, 6, 6, 6, 3, 3, 3, 3, 3, 3, 3, 3 | ||
92 | .byte 6, 6, 6, 6, 6, 6, 6, 6, 3, 3, 3, 3, 3, 3, 3, 3 | ||
93 | .byte 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5 | ||
94 | .byte 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5 | ||
95 | .byte 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7 | ||
96 | .byte 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7 | ||
97 | .byte 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7 | ||
98 | .byte 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7 | ||
99 | .byte 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7 | ||
100 | .byte 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7 | ||
101 | .byte 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7 | ||
102 | .byte 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7 | ||
103 | #ifdef IOMD_IRQREQC | ||
104 | irq_prio_lc: .byte 24,24,25,24,26,26,26,26,27,27,27,27,27,27,27,27 | ||
105 | .byte 28,24,25,24,26,26,26,26,27,27,27,27,27,27,27,27 | ||
106 | .byte 29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29 | ||
107 | .byte 29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29 | ||
108 | .byte 30,30,30,30,30,30,30,30,27,27,27,27,27,27,27,27 | ||
109 | .byte 30,30,30,30,30,30,30,30,27,27,27,27,27,27,27,27 | ||
110 | .byte 29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29 | ||
111 | .byte 29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29 | ||
112 | .byte 31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31 | ||
113 | .byte 31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31 | ||
114 | .byte 31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31 | ||
115 | .byte 31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31 | ||
116 | .byte 31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31 | ||
117 | .byte 31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31 | ||
118 | .byte 31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31 | ||
119 | .byte 31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31 | ||
120 | #endif | ||
121 | #ifdef IOMD_IRQREQD | ||
122 | irq_prio_ld: .byte 40,40,41,40,42,42,42,42,43,43,43,43,43,43,43,43 | ||
123 | .byte 44,40,41,40,42,42,42,42,43,43,43,43,43,43,43,43 | ||
124 | .byte 45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45 | ||
125 | .byte 45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45 | ||
126 | .byte 46,46,46,46,46,46,46,46,43,43,43,43,43,43,43,43 | ||
127 | .byte 46,46,46,46,46,46,46,46,43,43,43,43,43,43,43,43 | ||
128 | .byte 45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45 | ||
129 | .byte 45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45 | ||
130 | .byte 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 | ||
131 | .byte 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 | ||
132 | .byte 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 | ||
133 | .byte 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 | ||
134 | .byte 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 | ||
135 | .byte 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 | ||
136 | .byte 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 | ||
137 | .byte 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 | ||
138 | #endif | ||
139 | |||