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