pinctrl_rk3368.c 23 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739
  1. // SPDX-License-Identifier: GPL-2.0+
  2. /*
  3. * (C) Copyright 2017 Rockchip Electronics Co., Ltd
  4. * Author: Andy Yan <andy.yan@rock-chips.com>
  5. * (C) Copyright 2017 Theobroma Systems Design und Consulting GmbH
  6. */
  7. #include <common.h>
  8. #include <dm.h>
  9. #include <errno.h>
  10. #include <syscon.h>
  11. #include <asm/io.h>
  12. #include <asm/arch/clock.h>
  13. #include <asm/arch/hardware.h>
  14. #include <asm/arch/grf_rk3368.h>
  15. #include <asm/arch/periph.h>
  16. #include <dm/pinctrl.h>
  17. /* PMUGRF_GPIO0B_IOMUX */
  18. enum {
  19. GPIO0B5_SHIFT = 10,
  20. GPIO0B5_MASK = GENMASK(GPIO0B5_SHIFT + 1, GPIO0B5_SHIFT),
  21. GPIO0B5_GPIO = 0,
  22. GPIO0B5_SPI2_CSN0 = (2 << GPIO0B5_SHIFT),
  23. GPIO0B4_SHIFT = 8,
  24. GPIO0B4_MASK = GENMASK(GPIO0B4_SHIFT + 1, GPIO0B4_SHIFT),
  25. GPIO0B4_GPIO = 0,
  26. GPIO0B4_SPI2_CLK = (2 << GPIO0B4_SHIFT),
  27. GPIO0B3_SHIFT = 6,
  28. GPIO0B3_MASK = GENMASK(GPIO0B3_SHIFT + 1, GPIO0B3_SHIFT),
  29. GPIO0B3_GPIO = 0,
  30. GPIO0B3_SPI2_TXD = (2 << GPIO0B3_SHIFT),
  31. GPIO0B2_SHIFT = 4,
  32. GPIO0B2_MASK = GENMASK(GPIO0B2_SHIFT + 1, GPIO0B2_SHIFT),
  33. GPIO0B2_GPIO = 0,
  34. GPIO0B2_SPI2_RXD = (2 << GPIO0B2_SHIFT),
  35. };
  36. /*GRF_GPIO0C_IOMUX*/
  37. enum {
  38. GPIO0C7_SHIFT = 14,
  39. GPIO0C7_MASK = GENMASK(GPIO0C7_SHIFT + 1, GPIO0C7_SHIFT),
  40. GPIO0C7_GPIO = 0,
  41. GPIO0C7_LCDC_D19 = (1 << GPIO0C7_SHIFT),
  42. GPIO0C7_TRACE_D9 = (2 << GPIO0C7_SHIFT),
  43. GPIO0C7_UART1_RTSN = (3 << GPIO0C7_SHIFT),
  44. GPIO0C6_SHIFT = 12,
  45. GPIO0C6_MASK = GENMASK(GPIO0C6_SHIFT + 1, GPIO0C6_SHIFT),
  46. GPIO0C6_GPIO = 0,
  47. GPIO0C6_LCDC_D18 = (1 << GPIO0C6_SHIFT),
  48. GPIO0C6_TRACE_D8 = (2 << GPIO0C6_SHIFT),
  49. GPIO0C6_UART1_CTSN = (3 << GPIO0C6_SHIFT),
  50. GPIO0C5_SHIFT = 10,
  51. GPIO0C5_MASK = GENMASK(GPIO0C5_SHIFT + 1, GPIO0C5_SHIFT),
  52. GPIO0C5_GPIO = 0,
  53. GPIO0C5_LCDC_D17 = (1 << GPIO0C5_SHIFT),
  54. GPIO0C5_TRACE_D7 = (2 << GPIO0C5_SHIFT),
  55. GPIO0C5_UART1_SOUT = (3 << GPIO0C5_SHIFT),
  56. GPIO0C4_SHIFT = 8,
  57. GPIO0C4_MASK = GENMASK(GPIO0C4_SHIFT + 1, GPIO0C4_SHIFT),
  58. GPIO0C4_GPIO = 0,
  59. GPIO0C4_LCDC_D16 = (1 << GPIO0C4_SHIFT),
  60. GPIO0C4_TRACE_D6 = (2 << GPIO0C4_SHIFT),
  61. GPIO0C4_UART1_SIN = (3 << GPIO0C4_SHIFT),
  62. GPIO0C3_SHIFT = 6,
  63. GPIO0C3_MASK = GENMASK(GPIO0C3_SHIFT + 1, GPIO0C3_SHIFT),
  64. GPIO0C3_GPIO = 0,
  65. GPIO0C3_LCDC_D15 = (1 << GPIO0C3_SHIFT),
  66. GPIO0C3_TRACE_D5 = (2 << GPIO0C3_SHIFT),
  67. GPIO0C3_MCU_JTAG_TDO = (3 << GPIO0C3_SHIFT),
  68. GPIO0C2_SHIFT = 4,
  69. GPIO0C2_MASK = GENMASK(GPIO0C2_SHIFT + 1, GPIO0C2_SHIFT),
  70. GPIO0C2_GPIO = 0,
  71. GPIO0C2_LCDC_D14 = (1 << GPIO0C2_SHIFT),
  72. GPIO0C2_TRACE_D4 = (2 << GPIO0C2_SHIFT),
  73. GPIO0C2_MCU_JTAG_TDI = (3 << GPIO0C2_SHIFT),
  74. GPIO0C1_SHIFT = 2,
  75. GPIO0C1_MASK = GENMASK(GPIO0C1_SHIFT + 1, GPIO0C1_SHIFT),
  76. GPIO0C1_GPIO = 0,
  77. GPIO0C1_LCDC_D13 = (1 << GPIO0C1_SHIFT),
  78. GPIO0C1_TRACE_D3 = (2 << GPIO0C1_SHIFT),
  79. GPIO0C1_MCU_JTAG_TRTSN = (3 << GPIO0C1_SHIFT),
  80. GPIO0C0_SHIFT = 0,
  81. GPIO0C0_MASK = GENMASK(GPIO0C0_SHIFT + 1, GPIO0C0_SHIFT),
  82. GPIO0C0_GPIO = 0,
  83. GPIO0C0_LCDC_D12 = (1 << GPIO0C0_SHIFT),
  84. GPIO0C0_TRACE_D2 = (2 << GPIO0C0_SHIFT),
  85. GPIO0C0_MCU_JTAG_TDO = (3 << GPIO0C0_SHIFT),
  86. };
  87. /*GRF_GPIO0D_IOMUX*/
  88. enum {
  89. GPIO0D7_SHIFT = 14,
  90. GPIO0D7_MASK = GENMASK(GPIO0D7_SHIFT + 1, GPIO0D7_SHIFT),
  91. GPIO0D7_GPIO = 0,
  92. GPIO0D7_LCDC_DCLK = (1 << GPIO0D7_SHIFT),
  93. GPIO0D7_TRACE_CTL = (2 << GPIO0D7_SHIFT),
  94. GPIO0D7_PMU_DEBUG5 = (3 << GPIO0D7_SHIFT),
  95. GPIO0D6_SHIFT = 12,
  96. GPIO0D6_MASK = GENMASK(GPIO0D6_SHIFT + 1, GPIO0D6_SHIFT),
  97. GPIO0D6_GPIO = 0,
  98. GPIO0D6_LCDC_DEN = (1 << GPIO0D6_SHIFT),
  99. GPIO0D6_TRACE_CLK = (2 << GPIO0D6_SHIFT),
  100. GPIO0D6_PMU_DEBUG4 = (3 << GPIO0D6_SHIFT),
  101. GPIO0D5_SHIFT = 10,
  102. GPIO0D5_MASK = GENMASK(GPIO0D5_SHIFT + 1, GPIO0D5_SHIFT),
  103. GPIO0D5_GPIO = 0,
  104. GPIO0D5_LCDC_VSYNC = (1 << GPIO0D5_SHIFT),
  105. GPIO0D5_TRACE_D15 = (2 << GPIO0D5_SHIFT),
  106. GPIO0D5_PMU_DEBUG3 = (3 << GPIO0D5_SHIFT),
  107. GPIO0D4_SHIFT = 8,
  108. GPIO0D4_MASK = GENMASK(GPIO0D4_SHIFT + 1, GPIO0D4_SHIFT),
  109. GPIO0D4_GPIO = 0,
  110. GPIO0D4_LCDC_HSYNC = (1 << GPIO0D4_SHIFT),
  111. GPIO0D4_TRACE_D14 = (2 << GPIO0D4_SHIFT),
  112. GPIO0D4_PMU_DEBUG2 = (3 << GPIO0D4_SHIFT),
  113. GPIO0D3_SHIFT = 6,
  114. GPIO0D3_MASK = GENMASK(GPIO0D3_SHIFT + 1, GPIO0D3_SHIFT),
  115. GPIO0D3_GPIO = 0,
  116. GPIO0D3_LCDC_D23 = (1 << GPIO0D3_SHIFT),
  117. GPIO0D3_TRACE_D13 = (2 << GPIO0D3_SHIFT),
  118. GPIO0D3_UART4_SIN = (3 << GPIO0D3_SHIFT),
  119. GPIO0D2_SHIFT = 4,
  120. GPIO0D2_MASK = GENMASK(GPIO0D2_SHIFT + 1, GPIO0D2_SHIFT),
  121. GPIO0D2_GPIO = 0,
  122. GPIO0D2_LCDC_D22 = (1 << GPIO0D2_SHIFT),
  123. GPIO0D2_TRACE_D12 = (2 << GPIO0D2_SHIFT),
  124. GPIO0D2_UART4_SOUT = (3 << GPIO0D2_SHIFT),
  125. GPIO0D1_SHIFT = 2,
  126. GPIO0D1_MASK = GENMASK(GPIO0D1_SHIFT + 1, GPIO0D1_SHIFT),
  127. GPIO0D1_GPIO = 0,
  128. GPIO0D1_LCDC_D21 = (1 << GPIO0D1_SHIFT),
  129. GPIO0D1_TRACE_D11 = (2 << GPIO0D1_SHIFT),
  130. GPIO0D1_UART4_RTSN = (3 << GPIO0D1_SHIFT),
  131. GPIO0D0_SHIFT = 0,
  132. GPIO0D0_MASK = GENMASK(GPIO0D0_SHIFT + 1, GPIO0D0_SHIFT),
  133. GPIO0D0_GPIO = 0,
  134. GPIO0D0_LCDC_D20 = (1 << GPIO0D0_SHIFT),
  135. GPIO0D0_TRACE_D10 = (2 << GPIO0D0_SHIFT),
  136. GPIO0D0_UART4_CTSN = (3 << GPIO0D0_SHIFT),
  137. };
  138. /*GRF_GPIO2A_IOMUX*/
  139. enum {
  140. GPIO2A7_SHIFT = 14,
  141. GPIO2A7_MASK = GENMASK(GPIO2A7_SHIFT + 1, GPIO2A7_SHIFT),
  142. GPIO2A7_GPIO = 0,
  143. GPIO2A7_SDMMC0_D2 = (1 << GPIO2A7_SHIFT),
  144. GPIO2A7_JTAG_TCK = (2 << GPIO2A7_SHIFT),
  145. GPIO2A6_SHIFT = 12,
  146. GPIO2A6_MASK = GENMASK(GPIO2A6_SHIFT + 1, GPIO2A6_SHIFT),
  147. GPIO2A6_GPIO = 0,
  148. GPIO2A6_SDMMC0_D1 = (1 << GPIO2A6_SHIFT),
  149. GPIO2A6_UART2_SIN = (2 << GPIO2A6_SHIFT),
  150. GPIO2A5_SHIFT = 10,
  151. GPIO2A5_MASK = GENMASK(GPIO2A5_SHIFT + 1, GPIO2A5_SHIFT),
  152. GPIO2A5_GPIO = 0,
  153. GPIO2A5_SDMMC0_D0 = (1 << GPIO2A5_SHIFT),
  154. GPIO2A5_UART2_SOUT = (2 << GPIO2A5_SHIFT),
  155. GPIO2A4_SHIFT = 8,
  156. GPIO2A4_MASK = GENMASK(GPIO2A4_SHIFT + 1, GPIO2A4_SHIFT),
  157. GPIO2A4_GPIO = 0,
  158. GPIO2A4_FLASH_DQS = (1 << GPIO2A4_SHIFT),
  159. GPIO2A4_EMMC_CLKOUT = (2 << GPIO2A4_SHIFT),
  160. GPIO2A3_SHIFT = 6,
  161. GPIO2A3_MASK = GENMASK(GPIO2A3_SHIFT + 1, GPIO2A3_SHIFT),
  162. GPIO2A3_GPIO = 0,
  163. GPIO2A3_FLASH_CSN3 = (1 << GPIO2A3_SHIFT),
  164. GPIO2A3_EMMC_RSTNOUT = (2 << GPIO2A3_SHIFT),
  165. GPIO2A2_SHIFT = 4,
  166. GPIO2A2_MASK = GENMASK(GPIO2A2_SHIFT + 1, GPIO2A2_SHIFT),
  167. GPIO2A2_GPIO = 0,
  168. GPIO2A2_FLASH_CSN2 = (1 << GPIO2A2_SHIFT),
  169. GPIO2A1_SHIFT = 2,
  170. GPIO2A1_MASK = GENMASK(GPIO2A1_SHIFT + 1, GPIO2A1_SHIFT),
  171. GPIO2A1_GPIO = 0,
  172. GPIO2A1_FLASH_CSN1 = (1 << GPIO2A1_SHIFT),
  173. GPIO2A0_SHIFT = 0,
  174. GPIO2A0_MASK = GENMASK(GPIO2A0_SHIFT + 1, GPIO2A0_SHIFT),
  175. GPIO2A0_GPIO = 0,
  176. GPIO2A0_FLASH_CSN0 = (1 << GPIO2A0_SHIFT),
  177. };
  178. /*GRF_GPIO2B_IOMUX*/
  179. enum {
  180. GPIO2B3_SHIFT = 6,
  181. GPIO2B3_MASK = GENMASK(GPIO2B3_SHIFT + 1, GPIO2B3_SHIFT),
  182. GPIO2B3_GPIO = 0,
  183. GPIO2B3_SDMMC0_DTECTN = (1 << GPIO2B3_SHIFT),
  184. GPIO2B2_SHIFT = 4,
  185. GPIO2B2_MASK = GENMASK(GPIO2B2_SHIFT + 1, GPIO2B2_SHIFT),
  186. GPIO2B2_GPIO = 0,
  187. GPIO2B2_SDMMC0_CMD = (1 << GPIO2B2_SHIFT),
  188. GPIO2B1_SHIFT = 2,
  189. GPIO2B1_MASK = GENMASK(GPIO2B1_SHIFT + 1, GPIO2B1_SHIFT),
  190. GPIO2B1_GPIO = 0,
  191. GPIO2B1_SDMMC0_CLKOUT = (1 << GPIO2B1_SHIFT),
  192. GPIO2B0_SHIFT = 0,
  193. GPIO2B0_MASK = GENMASK(GPIO2B0_SHIFT + 1, GPIO2B0_SHIFT),
  194. GPIO2B0_GPIO = 0,
  195. GPIO2B0_SDMMC0_D3 = (1 << GPIO2B0_SHIFT),
  196. };
  197. /*GRF_GPIO2D_IOMUX*/
  198. enum {
  199. GPIO2D7_SHIFT = 14,
  200. GPIO2D7_MASK = GENMASK(GPIO2D7_SHIFT + 1, GPIO2D7_SHIFT),
  201. GPIO2D7_GPIO = 0,
  202. GPIO2D7_SDIO0_D3 = (1 << GPIO2D7_SHIFT),
  203. GPIO2D6_SHIFT = 12,
  204. GPIO2D6_MASK = GENMASK(GPIO2D6_SHIFT + 1, GPIO2D6_SHIFT),
  205. GPIO2D6_GPIO = 0,
  206. GPIO2D6_SDIO0_D2 = (1 << GPIO2D6_SHIFT),
  207. GPIO2D5_SHIFT = 10,
  208. GPIO2D5_MASK = GENMASK(GPIO2D5_SHIFT + 1, GPIO2D5_SHIFT),
  209. GPIO2D5_GPIO = 0,
  210. GPIO2D5_SDIO0_D1 = (1 << GPIO2D5_SHIFT),
  211. GPIO2D4_SHIFT = 8,
  212. GPIO2D4_MASK = GENMASK(GPIO2D4_SHIFT + 1, GPIO2D4_SHIFT),
  213. GPIO2D4_GPIO = 0,
  214. GPIO2D4_SDIO0_D0 = (1 << GPIO2D4_SHIFT),
  215. GPIO2D3_SHIFT = 6,
  216. GPIO2D3_MASK = GENMASK(GPIO2D3_SHIFT + 1, GPIO2D3_SHIFT),
  217. GPIO2D3_GPIO = 0,
  218. GPIO2D3_UART0_RTS0 = (1 << GPIO2D3_SHIFT),
  219. GPIO2D2_SHIFT = 4,
  220. GPIO2D2_MASK = GENMASK(GPIO2D2_SHIFT + 1, GPIO2D2_SHIFT),
  221. GPIO2D2_GPIO = 0,
  222. GPIO2D2_UART0_CTS0 = (1 << GPIO2D2_SHIFT),
  223. GPIO2D1_SHIFT = 2,
  224. GPIO2D1_MASK = GENMASK(GPIO2D1_SHIFT + 1, GPIO2D1_SHIFT),
  225. GPIO2D1_GPIO = 0,
  226. GPIO2D1_UART0_SOUT = (1 << GPIO2D1_SHIFT),
  227. GPIO2D0_SHIFT = 0,
  228. GPIO2D0_MASK = GENMASK(GPIO2D0_SHIFT + 1, GPIO2D0_SHIFT),
  229. GPIO2D0_GPIO = 0,
  230. GPIO2D0_UART0_SIN = (1 << GPIO2D0_SHIFT),
  231. };
  232. /* GRF_GPIO1B_IOMUX */
  233. enum {
  234. GPIO1B7_SHIFT = 14,
  235. GPIO1B7_MASK = GENMASK(GPIO1B7_SHIFT + 1, GPIO1B7_SHIFT),
  236. GPIO1B7_GPIO = 0,
  237. GPIO1B7_SPI1_CSN0 = (2 << GPIO1B7_SHIFT),
  238. GPIO1B6_SHIFT = 12,
  239. GPIO1B6_MASK = GENMASK(GPIO1B6_SHIFT + 1, GPIO1B6_SHIFT),
  240. GPIO1B6_GPIO = 0,
  241. GPIO1B6_SPI1_CLK = (2 << GPIO1B6_SHIFT),
  242. };
  243. /* GRF_GPIO1C_IOMUX */
  244. enum {
  245. GPIO1C7_SHIFT = 14,
  246. GPIO1C7_MASK = GENMASK(GPIO1C7_SHIFT + 1, GPIO1C7_SHIFT),
  247. GPIO1C7_GPIO = 0,
  248. GPIO1C7_EMMC_DATA5 = (2 << GPIO1C7_SHIFT),
  249. GPIO1C7_SPI0_TXD = (3 << GPIO1C7_SHIFT),
  250. GPIO1C6_SHIFT = 12,
  251. GPIO1C6_MASK = GENMASK(GPIO1C6_SHIFT + 1, GPIO1C6_SHIFT),
  252. GPIO1C6_GPIO = 0,
  253. GPIO1C6_EMMC_DATA4 = (2 << GPIO1C6_SHIFT),
  254. GPIO1C6_SPI0_RXD = (3 << GPIO1C6_SHIFT),
  255. GPIO1C5_SHIFT = 10,
  256. GPIO1C5_MASK = GENMASK(GPIO1C5_SHIFT + 1, GPIO1C5_SHIFT),
  257. GPIO1C5_GPIO = 0,
  258. GPIO1C5_EMMC_DATA3 = (2 << GPIO1C5_SHIFT),
  259. GPIO1C4_SHIFT = 8,
  260. GPIO1C4_MASK = GENMASK(GPIO1C4_SHIFT + 1, GPIO1C4_SHIFT),
  261. GPIO1C4_GPIO = 0,
  262. GPIO1C4_EMMC_DATA2 = (2 << GPIO1C4_SHIFT),
  263. GPIO1C3_SHIFT = 6,
  264. GPIO1C3_MASK = GENMASK(GPIO1C3_SHIFT + 1, GPIO1C3_SHIFT),
  265. GPIO1C3_GPIO = 0,
  266. GPIO1C3_EMMC_DATA1 = (2 << GPIO1C3_SHIFT),
  267. GPIO1C2_SHIFT = 4,
  268. GPIO1C2_MASK = GENMASK(GPIO1C2_SHIFT + 1, GPIO1C2_SHIFT),
  269. GPIO1C2_GPIO = 0,
  270. GPIO1C2_EMMC_DATA0 = (2 << GPIO1C2_SHIFT),
  271. GPIO1C1_SHIFT = 2,
  272. GPIO1C1_MASK = GENMASK(GPIO1C1_SHIFT + 1, GPIO1C1_SHIFT),
  273. GPIO1C1_GPIO = 0,
  274. GPIO1C1_SPI1_RXD = (2 << GPIO1C1_SHIFT),
  275. GPIO1C0_SHIFT = 0,
  276. GPIO1C0_MASK = GENMASK(GPIO1C0_SHIFT + 1, GPIO1C0_SHIFT),
  277. GPIO1C0_GPIO = 0,
  278. GPIO1C0_SPI1_TXD = (2 << GPIO1C0_SHIFT),
  279. };
  280. /* GRF_GPIO1D_IOMUX*/
  281. enum {
  282. GPIO1D5_SHIFT = 10,
  283. GPIO1D5_MASK = GENMASK(GPIO1D5_SHIFT + 1, GPIO1D5_SHIFT),
  284. GPIO1D5_GPIO = 0,
  285. GPIO1D5_SPI0_CLK = (2 << GPIO1D5_SHIFT),
  286. GPIO1D3_SHIFT = 6,
  287. GPIO1D3_MASK = GENMASK(GPIO1D3_SHIFT + 1, GPIO1D3_SHIFT),
  288. GPIO1D3_GPIO = 0,
  289. GPIO1D3_EMMC_PWREN = (2 << GPIO1D3_SHIFT),
  290. GPIO1D2_SHIFT = 4,
  291. GPIO1D2_MASK = GENMASK(GPIO1D2_SHIFT + 1, GPIO1D2_SHIFT),
  292. GPIO1D2_GPIO = 0,
  293. GPIO1D2_EMMC_CMD = (2 << GPIO1D2_SHIFT),
  294. GPIO1D1_SHIFT = 2,
  295. GPIO1D1_MASK = GENMASK(GPIO1D1_SHIFT + 1, GPIO1D1_SHIFT),
  296. GPIO1D1_GPIO = 0,
  297. GPIO1D1_EMMC_DATA7 = (2 << GPIO1D1_SHIFT),
  298. GPIO1D1_SPI0_CSN1 = (3 << GPIO1D1_SHIFT),
  299. GPIO1D0_SHIFT = 0,
  300. GPIO1D0_MASK = GENMASK(GPIO1D0_SHIFT + 1, GPIO1D0_SHIFT),
  301. GPIO1D0_GPIO = 0,
  302. GPIO1D0_EMMC_DATA6 = (2 << GPIO1D0_SHIFT),
  303. GPIO1D0_SPI0_CSN0 = (3 << GPIO1D0_SHIFT),
  304. };
  305. /*GRF_GPIO3B_IOMUX*/
  306. enum {
  307. GPIO3B7_SHIFT = 14,
  308. GPIO3B7_MASK = GENMASK(GPIO3B7_SHIFT + 1, GPIO3B7_SHIFT),
  309. GPIO3B7_GPIO = 0,
  310. GPIO3B7_MAC_RXD0 = (1 << GPIO3B7_SHIFT),
  311. GPIO3B6_SHIFT = 12,
  312. GPIO3B6_MASK = GENMASK(GPIO3B6_SHIFT + 1, GPIO3B6_SHIFT),
  313. GPIO3B6_GPIO = 0,
  314. GPIO3B6_MAC_TXD3 = (1 << GPIO3B6_SHIFT),
  315. GPIO3B5_SHIFT = 10,
  316. GPIO3B5_MASK = GENMASK(GPIO3B5_SHIFT + 1, GPIO3B5_SHIFT),
  317. GPIO3B5_GPIO = 0,
  318. GPIO3B5_MAC_TXEN = (1 << GPIO3B5_SHIFT),
  319. GPIO3B4_SHIFT = 8,
  320. GPIO3B4_MASK = GENMASK(GPIO3B4_SHIFT + 1, GPIO3B4_SHIFT),
  321. GPIO3B4_GPIO = 0,
  322. GPIO3B4_MAC_COL = (1 << GPIO3B4_SHIFT),
  323. GPIO3B3_SHIFT = 6,
  324. GPIO3B3_MASK = GENMASK(GPIO3B3_SHIFT + 1, GPIO3B3_SHIFT),
  325. GPIO3B3_GPIO = 0,
  326. GPIO3B3_MAC_CRS = (1 << GPIO3B3_SHIFT),
  327. GPIO3B2_SHIFT = 4,
  328. GPIO3B2_MASK = GENMASK(GPIO3B2_SHIFT + 1, GPIO3B2_SHIFT),
  329. GPIO3B2_GPIO = 0,
  330. GPIO3B2_MAC_TXD2 = (1 << GPIO3B2_SHIFT),
  331. GPIO3B1_SHIFT = 2,
  332. GPIO3B1_MASK = GENMASK(GPIO3B1_SHIFT + 1, GPIO3B1_SHIFT),
  333. GPIO3B1_GPIO = 0,
  334. GPIO3B1_MAC_TXD1 = (1 << GPIO3B1_SHIFT),
  335. GPIO3B0_SHIFT = 0,
  336. GPIO3B0_MASK = GENMASK(GPIO3B0_SHIFT + 1, GPIO3B0_SHIFT),
  337. GPIO3B0_GPIO = 0,
  338. GPIO3B0_MAC_TXD0 = (1 << GPIO3B0_SHIFT),
  339. GPIO3B0_PWM0 = (2 << GPIO3B0_SHIFT),
  340. };
  341. /*GRF_GPIO3C_IOMUX*/
  342. enum {
  343. GPIO3C6_SHIFT = 12,
  344. GPIO3C6_MASK = GENMASK(GPIO3C6_SHIFT + 1, GPIO3C6_SHIFT),
  345. GPIO3C6_GPIO = 0,
  346. GPIO3C6_MAC_CLK = (1 << GPIO3C6_SHIFT),
  347. GPIO3C5_SHIFT = 10,
  348. GPIO3C5_MASK = GENMASK(GPIO3C5_SHIFT + 1, GPIO3C5_SHIFT),
  349. GPIO3C5_GPIO = 0,
  350. GPIO3C5_MAC_RXEN = (1 << GPIO3C5_SHIFT),
  351. GPIO3C4_SHIFT = 8,
  352. GPIO3C4_MASK = GENMASK(GPIO3C4_SHIFT + 1, GPIO3C4_SHIFT),
  353. GPIO3C4_GPIO = 0,
  354. GPIO3C4_MAC_RXDV = (1 << GPIO3C4_SHIFT),
  355. GPIO3C3_SHIFT = 6,
  356. GPIO3C3_MASK = GENMASK(GPIO3C3_SHIFT + 1, GPIO3C3_SHIFT),
  357. GPIO3C3_GPIO = 0,
  358. GPIO3C3_MAC_MDC = (1 << GPIO3C3_SHIFT),
  359. GPIO3C2_SHIFT = 4,
  360. GPIO3C2_MASK = GENMASK(GPIO3C2_SHIFT + 1, GPIO3C2_SHIFT),
  361. GPIO3C2_GPIO = 0,
  362. GPIO3C2_MAC_RXD3 = (1 << GPIO3C2_SHIFT),
  363. GPIO3C1_SHIFT = 2,
  364. GPIO3C1_MASK = GENMASK(GPIO3C1_SHIFT + 1, GPIO3C1_SHIFT),
  365. GPIO3C1_GPIO = 0,
  366. GPIO3C1_MAC_RXD2 = (1 << GPIO3C1_SHIFT),
  367. GPIO3C0_SHIFT = 0,
  368. GPIO3C0_MASK = GENMASK(GPIO3C0_SHIFT + 1, GPIO3C0_SHIFT),
  369. GPIO3C0_GPIO = 0,
  370. GPIO3C0_MAC_RXD1 = (1 << GPIO3C0_SHIFT),
  371. };
  372. /*GRF_GPIO3D_IOMUX*/
  373. enum {
  374. GPIO3D4_SHIFT = 8,
  375. GPIO3D4_MASK = GENMASK(GPIO3D4_SHIFT + 1, GPIO3D4_SHIFT),
  376. GPIO3D4_GPIO = 0,
  377. GPIO3D4_MAC_TXCLK = (1 << GPIO3D4_SHIFT),
  378. GPIO3D4_SPI1_CNS1 = (2 << GPIO3D4_SHIFT),
  379. GPIO3D1_SHIFT = 2,
  380. GPIO3D1_MASK = GENMASK(GPIO3D1_SHIFT + 1, GPIO3D1_SHIFT),
  381. GPIO3D1_GPIO = 0,
  382. GPIO3D1_MAC_RXCLK = (1 << GPIO3D1_SHIFT),
  383. GPIO3D0_SHIFT = 0,
  384. GPIO3D0_MASK = GENMASK(GPIO3D0_SHIFT + 1, GPIO3D0_SHIFT),
  385. GPIO3D0_GPIO = 0,
  386. GPIO3D0_MAC_MDIO = (1 << GPIO3D0_SHIFT),
  387. };
  388. struct rk3368_pinctrl_priv {
  389. struct rk3368_grf *grf;
  390. struct rk3368_pmu_grf *pmugrf;
  391. };
  392. static void pinctrl_rk3368_uart_config(struct rk3368_pinctrl_priv *priv,
  393. int uart_id)
  394. {
  395. struct rk3368_grf *grf = priv->grf;
  396. struct rk3368_pmu_grf *pmugrf = priv->pmugrf;
  397. switch (uart_id) {
  398. case PERIPH_ID_UART2:
  399. rk_clrsetreg(&grf->gpio2a_iomux,
  400. GPIO2A6_MASK | GPIO2A5_MASK,
  401. GPIO2A6_UART2_SIN | GPIO2A5_UART2_SOUT);
  402. break;
  403. case PERIPH_ID_UART0:
  404. break;
  405. case PERIPH_ID_UART1:
  406. break;
  407. case PERIPH_ID_UART3:
  408. break;
  409. case PERIPH_ID_UART4:
  410. rk_clrsetreg(&pmugrf->gpio0d_iomux,
  411. GPIO0D0_MASK | GPIO0D1_MASK |
  412. GPIO0D2_MASK | GPIO0D3_MASK,
  413. GPIO0D0_GPIO | GPIO0D1_GPIO |
  414. GPIO0D2_UART4_SOUT | GPIO0D3_UART4_SIN);
  415. break;
  416. default:
  417. debug("uart id = %d iomux error!\n", uart_id);
  418. break;
  419. }
  420. }
  421. static void pinctrl_rk3368_spi_config(struct rk3368_pinctrl_priv *priv,
  422. int spi_id)
  423. {
  424. struct rk3368_grf *grf = priv->grf;
  425. struct rk3368_pmu_grf *pmugrf = priv->pmugrf;
  426. switch (spi_id) {
  427. case PERIPH_ID_SPI0:
  428. /*
  429. * eMMC can only be connected with 4 bits, when SPI0 is used.
  430. * This is all-or-nothing, so we assume that if someone asks us
  431. * to configure SPI0, that their eMMC interface is unused or
  432. * configured appropriately.
  433. */
  434. rk_clrsetreg(&grf->gpio1d_iomux,
  435. GPIO1D0_MASK | GPIO1D1_MASK |
  436. GPIO1D5_MASK,
  437. GPIO1D0_SPI0_CSN0 | GPIO1D1_SPI0_CSN1 |
  438. GPIO1D5_SPI0_CLK);
  439. rk_clrsetreg(&grf->gpio1c_iomux,
  440. GPIO1C6_MASK | GPIO1C7_MASK,
  441. GPIO1C6_SPI0_RXD | GPIO1C7_SPI0_TXD);
  442. break;
  443. case PERIPH_ID_SPI1:
  444. /*
  445. * We don't implement support for configuring SPI1_CSN#1, as it
  446. * conflicts with the GMAC (MAC TX clk-out).
  447. */
  448. rk_clrsetreg(&grf->gpio1b_iomux,
  449. GPIO1B6_MASK | GPIO1B7_MASK,
  450. GPIO1B6_SPI1_CLK | GPIO1B7_SPI1_CSN0);
  451. rk_clrsetreg(&grf->gpio1c_iomux,
  452. GPIO1C0_MASK | GPIO1C1_MASK,
  453. GPIO1C0_SPI1_TXD | GPIO1C1_SPI1_RXD);
  454. break;
  455. case PERIPH_ID_SPI2:
  456. rk_clrsetreg(&pmugrf->gpio0b_iomux,
  457. GPIO0B2_MASK | GPIO0B3_MASK |
  458. GPIO0B4_MASK | GPIO0B5_MASK,
  459. GPIO0B2_SPI2_RXD | GPIO0B3_SPI2_TXD |
  460. GPIO0B4_SPI2_CLK | GPIO0B5_SPI2_CSN0);
  461. break;
  462. default:
  463. debug("%s: spi id = %d iomux error!\n", __func__, spi_id);
  464. break;
  465. }
  466. }
  467. #if CONFIG_IS_ENABLED(GMAC_ROCKCHIP)
  468. static void pinctrl_rk3368_gmac_config(struct rk3368_grf *grf, int gmac_id)
  469. {
  470. rk_clrsetreg(&grf->gpio3b_iomux,
  471. GPIO3B0_MASK | GPIO3B1_MASK |
  472. GPIO3B2_MASK | GPIO3B5_MASK |
  473. GPIO3B6_MASK | GPIO3B7_MASK,
  474. GPIO3B0_MAC_TXD0 | GPIO3B1_MAC_TXD1 |
  475. GPIO3B2_MAC_TXD2 | GPIO3B5_MAC_TXEN |
  476. GPIO3B6_MAC_TXD3 | GPIO3B7_MAC_RXD0);
  477. rk_clrsetreg(&grf->gpio3c_iomux,
  478. GPIO3C0_MASK | GPIO3C1_MASK |
  479. GPIO3C2_MASK | GPIO3C3_MASK |
  480. GPIO3C4_MASK | GPIO3C5_MASK |
  481. GPIO3C6_MASK,
  482. GPIO3C0_MAC_RXD1 | GPIO3C1_MAC_RXD2 |
  483. GPIO3C2_MAC_RXD3 | GPIO3C3_MAC_MDC |
  484. GPIO3C4_MAC_RXDV | GPIO3C5_MAC_RXEN |
  485. GPIO3C6_MAC_CLK);
  486. rk_clrsetreg(&grf->gpio3d_iomux,
  487. GPIO3D0_MASK | GPIO3D1_MASK |
  488. GPIO3D4_MASK,
  489. GPIO3D0_MAC_MDIO | GPIO3D1_MAC_RXCLK |
  490. GPIO3D4_MAC_TXCLK);
  491. }
  492. #endif
  493. static void pinctrl_rk3368_sdmmc_config(struct rk3368_grf *grf, int mmc_id)
  494. {
  495. switch (mmc_id) {
  496. case PERIPH_ID_EMMC:
  497. debug("mmc id = %d setting registers!\n", mmc_id);
  498. rk_clrsetreg(&grf->gpio1c_iomux,
  499. GPIO1C2_MASK | GPIO1C3_MASK |
  500. GPIO1C4_MASK | GPIO1C5_MASK |
  501. GPIO1C6_MASK | GPIO1C7_MASK,
  502. GPIO1C2_EMMC_DATA0 |
  503. GPIO1C3_EMMC_DATA1 |
  504. GPIO1C4_EMMC_DATA2 |
  505. GPIO1C5_EMMC_DATA3 |
  506. GPIO1C6_EMMC_DATA4 |
  507. GPIO1C7_EMMC_DATA5);
  508. rk_clrsetreg(&grf->gpio1d_iomux,
  509. GPIO1D0_MASK | GPIO1D1_MASK |
  510. GPIO1D2_MASK | GPIO1D3_MASK,
  511. GPIO1D0_EMMC_DATA6 |
  512. GPIO1D1_EMMC_DATA7 |
  513. GPIO1D2_EMMC_CMD |
  514. GPIO1D3_EMMC_PWREN);
  515. rk_clrsetreg(&grf->gpio2a_iomux,
  516. GPIO2A3_MASK | GPIO2A4_MASK,
  517. GPIO2A3_EMMC_RSTNOUT |
  518. GPIO2A4_EMMC_CLKOUT);
  519. break;
  520. case PERIPH_ID_SDCARD:
  521. debug("mmc id = %d setting registers!\n", mmc_id);
  522. rk_clrsetreg(&grf->gpio2a_iomux,
  523. GPIO2A5_MASK | GPIO2A7_MASK |
  524. GPIO2A7_MASK,
  525. GPIO2A5_SDMMC0_D0 | GPIO2A6_SDMMC0_D1 |
  526. GPIO2A7_SDMMC0_D2);
  527. rk_clrsetreg(&grf->gpio2b_iomux,
  528. GPIO2B0_MASK | GPIO2B1_MASK |
  529. GPIO2B2_MASK | GPIO2B3_MASK,
  530. GPIO2B0_SDMMC0_D3 | GPIO2B1_SDMMC0_CLKOUT |
  531. GPIO2B2_SDMMC0_CMD | GPIO2B3_SDMMC0_DTECTN);
  532. break;
  533. default:
  534. debug("mmc id = %d iomux error!\n", mmc_id);
  535. break;
  536. }
  537. }
  538. static int rk3368_pinctrl_request(struct udevice *dev, int func, int flags)
  539. {
  540. struct rk3368_pinctrl_priv *priv = dev_get_priv(dev);
  541. debug("%s: func=%d, flags=%x\n", __func__, func, flags);
  542. switch (func) {
  543. case PERIPH_ID_UART0:
  544. case PERIPH_ID_UART1:
  545. case PERIPH_ID_UART2:
  546. case PERIPH_ID_UART3:
  547. case PERIPH_ID_UART4:
  548. pinctrl_rk3368_uart_config(priv, func);
  549. break;
  550. case PERIPH_ID_SPI0:
  551. case PERIPH_ID_SPI1:
  552. case PERIPH_ID_SPI2:
  553. pinctrl_rk3368_spi_config(priv, func);
  554. break;
  555. case PERIPH_ID_EMMC:
  556. case PERIPH_ID_SDCARD:
  557. pinctrl_rk3368_sdmmc_config(priv->grf, func);
  558. break;
  559. #if CONFIG_IS_ENABLED(GMAC_ROCKCHIP)
  560. case PERIPH_ID_GMAC:
  561. pinctrl_rk3368_gmac_config(priv->grf, func);
  562. break;
  563. #endif
  564. default:
  565. return -EINVAL;
  566. }
  567. return 0;
  568. }
  569. static int rk3368_pinctrl_get_periph_id(struct udevice *dev,
  570. struct udevice *periph)
  571. {
  572. u32 cell[3];
  573. int ret;
  574. ret = dev_read_u32_array(periph, "interrupts", cell, ARRAY_SIZE(cell));
  575. if (ret < 0)
  576. return -EINVAL;
  577. switch (cell[1]) {
  578. case 59:
  579. return PERIPH_ID_UART4;
  580. case 58:
  581. return PERIPH_ID_UART3;
  582. case 57:
  583. return PERIPH_ID_UART2;
  584. case 56:
  585. return PERIPH_ID_UART1;
  586. case 55:
  587. return PERIPH_ID_UART0;
  588. case 44:
  589. return PERIPH_ID_SPI0;
  590. case 45:
  591. return PERIPH_ID_SPI1;
  592. case 41:
  593. return PERIPH_ID_SPI2;
  594. case 35:
  595. return PERIPH_ID_EMMC;
  596. case 32:
  597. return PERIPH_ID_SDCARD;
  598. #if CONFIG_IS_ENABLED(GMAC_ROCKCHIP)
  599. case 27:
  600. return PERIPH_ID_GMAC;
  601. #endif
  602. }
  603. return -ENOENT;
  604. }
  605. static int rk3368_pinctrl_set_state_simple(struct udevice *dev,
  606. struct udevice *periph)
  607. {
  608. int func;
  609. func = rk3368_pinctrl_get_periph_id(dev, periph);
  610. if (func < 0)
  611. return func;
  612. return rk3368_pinctrl_request(dev, func, 0);
  613. }
  614. static struct pinctrl_ops rk3368_pinctrl_ops = {
  615. .set_state_simple = rk3368_pinctrl_set_state_simple,
  616. .request = rk3368_pinctrl_request,
  617. .get_periph_id = rk3368_pinctrl_get_periph_id,
  618. };
  619. static int rk3368_pinctrl_probe(struct udevice *dev)
  620. {
  621. struct rk3368_pinctrl_priv *priv = dev_get_priv(dev);
  622. int ret = 0;
  623. priv->grf = syscon_get_first_range(ROCKCHIP_SYSCON_GRF);
  624. priv->pmugrf = syscon_get_first_range(ROCKCHIP_SYSCON_PMUGRF);
  625. debug("%s: grf=%p pmugrf:%p\n", __func__, priv->grf, priv->pmugrf);
  626. return ret;
  627. }
  628. static const struct udevice_id rk3368_pinctrl_ids[] = {
  629. { .compatible = "rockchip,rk3368-pinctrl" },
  630. { }
  631. };
  632. U_BOOT_DRIVER(pinctrl_rk3368) = {
  633. .name = "rockchip_rk3368_pinctrl",
  634. .id = UCLASS_PINCTRL,
  635. .of_match = rk3368_pinctrl_ids,
  636. .priv_auto_alloc_size = sizeof(struct rk3368_pinctrl_priv),
  637. .ops = &rk3368_pinctrl_ops,
  638. .bind = dm_scan_fdt_dev,
  639. .probe = rk3368_pinctrl_probe,
  640. };