summaryrefslogtreecommitdiff
path: root/arch/arm/plat-s5pc1xx/include/plat/irqs.h
blob: 409c804315e870a5b2b324ca5790297188803eab (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
/* linux/arch/arm/plat-s5pc1xx/include/plat/irqs.h
 *
 * Copyright 2009 Samsung Electronics Co.
 *      Byungho Min <bhmin@samsung.com>
 *
 * S5PC1XX - Common IRQ support
 *
 * Based on plat-s3c64xx/include/plat/irqs.h
 */

#ifndef __ASM_PLAT_S5PC1XX_IRQS_H
#define __ASM_PLAT_S5PC1XX_IRQS_H __FILE__

/* we keep the first set of CPU IRQs out of the range of
 * the ISA space, so that the PC104 has them to itself
 * and we don't end up having to do horrible things to the
 * standard ISA drivers....
 *
 * note, since we're using the VICs, our start must be a
 * mulitple of 32 to allow the common code to work
 */

#define S3C_IRQ_OFFSET		(32)

#define S3C_IRQ(x)		((x) + S3C_IRQ_OFFSET)

#define S3C_VIC0_BASE		S3C_IRQ(0)
#define S3C_VIC1_BASE		S3C_IRQ(32)
#define S3C_VIC2_BASE		S3C_IRQ(64)

/* UART interrupts, each UART has 4 intterupts per channel so
 * use the space between the ISA and S3C main interrupts. Note, these
 * are not in the same order as the S3C24XX series! */

#define IRQ_S3CUART_BASE0	(16)
#define IRQ_S3CUART_BASE1	(20)
#define IRQ_S3CUART_BASE2	(24)
#define IRQ_S3CUART_BASE3	(28)

#define UART_IRQ_RXD		(0)
#define UART_IRQ_ERR		(1)
#define UART_IRQ_TXD		(2)
#define UART_IRQ_MODEM		(3)

#define IRQ_S3CUART_RX0		(IRQ_S3CUART_BASE0 + UART_IRQ_RXD)
#define IRQ_S3CUART_TX0		(IRQ_S3CUART_BASE0 + UART_IRQ_TXD)
#define IRQ_S3CUART_ERR0	(IRQ_S3CUART_BASE0 + UART_IRQ_ERR)

#define IRQ_S3CUART_RX1		(IRQ_S3CUART_BASE1 + UART_IRQ_RXD)
#define IRQ_S3CUART_TX1		(IRQ_S3CUART_BASE1 + UART_IRQ_TXD)
#define IRQ_S3CUART_ERR1	(IRQ_S3CUART_BASE1 + UART_IRQ_ERR)

#define IRQ_S3CUART_RX2		(IRQ_S3CUART_BASE2 + UART_IRQ_RXD)
#define IRQ_S3CUART_TX2		(IRQ_S3CUART_BASE2 + UART_IRQ_TXD)
#define IRQ_S3CUART_ERR2	(IRQ_S3CUART_BASE2 + UART_IRQ_ERR)

#define IRQ_S3CUART_RX3		(IRQ_S3CUART_BASE3 + UART_IRQ_RXD)
#define IRQ_S3CUART_TX3		(IRQ_S3CUART_BASE3 + UART_IRQ_TXD)
#define IRQ_S3CUART_ERR3	(IRQ_S3CUART_BASE3 + UART_IRQ_ERR)

/* VIC based IRQs */

#define S5PC1XX_IRQ_VIC0(x)	(S3C_VIC0_BASE + (x))
#define S5PC1XX_IRQ_VIC1(x)	(S3C_VIC1_BASE + (x))
#define S5PC1XX_IRQ_VIC2(x)	(S3C_VIC2_BASE + (x))

/*
 * VIC0: system, DMA, timer
 */
#define IRQ_EINT0		S5PC1XX_IRQ_VIC0(0)
#define IRQ_EINT1		S5PC1XX_IRQ_VIC0(1)
#define IRQ_EINT2		S5PC1XX_IRQ_VIC0(2)
#define IRQ_EINT3		S5PC1XX_IRQ_VIC0(3)
#define IRQ_EINT4		S5PC1XX_IRQ_VIC0(4)
#define IRQ_EINT5		S5PC1XX_IRQ_VIC0(5)
#define IRQ_EINT6		S5PC1XX_IRQ_VIC0(6)
#define IRQ_EINT7		S5PC1XX_IRQ_VIC0(7)
#define IRQ_EINT8		S5PC1XX_IRQ_VIC0(8)
#define IRQ_EINT9		S5PC1XX_IRQ_VIC0(9)
#define IRQ_EINT10		S5PC1XX_IRQ_VIC0(10)
#define IRQ_EINT11		S5PC1XX_IRQ_VIC0(11)
#define IRQ_EINT12		S5PC1XX_IRQ_VIC0(12)
#define IRQ_EINT13		S5PC1XX_IRQ_VIC0(13)
#define IRQ_EINT14		S5PC1XX_IRQ_VIC0(14)
#define IRQ_EINT15		S5PC1XX_IRQ_VIC0(15)
#define IRQ_EINT16_31		S5PC1XX_IRQ_VIC0(16)
#define IRQ_BATF		S5PC1XX_IRQ_VIC0(17)
#define IRQ_MDMA		S5PC1XX_IRQ_VIC0(18)
#define IRQ_PDMA0		S5PC1XX_IRQ_VIC0(19)
#define IRQ_PDMA1		S5PC1XX_IRQ_VIC0(20)
#define IRQ_TIMER0_VIC		S5PC1XX_IRQ_VIC0(21)
#define IRQ_TIMER1_VIC		S5PC1XX_IRQ_VIC0(22)
#define IRQ_TIMER2_VIC		S5PC1XX_IRQ_VIC0(23)
#define IRQ_TIMER3_VIC		S5PC1XX_IRQ_VIC0(24)
#define IRQ_TIMER4_VIC		S5PC1XX_IRQ_VIC0(25)
#define IRQ_SYSTIMER		S5PC1XX_IRQ_VIC0(26)
#define IRQ_WDT			S5PC1XX_IRQ_VIC0(27)
#define IRQ_RTC_ALARM		S5PC1XX_IRQ_VIC0(28)
#define IRQ_RTC_TIC		S5PC1XX_IRQ_VIC0(29)
#define IRQ_GPIOINT		S5PC1XX_IRQ_VIC0(30)

/*
 * VIC1: ARM, power, memory, connectivity
 */
#define IRQ_CORTEX0		S5PC1XX_IRQ_VIC1(0)
#define IRQ_CORTEX1		S5PC1XX_IRQ_VIC1(1)
#define IRQ_CORTEX2		S5PC1XX_IRQ_VIC1(2)
#define IRQ_CORTEX3		S5PC1XX_IRQ_VIC1(3)
#define IRQ_CORTEX4		S5PC1XX_IRQ_VIC1(4)
#define IRQ_IEMAPC		S5PC1XX_IRQ_VIC1(5)
#define IRQ_IEMIEC		S5PC1XX_IRQ_VIC1(6)
#define IRQ_ONENAND		S5PC1XX_IRQ_VIC1(7)
#define IRQ_NFC			S5PC1XX_IRQ_VIC1(8)
#define IRQ_CFC			S5PC1XX_IRQ_VIC1(9)
#define IRQ_UART0		S5PC1XX_IRQ_VIC1(10)
#define IRQ_UART1		S5PC1XX_IRQ_VIC1(11)
#define IRQ_UART2		S5PC1XX_IRQ_VIC1(12)
#define IRQ_UART3		S5PC1XX_IRQ_VIC1(13)
#define IRQ_IIC			S5PC1XX_IRQ_VIC1(14)
#define IRQ_SPI0		S5PC1XX_IRQ_VIC1(15)
#define IRQ_SPI1		S5PC1XX_IRQ_VIC1(16)
#define IRQ_SPI2		S5PC1XX_IRQ_VIC1(17)
#define IRQ_IRDA		S5PC1XX_IRQ_VIC1(18)
#define IRQ_CAN0		S5PC1XX_IRQ_VIC1(19)
#define IRQ_CAN1		S5PC1XX_IRQ_VIC1(20)
#define IRQ_HSIRX		S5PC1XX_IRQ_VIC1(21)
#define IRQ_HSITX		S5PC1XX_IRQ_VIC1(22)
#define IRQ_UHOST		S5PC1XX_IRQ_VIC1(23)
#define IRQ_OTG			S5PC1XX_IRQ_VIC1(24)
#define IRQ_MSM			S5PC1XX_IRQ_VIC1(25)
#define IRQ_HSMMC0		S5PC1XX_IRQ_VIC1(26)
#define IRQ_HSMMC1		S5PC1XX_IRQ_VIC1(27)
#define IRQ_HSMMC2		S5PC1XX_IRQ_VIC1(28)
#define IRQ_MIPICSI		S5PC1XX_IRQ_VIC1(29)
#define IRQ_MIPIDSI		S5PC1XX_IRQ_VIC1(30)

/*
 * VIC2: multimedia, audio, security
 */
#define IRQ_LCD0		S5PC1XX_IRQ_VIC2(0)
#define IRQ_LCD1		S5PC1XX_IRQ_VIC2(1)
#define IRQ_LCD2		S5PC1XX_IRQ_VIC2(2)
#define IRQ_LCD3		S5PC1XX_IRQ_VIC2(3)
#define IRQ_ROTATOR		S5PC1XX_IRQ_VIC2(4)
#define IRQ_FIMC0		S5PC1XX_IRQ_VIC2(5)
#define IRQ_FIMC1		S5PC1XX_IRQ_VIC2(6)
#define IRQ_FIMC2		S5PC1XX_IRQ_VIC2(7)
#define IRQ_JPEG		S5PC1XX_IRQ_VIC2(8)
#define IRQ_2D			S5PC1XX_IRQ_VIC2(9)
#define IRQ_3D			S5PC1XX_IRQ_VIC2(10)
#define IRQ_MIXER		S5PC1XX_IRQ_VIC2(11)
#define IRQ_HDMI		S5PC1XX_IRQ_VIC2(12)
#define IRQ_IIC1		S5PC1XX_IRQ_VIC2(13)
#define IRQ_MFC			S5PC1XX_IRQ_VIC2(14)
#define IRQ_TVENC		S5PC1XX_IRQ_VIC2(15)
#define IRQ_I2S0		S5PC1XX_IRQ_VIC2(16)
#define IRQ_I2S1		S5PC1XX_IRQ_VIC2(17)
#define IRQ_I2S2		S5PC1XX_IRQ_VIC2(18)
#define IRQ_AC97		S5PC1XX_IRQ_VIC2(19)
#define IRQ_PCM0		S5PC1XX_IRQ_VIC2(20)
#define IRQ_PCM1		S5PC1XX_IRQ_VIC2(21)
#define IRQ_SPDIF		S5PC1XX_IRQ_VIC2(22)
#define IRQ_ADC			S5PC1XX_IRQ_VIC2(23)
#define IRQ_PENDN		S5PC1XX_IRQ_VIC2(24)
#define IRQ_TC			IRQ_PENDN
#define IRQ_KEYPAD		S5PC1XX_IRQ_VIC2(25)
#define IRQ_CG			S5PC1XX_IRQ_VIC2(26)
#define IRQ_SEC			S5PC1XX_IRQ_VIC2(27)
#define IRQ_SECRX		S5PC1XX_IRQ_VIC2(28)
#define IRQ_SECTX		S5PC1XX_IRQ_VIC2(29)
#define IRQ_SDMIRQ		S5PC1XX_IRQ_VIC2(30)
#define IRQ_SDMFIQ		S5PC1XX_IRQ_VIC2(31)

#define IRQ_TIMER(x)		(IRQ_SDMFIQ + 1 + (x))
#define IRQ_TIMER0		IRQ_TIMER(0)
#define IRQ_TIMER1		IRQ_TIMER(1)
#define IRQ_TIMER2		IRQ_TIMER(2)
#define IRQ_TIMER3		IRQ_TIMER(3)
#define IRQ_TIMER4		IRQ_TIMER(4)

/* External interrupt */
#define S3C_IRQ_EINT_BASE	(IRQ_SDMFIQ + 6)

#define S3C_EINT(x)		(S3C_IRQ_EINT_BASE + (x - 16))
#define IRQ_EINT(x)		(x < 16 ? IRQ_EINT0 + x : S3C_EINT(x))
#define IRQ_EINT_BIT(x)		(x < IRQ_EINT16_31 ? x - IRQ_EINT0 : x - S3C_EINT(0))

/* GPIO interrupt */
#define S3C_IRQ_GPIO_BASE	(IRQ_EINT(31) + 1)
#define S3C_IRQ_GPIO(x)		(S3C_IRQ_GPIO_BASE + (x))

/*
 * Until MP04 Groups -> 40 (exactly 39) Groups * 8 ~= 320 GPIOs
 */
#define NR_IRQS			(S3C_IRQ_GPIO(320) + 1)

#endif /* __ASM_PLAT_S5PC1XX_IRQS_H */