1/*
2 * Copyright 2017, Data61
3 * Commonwealth Scientific and Industrial Research Organisation (CSIRO)
4 * ABN 41 687 119 230.
5 *
6 * This software may be distributed and modified according to the terms of
7 * the BSD 2-Clause license. Note that NO WARRANTY is provided.
8 * See "LICENSE_BSD2.txt" for details.
9 *
10 * @TAG(DATA61_BSD)
11*/
12
13#pragma once
14
15#include <stdint.h>
16#include <stdbool.h>
17#include <utils/util.h>
18
19#define GPIO_PADDR_BASE    0x6000D000
20#define TK1_GPIO_PADDR         (GPIO_PADDR_BASE)
21#define TK1_GPIO_SIZE          (0x1000)
22
23enum gpio_pad_mode {
24    GPIO_MODE = 0,
25    SFIO_MODE
26};
27
28enum gpio_pin {
29    GPIO_PA0 = 0,    /* pin 0 */
30    GPIO_PA1,
31    GPIO_PA2,
32    GPIO_PA3,
33    GPIO_PA4,
34    GPIO_PA5,
35    GPIO_PA6,
36    GPIO_PA7,
37    GPIO_PB0 = 8,    /* pin 8 */
38    GPIO_PB1,
39    GPIO_PB2,
40    GPIO_PB3,
41    GPIO_PB4,
42    GPIO_PB5,
43    GPIO_PB6,
44    GPIO_PB7,
45    GPIO_PC0,    /* pin 16 */
46    GPIO_PC1,
47    GPIO_PC2,
48    GPIO_PC3,
49    GPIO_PC4,
50    GPIO_PC5,
51    GPIO_PC6,
52    GPIO_PC7,
53    GPIO_PD0,    /* pin 24 */
54    GPIO_PD1,
55    GPIO_PD2,
56    GPIO_PD3,
57    GPIO_PD4,
58    GPIO_PD5,
59    GPIO_PD6,
60    GPIO_PD7,
61    GPIO_PE0,    /* pin 32 */
62    GPIO_PE1,
63    GPIO_PE2,
64    GPIO_PE3,
65    GPIO_PE4,
66    GPIO_PE5,
67    GPIO_PE6,
68    GPIO_PE7,
69    GPIO_PF0,    /* pin 40 */
70    GPIO_PF1,
71    GPIO_PF2,
72    GPIO_PF3,
73    GPIO_PF4,
74    GPIO_PF5,
75    GPIO_PF6,
76    GPIO_PF7,
77    GPIO_PG0,    /* pin 48 */
78    GPIO_PG1,
79    GPIO_PG2,
80    GPIO_PG3,
81    GPIO_PG4,
82    GPIO_PG5,
83    GPIO_PG6,
84    GPIO_PG7,
85    GPIO_PH0,    /* pin 56 */
86    GPIO_PH1,
87    GPIO_PH2,
88    GPIO_PH3,
89    GPIO_PH4,
90    GPIO_PH5,
91    GPIO_PH6,
92    GPIO_PH7,
93    GPIO_PI0,    /* pin 64 */
94    GPIO_PI1,
95    GPIO_PI2,
96    GPIO_PI3,
97    GPIO_PI4,
98    GPIO_PI5,
99    GPIO_PI6,
100    GPIO_PI7,
101    GPIO_PJ0,    /* pin 72 */
102    GPIO_PJ1,
103    GPIO_PJ2,
104    GPIO_PJ3,
105    GPIO_PJ4,
106    GPIO_PJ5,
107    GPIO_PJ6,
108    GPIO_PJ7,
109    GPIO_PK0,    /* pin 80 */
110    GPIO_PK1,
111    GPIO_PK2,
112    GPIO_PK3,
113    GPIO_PK4,
114    GPIO_PK5,
115    GPIO_PK6,
116    GPIO_PK7,
117    GPIO_PL0,    /* pin 88 */
118    GPIO_PL1,
119    GPIO_PL2,
120    GPIO_PL3,
121    GPIO_PL4,
122    GPIO_PL5,
123    GPIO_PL6,
124    GPIO_PL7,
125    GPIO_PM0,    /* pin 96 */
126    GPIO_PM1,
127    GPIO_PM2,
128    GPIO_PM3,
129    GPIO_PM4,
130    GPIO_PM5,
131    GPIO_PM6,
132    GPIO_PM7,
133    GPIO_PN0,    /* pin 104 */
134    GPIO_PN1,
135    GPIO_PN2,
136    GPIO_PN3,
137    GPIO_PN4,
138    GPIO_PN5,
139    GPIO_PN6,
140    GPIO_PN7,
141    GPIO_PO0,    /* pin 112 */
142    GPIO_PO1,
143    GPIO_PO2,
144    GPIO_PO3,
145    GPIO_PO4,
146    GPIO_PO5,
147    GPIO_PO6,
148    GPIO_PO7,
149    GPIO_PP0,    /* pin 120 */
150    GPIO_PP1,
151    GPIO_PP2,
152    GPIO_PP3,
153    GPIO_PP4,
154    GPIO_PP5,
155    GPIO_PP6,
156    GPIO_PP7,
157    GPIO_PQ0,    /* pin 128 */
158    GPIO_PQ1,
159    GPIO_PQ2,
160    GPIO_PQ3,
161    GPIO_PQ4,
162    GPIO_PQ5,
163    GPIO_PQ6,
164    GPIO_PQ7,
165    GPIO_PR0,    /* pin 136 */
166    GPIO_PR1,
167    GPIO_PR2,
168    GPIO_PR3,
169    GPIO_PR4,
170    GPIO_PR5,
171    GPIO_PR6,
172    GPIO_PR7,
173    GPIO_PS0,    /* pin 144 */
174    GPIO_PS1,
175    GPIO_PS2,
176    GPIO_PS3,
177    GPIO_PS4,
178    GPIO_PS5,
179    GPIO_PS6,
180    GPIO_PS7,
181    GPIO_PT0,    /* pin 152 */
182    GPIO_PT1,
183    GPIO_PT2,
184    GPIO_PT3,
185    GPIO_PT4,
186    GPIO_PT5,
187    GPIO_PT6,
188    GPIO_PT7,
189    GPIO_PU0,    /* pin 160 */
190    GPIO_PU1,
191    GPIO_PU2,
192    GPIO_PU3,
193    GPIO_PU4,
194    GPIO_PU5,
195    GPIO_PU6,
196    GPIO_PU7,
197    GPIO_PV0,    /* pin 168 */
198    GPIO_PV1,
199    GPIO_PV2,
200    GPIO_PV3,
201    GPIO_PV4,
202    GPIO_PV5,
203    GPIO_PV6,
204    GPIO_PV7,
205    GPIO_PW0,    /* pin 176 */
206    GPIO_PW1,
207    GPIO_PW2,
208    GPIO_PW3,
209    GPIO_PW4,
210    GPIO_PW5,
211    GPIO_PW6,
212    GPIO_PW7,
213    GPIO_PX0,    /* pin 184 */
214    GPIO_PX1,
215    GPIO_PX2,
216    GPIO_PX3,
217    GPIO_PX4,
218    GPIO_PX5,
219    GPIO_PX6,
220    GPIO_PX7,
221    GPIO_PY0,    /* pin 192 */
222    GPIO_PY1,
223    GPIO_PY2,
224    GPIO_PY3,
225    GPIO_PY4,
226    GPIO_PY5,
227    GPIO_PY6,
228    GPIO_PY7,
229    GPIO_PZ0,    /* pin 200 */
230    GPIO_PZ1,
231    GPIO_PZ2,
232    GPIO_PZ3,
233    GPIO_PZ4,
234    GPIO_PZ5,
235    GPIO_PZ6,
236    GPIO_PZ7,
237    GPIO_PAA0,    /* pin 208 */
238    GPIO_PAA1,
239    GPIO_PAA2,
240    GPIO_PAA3,
241    GPIO_PAA4,
242    GPIO_PAA5,
243    GPIO_PAA6,
244    GPIO_PAA7,
245    GPIO_PBB0,    /* pin 216 */
246    GPIO_PBB1,
247    GPIO_PBB2,
248    GPIO_PBB3,
249    GPIO_PBB4,
250    GPIO_PBB5,
251    GPIO_PBB6,
252    GPIO_PBB7,
253    GPIO_PCC0,    /* pin 224 */
254    GPIO_PCC1,
255    GPIO_PCC2,
256    GPIO_PCC3,
257    GPIO_PCC4,
258    GPIO_PCC5,
259    GPIO_PCC6,
260    GPIO_PCC7,
261    GPIO_PDD0,    /* pin 232 */
262    GPIO_PDD1,
263    GPIO_PDD2,
264    GPIO_PDD3,
265    GPIO_PDD4,
266    GPIO_PDD5,
267    GPIO_PDD6,
268    GPIO_PDD7,
269    GPIO_PEE0,    /* pin 240 */
270    GPIO_PEE1,
271    GPIO_PEE2,
272    GPIO_PEE3,
273    GPIO_PEE4,
274    GPIO_PEE5,
275    GPIO_PEE6,
276    GPIO_PEE7,
277    GPIO_PFF0,    /* pin 248 */
278    GPIO_PFF1,
279    GPIO_PFF2,
280    GPIO_PFF3,
281    GPIO_PFF4,
282    GPIO_PFF5,
283    GPIO_PFF6,
284    GPIO_PFF7,    /* pin 255 */
285    GPIOPORT_NONE,
286};
287
288#define MAX_GPIO_ID GPIO_PFF7
289
290/** Statically initializes a mux_sys for the TK1 SoC.
291 *
292 * Usually a GPIO driver would depend on a mux driver, but on the TK1, it is the
293 * other way around: curiously, on the TK1, the mux driver depends on the GPIO
294 * driver because the GPIO controller sets the pin mode (SFIO vs MPIO mode),
295 * and the GPIO controller also has the "lock" and "enable" bits for the pins.
296 */
297int gpio_init(volatile void *vaddr, gpio_sys_t *gpio_sys);
298