pinmux.c 11 KB

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