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