pinmux.c 11 KB

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