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	get_irqnr_and_base, irqnr, irqstat, base, tmp
15 		ldrb	\irqstat, [\base, #IOMD_IRQREQB]	@ get high priority first
16 		ldr	\tmp, =irq_prio_h
17 		teq	\irqstat, #0
18 #ifdef IOMD_BASE
19 		ldrbeq	\irqstat, [\base, #IOMD_DMAREQ]	@ get dma
20 		addeq	\tmp, \tmp, #256		@ irq_prio_h table size
21 		teqeq	\irqstat, #0
22 		bne	2406f
23 #endif
24 		ldrbeq	\irqstat, [\base, #IOMD_IRQREQA]	@ get low priority
25 		addeq	\tmp, \tmp, #256		@ irq_prio_d table size
26 		teqeq	\irqstat, #0
27 #ifdef IOMD_IRQREQC
28 		ldrbeq	\irqstat, [\base, #IOMD_IRQREQC]
29 		addeq	\tmp, \tmp, #256		@ irq_prio_l table size
30 		teqeq	\irqstat, #0
31 #endif
32 #ifdef IOMD_IRQREQD
33 		ldrbeq	\irqstat, [\base, #IOMD_IRQREQD]
34 		addeq	\tmp, \tmp, #256		@ irq_prio_lc table size
35 		teqeq	\irqstat, #0
36 #endif
37 2406:		ldrbne	\irqnr, [\tmp, \irqstat]	@ get IRQ number
38 		.endm
39 
40 /*
41  * Interrupt table (incorporates priority).  Please note that we
42  * rely on the order of these tables (see above code).
43  */
44 		.align	5
45 irq_prio_h:	.byte	 0, 8, 9, 8,10,10,10,10,11,11,11,11,10,10,10,10
46 		.byte	12, 8, 9, 8,10,10,10,10,11,11,11,11,10,10,10,10
47 		.byte	13,13,13,13,10,10,10,10,11,11,11,11,10,10,10,10
48 		.byte	13,13,13,13,10,10,10,10,11,11,11,11,10,10,10,10
49 		.byte	14,14,14,14,10,10,10,10,11,11,11,11,10,10,10,10
50 		.byte	14,14,14,14,10,10,10,10,11,11,11,11,10,10,10,10
51 		.byte	13,13,13,13,10,10,10,10,11,11,11,11,10,10,10,10
52 		.byte	13,13,13,13,10,10,10,10,11,11,11,11,10,10,10,10
53 		.byte	15,15,15,15,10,10,10,10,11,11,11,11,10,10,10,10
54 		.byte	15,15,15,15,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	15,15,15,15,10,10,10,10,11,11,11,11,10,10,10,10
58 		.byte	15,15,15,15,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 #ifdef IOMD_BASE
62 irq_prio_d:	.byte	 0,16,17,16,18,16,17,16,19,16,17,16,18,16,17,16
63 		.byte	20,16,17,16,18,16,17,16,19,16,17,16,18,16,17,16
64 		.byte	21,16,17,16,18,16,17,16,19,16,17,16,18,16,17,16
65 		.byte	21,16,17,16,18,16,17,16,19,16,17,16,18,16,17,16
66 		.byte	22,16,17,16,18,16,17,16,19,16,17,16,18,16,17,16
67 		.byte	22,16,17,16,18,16,17,16,19,16,17,16,18,16,17,16
68 		.byte	21,16,17,16,18,16,17,16,19,16,17,16,18,16,17,16
69 		.byte	21,16,17,16,18,16,17,16,19,16,17,16,18,16,17,16
70 		.byte	23,16,17,16,18,16,17,16,19,16,17,16,18,16,17,16
71 		.byte	23,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 #endif
79 irq_prio_l:	.byte	 0, 0, 1, 0, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3
80 		.byte	 4, 0, 1, 0, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3
81 		.byte	 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5
82 		.byte	 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5
83 		.byte	 6, 6, 6, 6, 6, 6, 6, 6, 3, 3, 3, 3, 3, 3, 3, 3
84 		.byte	 6, 6, 6, 6, 6, 6, 6, 6, 3, 3, 3, 3, 3, 3, 3, 3
85 		.byte	 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5
86 		.byte	 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5
87 		.byte	 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7
88 		.byte	 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7
89 		.byte	 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7
90 		.byte	 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7
91 		.byte	 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7
92 		.byte	 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7
93 		.byte	 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7
94 		.byte	 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7
95 #ifdef IOMD_IRQREQC
96 irq_prio_lc:	.byte	24,24,25,24,26,26,26,26,27,27,27,27,27,27,27,27
97 		.byte	28,24,25,24,26,26,26,26,27,27,27,27,27,27,27,27
98 		.byte	29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29
99 		.byte	29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29
100 		.byte	30,30,30,30,30,30,30,30,27,27,27,27,27,27,27,27
101 		.byte	30,30,30,30,30,30,30,30,27,27,27,27,27,27,27,27
102 		.byte	29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29
103 		.byte	29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29
104 		.byte	31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31
105 		.byte	31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31
106 		.byte	31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31
107 		.byte	31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31
108 		.byte	31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31
109 		.byte	31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31
110 		.byte	31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31
111 		.byte	31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31
112 #endif
113 #ifdef IOMD_IRQREQD
114 irq_prio_ld:	.byte	40,40,41,40,42,42,42,42,43,43,43,43,43,43,43,43
115 		.byte	44,40,41,40,42,42,42,42,43,43,43,43,43,43,43,43
116 		.byte	45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45
117 		.byte	45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45
118 		.byte	46,46,46,46,46,46,46,46,43,43,43,43,43,43,43,43
119 		.byte	46,46,46,46,46,46,46,46,43,43,43,43,43,43,43,43
120 		.byte	45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45
121 		.byte	45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45
122 		.byte	47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47
123 		.byte	47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47
124 		.byte	47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47
125 		.byte	47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47
126 		.byte	47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47
127 		.byte	47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47
128 		.byte	47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47
129 		.byte	47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47
130 #endif
131 
132