]>
Commit | Line | Data |
---|---|---|
858bd095 SG |
1 | /* |
2 | * Copyright (c) 2011 The Chromium OS Authors. | |
858bd095 | 3 | * |
1a459660 | 4 | * SPDX-License-Identifier: GPL-2.0+ |
858bd095 SG |
5 | */ |
6 | ||
00a2749d | 7 | /* Tegra20 pin multiplexing functions */ |
858bd095 | 8 | |
150c2493 | 9 | #include <common.h> |
858bd095 | 10 | #include <asm/io.h> |
858bd095 | 11 | #include <asm/arch/pinmux.h> |
858bd095 | 12 | |
20e18e05 SG |
13 | /* |
14 | * This defines the order of the pin mux control bits in the registers. For | |
15 | * some reason there is no correspendence between the tristate, pin mux and | |
16 | * pullup/pulldown registers. | |
17 | */ | |
18 | enum pmux_ctlid { | |
19 | /* 0: APB_MISC_PP_PIN_MUX_CTL_A_0 */ | |
20 | MUXCTL_UAA, | |
21 | MUXCTL_UAB, | |
22 | MUXCTL_UAC, | |
23 | MUXCTL_UAD, | |
24 | MUXCTL_UDA, | |
25 | MUXCTL_RESERVED5, | |
26 | MUXCTL_ATE, | |
27 | MUXCTL_RM, | |
28 | ||
29 | MUXCTL_ATB, | |
30 | MUXCTL_RESERVED9, | |
31 | MUXCTL_ATD, | |
32 | MUXCTL_ATC, | |
33 | MUXCTL_ATA, | |
34 | MUXCTL_KBCF, | |
35 | MUXCTL_KBCE, | |
36 | MUXCTL_SDMMC1, | |
37 | ||
38 | /* 16: APB_MISC_PP_PIN_MUX_CTL_B_0 */ | |
39 | MUXCTL_GMA, | |
40 | MUXCTL_GMC, | |
41 | MUXCTL_HDINT, | |
42 | MUXCTL_SLXA, | |
43 | MUXCTL_OWC, | |
44 | MUXCTL_SLXC, | |
45 | MUXCTL_SLXD, | |
46 | MUXCTL_SLXK, | |
47 | ||
48 | MUXCTL_UCA, | |
49 | MUXCTL_UCB, | |
50 | MUXCTL_DTA, | |
51 | MUXCTL_DTB, | |
52 | MUXCTL_RESERVED28, | |
53 | MUXCTL_DTC, | |
54 | MUXCTL_DTD, | |
55 | MUXCTL_DTE, | |
56 | ||
57 | /* 32: APB_MISC_PP_PIN_MUX_CTL_C_0 */ | |
58 | MUXCTL_DDC, | |
59 | MUXCTL_CDEV1, | |
60 | MUXCTL_CDEV2, | |
61 | MUXCTL_CSUS, | |
62 | MUXCTL_I2CP, | |
63 | MUXCTL_KBCA, | |
64 | MUXCTL_KBCB, | |
65 | MUXCTL_KBCC, | |
66 | ||
67 | MUXCTL_IRTX, | |
68 | MUXCTL_IRRX, | |
69 | MUXCTL_DAP1, | |
70 | MUXCTL_DAP2, | |
71 | MUXCTL_DAP3, | |
72 | MUXCTL_DAP4, | |
73 | MUXCTL_GMB, | |
74 | MUXCTL_GMD, | |
75 | ||
76 | /* 48: APB_MISC_PP_PIN_MUX_CTL_D_0 */ | |
77 | MUXCTL_GME, | |
78 | MUXCTL_GPV, | |
79 | MUXCTL_GPU, | |
80 | MUXCTL_SPDO, | |
81 | MUXCTL_SPDI, | |
82 | MUXCTL_SDB, | |
83 | MUXCTL_SDC, | |
84 | MUXCTL_SDD, | |
85 | ||
86 | MUXCTL_SPIH, | |
87 | MUXCTL_SPIG, | |
88 | MUXCTL_SPIF, | |
89 | MUXCTL_SPIE, | |
90 | MUXCTL_SPID, | |
91 | MUXCTL_SPIC, | |
92 | MUXCTL_SPIB, | |
93 | MUXCTL_SPIA, | |
94 | ||
95 | /* 64: APB_MISC_PP_PIN_MUX_CTL_E_0 */ | |
96 | MUXCTL_LPW0, | |
97 | MUXCTL_LPW1, | |
98 | MUXCTL_LPW2, | |
99 | MUXCTL_LSDI, | |
100 | MUXCTL_LSDA, | |
101 | MUXCTL_LSPI, | |
102 | MUXCTL_LCSN, | |
103 | MUXCTL_LDC, | |
104 | ||
105 | MUXCTL_LSCK, | |
106 | MUXCTL_LSC0, | |
107 | MUXCTL_LSC1, | |
108 | MUXCTL_LHS, | |
109 | MUXCTL_LVS, | |
110 | MUXCTL_LM0, | |
111 | MUXCTL_LM1, | |
112 | MUXCTL_LVP0, | |
113 | ||
114 | /* 80: APB_MISC_PP_PIN_MUX_CTL_F_0 */ | |
115 | MUXCTL_LD0, | |
116 | MUXCTL_LD1, | |
117 | MUXCTL_LD2, | |
118 | MUXCTL_LD3, | |
119 | MUXCTL_LD4, | |
120 | MUXCTL_LD5, | |
121 | MUXCTL_LD6, | |
122 | MUXCTL_LD7, | |
123 | ||
124 | MUXCTL_LD8, | |
125 | MUXCTL_LD9, | |
126 | MUXCTL_LD10, | |
127 | MUXCTL_LD11, | |
128 | MUXCTL_LD12, | |
129 | MUXCTL_LD13, | |
130 | MUXCTL_LD14, | |
131 | MUXCTL_LD15, | |
132 | ||
133 | /* 96: APB_MISC_PP_PIN_MUX_CTL_G_0 */ | |
134 | MUXCTL_LD16, | |
135 | MUXCTL_LD17, | |
136 | MUXCTL_LHP1, | |
137 | MUXCTL_LHP2, | |
138 | MUXCTL_LVP1, | |
139 | MUXCTL_LHP0, | |
140 | MUXCTL_RESERVED102, | |
141 | MUXCTL_LPP, | |
142 | ||
143 | MUXCTL_LDI, | |
144 | MUXCTL_PMC, | |
145 | MUXCTL_CRTP, | |
146 | MUXCTL_PTA, | |
147 | MUXCTL_RESERVED108, | |
148 | MUXCTL_KBCD, | |
149 | MUXCTL_GPU7, | |
150 | MUXCTL_DTF, | |
151 | ||
152 | MUXCTL_NONE = -1, | |
153 | }; | |
154 | ||
155 | /* | |
156 | * And this defines the order of the pullup/pulldown controls which are again | |
157 | * in a different order | |
158 | */ | |
159 | enum pmux_pullid { | |
160 | /* 0: APB_MISC_PP_PULLUPDOWN_REG_A_0 */ | |
161 | PUCTL_ATA, | |
162 | PUCTL_ATB, | |
163 | PUCTL_ATC, | |
164 | PUCTL_ATD, | |
165 | PUCTL_ATE, | |
166 | PUCTL_DAP1, | |
167 | PUCTL_DAP2, | |
168 | PUCTL_DAP3, | |
169 | ||
170 | PUCTL_DAP4, | |
171 | PUCTL_DTA, | |
172 | PUCTL_DTB, | |
173 | PUCTL_DTC, | |
174 | PUCTL_DTD, | |
175 | PUCTL_DTE, | |
176 | PUCTL_DTF, | |
177 | PUCTL_GPV, | |
178 | ||
179 | /* 16: APB_MISC_PP_PULLUPDOWN_REG_B_0 */ | |
180 | PUCTL_RM, | |
181 | PUCTL_I2CP, | |
182 | PUCTL_PTA, | |
183 | PUCTL_GPU7, | |
184 | PUCTL_KBCA, | |
185 | PUCTL_KBCB, | |
186 | PUCTL_KBCC, | |
187 | PUCTL_KBCD, | |
188 | ||
189 | PUCTL_SPDI, | |
190 | PUCTL_SPDO, | |
191 | PUCTL_GPSLXAU, | |
192 | PUCTL_CRTP, | |
193 | PUCTL_SLXC, | |
194 | PUCTL_SLXD, | |
195 | PUCTL_SLXK, | |
196 | ||
197 | /* 32: APB_MISC_PP_PULLUPDOWN_REG_C_0 */ | |
198 | PUCTL_CDEV1, | |
199 | PUCTL_CDEV2, | |
200 | PUCTL_SPIA, | |
201 | PUCTL_SPIB, | |
202 | PUCTL_SPIC, | |
203 | PUCTL_SPID, | |
204 | PUCTL_SPIE, | |
205 | PUCTL_SPIF, | |
206 | ||
207 | PUCTL_SPIG, | |
208 | PUCTL_SPIH, | |
209 | PUCTL_IRTX, | |
210 | PUCTL_IRRX, | |
211 | PUCTL_GME, | |
212 | PUCTL_RESERVED45, | |
213 | PUCTL_XM2D, | |
214 | PUCTL_XM2C, | |
215 | ||
216 | /* 48: APB_MISC_PP_PULLUPDOWN_REG_D_0 */ | |
217 | PUCTL_UAA, | |
218 | PUCTL_UAB, | |
219 | PUCTL_UAC, | |
220 | PUCTL_UAD, | |
221 | PUCTL_UCA, | |
222 | PUCTL_UCB, | |
223 | PUCTL_LD17, | |
224 | PUCTL_LD19_18, | |
225 | ||
226 | PUCTL_LD21_20, | |
227 | PUCTL_LD23_22, | |
228 | PUCTL_LS, | |
229 | PUCTL_LC, | |
230 | PUCTL_CSUS, | |
231 | PUCTL_DDRC, | |
232 | PUCTL_SDC, | |
233 | PUCTL_SDD, | |
234 | ||
235 | /* 64: APB_MISC_PP_PULLUPDOWN_REG_E_0 */ | |
236 | PUCTL_KBCF, | |
237 | PUCTL_KBCE, | |
238 | PUCTL_PMCA, | |
239 | PUCTL_PMCB, | |
240 | PUCTL_PMCC, | |
241 | PUCTL_PMCD, | |
242 | PUCTL_PMCE, | |
243 | PUCTL_CK32, | |
244 | ||
245 | PUCTL_UDA, | |
246 | PUCTL_SDMMC1, | |
247 | PUCTL_GMA, | |
248 | PUCTL_GMB, | |
249 | PUCTL_GMC, | |
250 | PUCTL_GMD, | |
251 | PUCTL_DDC, | |
252 | PUCTL_OWC, | |
253 | ||
254 | PUCTL_NONE = -1 | |
255 | }; | |
256 | ||
20e18e05 | 257 | /* Convenient macro for defining pin group properties */ |
70ad375e | 258 | #define PINALL(pingrp, f0, f1, f2, f3, mux, pupd) \ |
20e18e05 | 259 | { \ |
20e18e05 | 260 | .funcs = { \ |
70ad375e SW |
261 | PMUX_FUNC_ ## f0, \ |
262 | PMUX_FUNC_ ## f1, \ | |
263 | PMUX_FUNC_ ## f2, \ | |
264 | PMUX_FUNC_ ## f3, \ | |
20e18e05 | 265 | }, \ |
20e18e05 SG |
266 | .ctl_id = mux, \ |
267 | .pull_id = pupd \ | |
268 | } | |
269 | ||
270 | /* A normal pin group where the mux name and pull-up name match */ | |
70ad375e SW |
271 | #define PIN(pingrp, f0, f1, f2, f3) \ |
272 | PINALL(pingrp, f0, f1, f2, f3, MUXCTL_##pingrp, PUCTL_##pingrp) | |
20e18e05 SG |
273 | |
274 | /* A pin group where the pull-up name doesn't have a 1-1 mapping */ | |
70ad375e SW |
275 | #define PINP(pingrp, f0, f1, f2, f3, pupd) \ |
276 | PINALL(pingrp, f0, f1, f2, f3, MUXCTL_##pingrp, PUCTL_##pupd) | |
20e18e05 SG |
277 | |
278 | /* A pin group number which is not used */ | |
279 | #define PIN_RESERVED \ | |
70ad375e | 280 | PIN(NONE, RSVD1, RSVD2, RSVD3, RSVD4) |
6ac1e542 | 281 | |
70ad375e SW |
282 | #define DRVGRP(drvgrp) \ |
283 | PINALL(drvgrp, RSVD1, RSVD2, RSVD3, RSVD4, MUXCTL_NONE, PUCTL_NONE) | |
20e18e05 | 284 | |
dfb42fc9 | 285 | static const struct pmux_pingrp_desc tegra20_pingroups[] = { |
70ad375e SW |
286 | PIN(ATA, IDE, NAND, GMI, RSVD4), |
287 | PIN(ATB, IDE, NAND, GMI, SDIO4), | |
288 | PIN(ATC, IDE, NAND, GMI, SDIO4), | |
289 | PIN(ATD, IDE, NAND, GMI, SDIO4), | |
290 | PIN(CDEV1, OSC, PLLA_OUT, PLLM_OUT1, AUDIO_SYNC), | |
291 | PIN(CDEV2, OSC, AHB_CLK, APB_CLK, PLLP_OUT4), | |
292 | PIN(CSUS, PLLC_OUT1, PLLP_OUT2, PLLP_OUT3, VI_SENSOR_CLK), | |
293 | PIN(DAP1, DAP1, RSVD2, GMI, SDIO2), | |
294 | ||
295 | PIN(DAP2, DAP2, TWC, RSVD3, GMI), | |
296 | PIN(DAP3, DAP3, RSVD2, RSVD3, RSVD4), | |
297 | PIN(DAP4, DAP4, RSVD2, GMI, RSVD4), | |
298 | PIN(DTA, RSVD1, SDIO2, VI, RSVD4), | |
299 | PIN(DTB, RSVD1, RSVD2, VI, SPI1), | |
300 | PIN(DTC, RSVD1, RSVD2, VI, RSVD4), | |
301 | PIN(DTD, RSVD1, SDIO2, VI, RSVD4), | |
302 | PIN(DTE, RSVD1, RSVD2, VI, SPI1), | |
303 | ||
304 | PINP(GPU, PWM, UARTA, GMI, RSVD4, GPSLXAU), | |
305 | PIN(GPV, PCIE, RSVD2, RSVD3, RSVD4), | |
306 | PIN(I2CP, I2C, RSVD2, RSVD3, RSVD4), | |
307 | PIN(IRTX, UARTA, UARTB, GMI, SPI4), | |
308 | PIN(IRRX, UARTA, UARTB, GMI, SPI4), | |
309 | PIN(KBCB, KBC, NAND, SDIO2, MIO), | |
310 | PIN(KBCA, KBC, NAND, SDIO2, EMC_TEST0_DLL), | |
311 | PINP(PMC, PWR_ON, PWR_INTR, RSVD3, RSVD4, NONE), | |
312 | ||
313 | PIN(PTA, I2C2, HDMI, GMI, RSVD4), | |
314 | PIN(RM, I2C, RSVD2, RSVD3, RSVD4), | |
315 | PIN(KBCE, KBC, NAND, OWR, RSVD4), | |
316 | PIN(KBCF, KBC, NAND, TRACE, MIO), | |
317 | PIN(GMA, UARTE, SPI3, GMI, SDIO4), | |
318 | PIN(GMC, UARTD, SPI4, GMI, SFLASH), | |
319 | PIN(SDMMC1, SDIO1, RSVD2, UARTE, UARTA), | |
320 | PIN(OWC, OWR, RSVD2, RSVD3, RSVD4), | |
321 | ||
322 | PIN(GME, RSVD1, DAP5, GMI, SDIO4), | |
323 | PIN(SDC, PWM, TWC, SDIO3, SPI3), | |
324 | PIN(SDD, UARTA, PWM, SDIO3, SPI3), | |
20e18e05 | 325 | PIN_RESERVED, |
70ad375e SW |
326 | PINP(SLXA, PCIE, SPI4, SDIO3, SPI2, CRTP), |
327 | PIN(SLXC, SPDIF, SPI4, SDIO3, SPI2), | |
328 | PIN(SLXD, SPDIF, SPI4, SDIO3, SPI2), | |
329 | PIN(SLXK, PCIE, SPI4, SDIO3, SPI2), | |
330 | ||
331 | PIN(SPDI, SPDIF, RSVD2, I2C, SDIO2), | |
332 | PIN(SPDO, SPDIF, RSVD2, I2C, SDIO2), | |
333 | PIN(SPIA, SPI1, SPI2, SPI3, GMI), | |
334 | PIN(SPIB, SPI1, SPI2, SPI3, GMI), | |
335 | PIN(SPIC, SPI1, SPI2, SPI3, GMI), | |
336 | PIN(SPID, SPI2, SPI1, SPI2_ALT, GMI), | |
337 | PIN(SPIE, SPI2, SPI1, SPI2_ALT, GMI), | |
338 | PIN(SPIF, SPI3, SPI1, SPI2, RSVD4), | |
339 | ||
340 | PIN(SPIG, SPI3, SPI2, SPI2_ALT, I2C), | |
341 | PIN(SPIH, SPI3, SPI2, SPI2_ALT, I2C), | |
342 | PIN(UAA, SPI3, MIPI_HS, UARTA, ULPI), | |
343 | PIN(UAB, SPI2, MIPI_HS, UARTA, ULPI), | |
344 | PIN(UAC, OWR, RSVD2, RSVD3, RSVD4), | |
345 | PIN(UAD, UARTB, SPDIF, UARTA, SPI4), | |
346 | PIN(UCA, UARTC, RSVD2, GMI, RSVD4), | |
347 | PIN(UCB, UARTC, PWM, GMI, RSVD4), | |
20e18e05 SG |
348 | |
349 | PIN_RESERVED, | |
70ad375e SW |
350 | PIN(ATE, IDE, NAND, GMI, RSVD4), |
351 | PIN(KBCC, KBC, NAND, TRACE, EMC_TEST1_DLL), | |
20e18e05 SG |
352 | PIN_RESERVED, |
353 | PIN_RESERVED, | |
70ad375e SW |
354 | PIN(GMB, IDE, NAND, GMI, GMI_INT), |
355 | PIN(GMD, RSVD1, NAND, GMI, SFLASH), | |
356 | PIN(DDC, I2C2, RSVD2, RSVD3, RSVD4), | |
20e18e05 SG |
357 | |
358 | /* 64 */ | |
70ad375e SW |
359 | PINP(LD0, DISPA, DISPB, XIO, RSVD4, LD17), |
360 | PINP(LD1, DISPA, DISPB, XIO, RSVD4, LD17), | |
361 | PINP(LD2, DISPA, DISPB, XIO, RSVD4, LD17), | |
362 | PINP(LD3, DISPA, DISPB, XIO, RSVD4, LD17), | |
363 | PINP(LD4, DISPA, DISPB, XIO, RSVD4, LD17), | |
364 | PINP(LD5, DISPA, DISPB, XIO, RSVD4, LD17), | |
365 | PINP(LD6, DISPA, DISPB, XIO, RSVD4, LD17), | |
366 | PINP(LD7, DISPA, DISPB, XIO, RSVD4, LD17), | |
367 | ||
368 | PINP(LD8, DISPA, DISPB, XIO, RSVD4, LD17), | |
369 | PINP(LD9, DISPA, DISPB, XIO, RSVD4, LD17), | |
370 | PINP(LD10, DISPA, DISPB, XIO, RSVD4, LD17), | |
371 | PINP(LD11, DISPA, DISPB, XIO, RSVD4, LD17), | |
372 | PINP(LD12, DISPA, DISPB, XIO, RSVD4, LD17), | |
373 | PINP(LD13, DISPA, DISPB, XIO, RSVD4, LD17), | |
374 | PINP(LD14, DISPA, DISPB, XIO, RSVD4, LD17), | |
375 | PINP(LD15, DISPA, DISPB, XIO, RSVD4, LD17), | |
376 | ||
377 | PINP(LD16, DISPA, DISPB, XIO, RSVD4, LD17), | |
378 | PINP(LD17, DISPA, DISPB, RSVD3, RSVD4, LD17), | |
379 | PINP(LHP0, DISPA, DISPB, RSVD3, RSVD4, LD21_20), | |
380 | PINP(LHP1, DISPA, DISPB, RSVD3, RSVD4, LD19_18), | |
381 | PINP(LHP2, DISPA, DISPB, RSVD3, RSVD4, LD19_18), | |
382 | PINP(LVP0, DISPA, DISPB, RSVD3, RSVD4, LC), | |
383 | PINP(LVP1, DISPA, DISPB, RSVD3, RSVD4, LD21_20), | |
384 | PINP(HDINT, HDMI, RSVD2, RSVD3, RSVD4, LC), | |
385 | ||
386 | PINP(LM0, DISPA, DISPB, SPI3, RSVD4, LC), | |
387 | PINP(LM1, DISPA, DISPB, RSVD3, CRT, LC), | |
388 | PINP(LVS, DISPA, DISPB, XIO, RSVD4, LC), | |
389 | PINP(LSC0, DISPA, DISPB, XIO, RSVD4, LC), | |
390 | PINP(LSC1, DISPA, DISPB, SPI3, HDMI, LS), | |
391 | PINP(LSCK, DISPA, DISPB, SPI3, HDMI, LS), | |
392 | PINP(LDC, DISPA, DISPB, RSVD3, RSVD4, LS), | |
393 | PINP(LCSN, DISPA, DISPB, SPI3, RSVD4, LS), | |
20e18e05 SG |
394 | |
395 | /* 96 */ | |
70ad375e SW |
396 | PINP(LSPI, DISPA, DISPB, XIO, HDMI, LC), |
397 | PINP(LSDA, DISPA, DISPB, SPI3, HDMI, LS), | |
398 | PINP(LSDI, DISPA, DISPB, SPI3, RSVD4, LS), | |
399 | PINP(LPW0, DISPA, DISPB, SPI3, HDMI, LS), | |
400 | PINP(LPW1, DISPA, DISPB, RSVD3, RSVD4, LS), | |
401 | PINP(LPW2, DISPA, DISPB, SPI3, HDMI, LS), | |
402 | PINP(LDI, DISPA, DISPB, RSVD3, RSVD4, LD23_22), | |
403 | PINP(LHS, DISPA, DISPB, XIO, RSVD4, LC), | |
404 | ||
405 | PINP(LPP, DISPA, DISPB, RSVD3, RSVD4, LD23_22), | |
20e18e05 | 406 | PIN_RESERVED, |
70ad375e SW |
407 | PIN(KBCD, KBC, NAND, SDIO2, MIO), |
408 | PIN(GPU7, RTCK, RSVD2, RSVD3, RSVD4), | |
409 | PIN(DTF, I2C3, RSVD2, VI, RSVD4), | |
410 | PIN(UDA, SPI1, RSVD2, UARTD, ULPI), | |
411 | PIN(CRTP, CRT, RSVD2, RSVD3, RSVD4), | |
412 | PINP(SDB, UARTA, PWM, SDIO3, SPI2, NONE), | |
20e18e05 SG |
413 | |
414 | /* these pin groups only have pullup and pull down control */ | |
70ad375e SW |
415 | DRVGRP(CK32), |
416 | DRVGRP(DDRC), | |
417 | DRVGRP(PMCA), | |
418 | DRVGRP(PMCB), | |
419 | DRVGRP(PMCC), | |
420 | DRVGRP(PMCD), | |
421 | DRVGRP(PMCE), | |
422 | DRVGRP(XM2C), | |
423 | DRVGRP(XM2D), | |
20e18e05 | 424 | }; |
dfb42fc9 | 425 | const struct pmux_pingrp_desc *tegra_soc_pingroups = tegra20_pingroups; |