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