1 /*
2  * Copyright (c) 2011 The Chromium OS Authors.
3  *
4  * SPDX-License-Identifier:	GPL-2.0+
5  */
6 
7 /* Tegra20 pin multiplexing functions */
8 
9 #include <common.h>
10 #include <asm/io.h>
11 #include <asm/arch/pinmux.h>
12 
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 
257 /* Convenient macro for defining pin group properties */
258 #define PINALL(pingrp, f0, f1, f2, f3, mux, pupd)	\
259 	{						\
260 		.funcs = {				\
261 			PMUX_FUNC_ ## f0,		\
262 			PMUX_FUNC_ ## f1,		\
263 			PMUX_FUNC_ ## f2,		\
264 			PMUX_FUNC_ ## f3,		\
265 		},					\
266 		.ctl_id = mux,				\
267 		.pull_id = pupd				\
268 	}
269 
270 /* A normal pin group where the mux name and pull-up name match */
271 #define PIN(pingrp, f0, f1, f2, f3) \
272 	PINALL(pingrp, f0, f1, f2, f3, MUXCTL_##pingrp, PUCTL_##pingrp)
273 
274 /* A pin group where the pull-up name doesn't have a 1-1 mapping */
275 #define PINP(pingrp, f0, f1, f2, f3, pupd) \
276 	PINALL(pingrp, f0, f1, f2, f3, MUXCTL_##pingrp, PUCTL_##pupd)
277 
278 /* A pin group number which is not used */
279 #define PIN_RESERVED \
280 	PIN(NONE, RSVD1, RSVD2, RSVD3, RSVD4)
281 
282 #define DRVGRP(drvgrp) \
283 	PINALL(drvgrp, RSVD1, RSVD2, RSVD3, RSVD4, MUXCTL_NONE, PUCTL_NONE)
284 
285 static const struct pmux_pingrp_desc tegra20_pingroups[] = {
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),
325 	PIN_RESERVED,
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),
348 
349 	PIN_RESERVED,
350 	PIN(ATE,    IDE,       NAND,      GMI,       RSVD4),
351 	PIN(KBCC,   KBC,       NAND,      TRACE,     EMC_TEST1_DLL),
352 	PIN_RESERVED,
353 	PIN_RESERVED,
354 	PIN(GMB,    IDE,       NAND,      GMI,       GMI_INT),
355 	PIN(GMD,    RSVD1,     NAND,      GMI,       SFLASH),
356 	PIN(DDC,    I2C2,      RSVD2,     RSVD3,     RSVD4),
357 
358 	/* 64 */
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),
394 
395 	/* 96 */
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),
406 	PIN_RESERVED,
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),
413 
414 	/* these pin groups only have pullup and pull down control */
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),
424 };
425 const struct pmux_pingrp_desc *tegra_soc_pingroups = tegra20_pingroups;
426