1 // SPDX-License-Identifier: GPL-2.0+ 2 /* 3 * (C) Copyright 2017 Rockchip Electronics Co., Ltd. 4 */ 5 6 #include <common.h> 7 #include <dm.h> 8 #include <errno.h> 9 #include <syscon.h> 10 #include <asm/io.h> 11 #include <asm/arch/clock.h> 12 #include <asm/arch/grf_rk322x.h> 13 #include <asm/arch/hardware.h> 14 #include <asm/arch/periph.h> 15 #include <dm/pinctrl.h> 16 17 DECLARE_GLOBAL_DATA_PTR; 18 19 /* GRF_GPIO0A_IOMUX */ 20 enum { 21 GPIO0A7_SHIFT = 14, 22 GPIO0A7_MASK = 3 << GPIO0A7_SHIFT, 23 GPIO0A7_GPIO = 0, 24 GPIO0A7_I2C3_SDA, 25 GPIO0A7_HDMI_DDCSDA, 26 27 GPIO0A6_SHIFT = 12, 28 GPIO0A6_MASK = 3 << GPIO0A6_SHIFT, 29 GPIO0A6_GPIO = 0, 30 GPIO0A6_I2C3_SCL, 31 GPIO0A6_HDMI_DDCSCL, 32 33 GPIO0A3_SHIFT = 6, 34 GPIO0A3_MASK = 3 << GPIO0A3_SHIFT, 35 GPIO0A3_GPIO = 0, 36 GPIO0A3_I2C1_SDA, 37 GPIO0A3_SDIO_CMD, 38 39 GPIO0A2_SHIFT = 4, 40 GPIO0A2_MASK = 3 << GPIO0A2_SHIFT, 41 GPIO0A2_GPIO = 0, 42 GPIO0A2_I2C1_SCL, 43 44 GPIO0A1_SHIFT = 2, 45 GPIO0A1_MASK = 3 << GPIO0A1_SHIFT, 46 GPIO0A1_GPIO = 0, 47 GPIO0A1_I2C0_SDA, 48 49 GPIO0A0_SHIFT = 0, 50 GPIO0A0_MASK = 3 << GPIO0A0_SHIFT, 51 GPIO0A0_GPIO = 0, 52 GPIO0A0_I2C0_SCL, 53 }; 54 55 /* GRF_GPIO0B_IOMUX */ 56 enum { 57 GPIO0B7_SHIFT = 14, 58 GPIO0B7_MASK = 3 << GPIO0B7_SHIFT, 59 GPIO0B7_GPIO = 0, 60 GPIO0B7_HDMI_HDP, 61 62 GPIO0B6_SHIFT = 12, 63 GPIO0B6_MASK = 3 << GPIO0B6_SHIFT, 64 GPIO0B6_GPIO = 0, 65 GPIO0B6_I2S_SDI, 66 GPIO0B6_SPI_CSN0, 67 68 GPIO0B5_SHIFT = 10, 69 GPIO0B5_MASK = 3 << GPIO0B5_SHIFT, 70 GPIO0B5_GPIO = 0, 71 GPIO0B5_I2S_SDO, 72 GPIO0B5_SPI_RXD, 73 74 GPIO0B3_SHIFT = 6, 75 GPIO0B3_MASK = 3 << GPIO0B3_SHIFT, 76 GPIO0B3_GPIO = 0, 77 GPIO0B3_I2S1_LRCKRX, 78 GPIO0B3_SPI_TXD, 79 80 GPIO0B1_SHIFT = 2, 81 GPIO0B1_MASK = 3 << GPIO0B1_SHIFT, 82 GPIO0B1_GPIO = 0, 83 GPIO0B1_I2S_SCLK, 84 GPIO0B1_SPI_CLK, 85 86 GPIO0B0_SHIFT = 0, 87 GPIO0B0_MASK = 3, 88 GPIO0B0_GPIO = 0, 89 GPIO0B0_I2S_MCLK, 90 }; 91 92 /* GRF_GPIO0C_IOMUX */ 93 enum { 94 GPIO0C4_SHIFT = 8, 95 GPIO0C4_MASK = 3 << GPIO0C4_SHIFT, 96 GPIO0C4_GPIO = 0, 97 GPIO0C4_HDMI_CECSDA, 98 99 GPIO0C1_SHIFT = 2, 100 GPIO0C1_MASK = 3 << GPIO0C1_SHIFT, 101 GPIO0C1_GPIO = 0, 102 GPIO0C1_UART0_RSTN, 103 GPIO0C1_CLK_OUT1, 104 }; 105 106 /* GRF_GPIO0D_IOMUX */ 107 enum { 108 GPIO0D6_SHIFT = 12, 109 GPIO0D6_MASK = 3 << GPIO0D6_SHIFT, 110 GPIO0D6_GPIO = 0, 111 GPIO0D6_SDIO_PWREN, 112 GPIO0D6_PWM11, 113 114 GPIO0D4_SHIFT = 8, 115 GPIO0D4_MASK = 3 << GPIO0D4_SHIFT, 116 GPIO0D4_GPIO = 0, 117 GPIO0D4_PWM2, 118 119 GPIO0D3_SHIFT = 6, 120 GPIO0D3_MASK = 3 << GPIO0D3_SHIFT, 121 GPIO0D3_GPIO = 0, 122 GPIO0D3_PWM1, 123 124 GPIO0D2_SHIFT = 4, 125 GPIO0D2_MASK = 3 << GPIO0D2_SHIFT, 126 GPIO0D2_GPIO = 0, 127 GPIO0D2_PWM0, 128 }; 129 130 /* GRF_GPIO1A_IOMUX */ 131 enum { 132 GPIO1A7_SHIFT = 14, 133 GPIO1A7_MASK = 1, 134 GPIO1A7_GPIO = 0, 135 GPIO1A7_SDMMC_WRPRT, 136 }; 137 138 /* GRF_GPIO1B_IOMUX */ 139 enum { 140 GPIO1B7_SHIFT = 14, 141 GPIO1B7_MASK = 3 << GPIO1B7_SHIFT, 142 GPIO1B7_GPIO = 0, 143 GPIO1B7_SDMMC_CMD, 144 145 GPIO1B6_SHIFT = 12, 146 GPIO1B6_MASK = 3 << GPIO1B6_SHIFT, 147 GPIO1B6_GPIO = 0, 148 GPIO1B6_SDMMC_PWREN, 149 150 GPIO1B4_SHIFT = 8, 151 GPIO1B4_MASK = 3 << GPIO1B4_SHIFT, 152 GPIO1B4_GPIO = 0, 153 GPIO1B4_SPI_CSN1, 154 GPIO1B4_PWM12, 155 156 GPIO1B3_SHIFT = 6, 157 GPIO1B3_MASK = 3 << GPIO1B3_SHIFT, 158 GPIO1B3_GPIO = 0, 159 GPIO1B3_UART1_RSTN, 160 GPIO1B3_PWM13, 161 162 GPIO1B2_SHIFT = 4, 163 GPIO1B2_MASK = 3 << GPIO1B2_SHIFT, 164 GPIO1B2_GPIO = 0, 165 GPIO1B2_UART1_SIN, 166 GPIO1B2_UART21_SIN, 167 168 GPIO1B1_SHIFT = 2, 169 GPIO1B1_MASK = 3 << GPIO1B1_SHIFT, 170 GPIO1B1_GPIO = 0, 171 GPIO1B1_UART1_SOUT, 172 GPIO1B1_UART21_SOUT, 173 }; 174 175 /* GRF_GPIO1C_IOMUX */ 176 enum { 177 GPIO1C7_SHIFT = 14, 178 GPIO1C7_MASK = 3 << GPIO1C7_SHIFT, 179 GPIO1C7_GPIO = 0, 180 GPIO1C7_NAND_CS3, 181 GPIO1C7_EMMC_RSTNOUT, 182 183 GPIO1C6_SHIFT = 12, 184 GPIO1C6_MASK = 3 << GPIO1C6_SHIFT, 185 GPIO1C6_GPIO = 0, 186 GPIO1C6_NAND_CS2, 187 GPIO1C6_EMMC_CMD, 188 189 GPIO1C5_SHIFT = 10, 190 GPIO1C5_MASK = 3 << GPIO1C5_SHIFT, 191 GPIO1C5_GPIO = 0, 192 GPIO1C5_SDMMC_D3, 193 GPIO1C5_JTAG_TMS, 194 195 GPIO1C4_SHIFT = 8, 196 GPIO1C4_MASK = 3 << GPIO1C4_SHIFT, 197 GPIO1C4_GPIO = 0, 198 GPIO1C4_SDMMC_D2, 199 GPIO1C4_JTAG_TCK, 200 201 GPIO1C3_SHIFT = 6, 202 GPIO1C3_MASK = 3 << GPIO1C3_SHIFT, 203 GPIO1C3_GPIO = 0, 204 GPIO1C3_SDMMC_D1, 205 GPIO1C3_UART2_SIN, 206 207 GPIO1C2_SHIFT = 4, 208 GPIO1C2_MASK = 3 << GPIO1C2_SHIFT, 209 GPIO1C2_GPIO = 0, 210 GPIO1C2_SDMMC_D0, 211 GPIO1C2_UART2_SOUT, 212 213 GPIO1C1_SHIFT = 2, 214 GPIO1C1_MASK = 3 << GPIO1C1_SHIFT, 215 GPIO1C1_GPIO = 0, 216 GPIO1C1_SDMMC_DETN, 217 218 GPIO1C0_SHIFT = 0, 219 GPIO1C0_MASK = 3 << GPIO1C0_SHIFT, 220 GPIO1C0_GPIO = 0, 221 GPIO1C0_SDMMC_CLKOUT, 222 }; 223 224 /* GRF_GPIO1D_IOMUX */ 225 enum { 226 GPIO1D7_SHIFT = 14, 227 GPIO1D7_MASK = 3 << GPIO1D7_SHIFT, 228 GPIO1D7_GPIO = 0, 229 GPIO1D7_NAND_D7, 230 GPIO1D7_EMMC_D7, 231 232 GPIO1D6_SHIFT = 12, 233 GPIO1D6_MASK = 3 << GPIO1D6_SHIFT, 234 GPIO1D6_GPIO = 0, 235 GPIO1D6_NAND_D6, 236 GPIO1D6_EMMC_D6, 237 238 GPIO1D5_SHIFT = 10, 239 GPIO1D5_MASK = 3 << GPIO1D5_SHIFT, 240 GPIO1D5_GPIO = 0, 241 GPIO1D5_NAND_D5, 242 GPIO1D5_EMMC_D5, 243 244 GPIO1D4_SHIFT = 8, 245 GPIO1D4_MASK = 3 << GPIO1D4_SHIFT, 246 GPIO1D4_GPIO = 0, 247 GPIO1D4_NAND_D4, 248 GPIO1D4_EMMC_D4, 249 250 GPIO1D3_SHIFT = 6, 251 GPIO1D3_MASK = 3 << GPIO1D3_SHIFT, 252 GPIO1D3_GPIO = 0, 253 GPIO1D3_NAND_D3, 254 GPIO1D3_EMMC_D3, 255 256 GPIO1D2_SHIFT = 4, 257 GPIO1D2_MASK = 3 << GPIO1D2_SHIFT, 258 GPIO1D2_GPIO = 0, 259 GPIO1D2_NAND_D2, 260 GPIO1D2_EMMC_D2, 261 262 GPIO1D1_SHIFT = 2, 263 GPIO1D1_MASK = 3 << GPIO1D1_SHIFT, 264 GPIO1D1_GPIO = 0, 265 GPIO1D1_NAND_D1, 266 GPIO1D1_EMMC_D1, 267 268 GPIO1D0_SHIFT = 0, 269 GPIO1D0_MASK = 3 << GPIO1D0_SHIFT, 270 GPIO1D0_GPIO = 0, 271 GPIO1D0_NAND_D0, 272 GPIO1D0_EMMC_D0, 273 }; 274 275 /* GRF_GPIO2A_IOMUX */ 276 enum { 277 GPIO2A7_SHIFT = 14, 278 GPIO2A7_MASK = 3 << GPIO2A7_SHIFT, 279 GPIO2A7_GPIO = 0, 280 GPIO2A7_NAND_DQS, 281 GPIO2A7_EMMC_CLKOUT, 282 283 GPIO2A5_SHIFT = 10, 284 GPIO2A5_MASK = 3 << GPIO2A5_SHIFT, 285 GPIO2A5_GPIO = 0, 286 GPIO2A5_NAND_WP, 287 GPIO2A5_EMMC_PWREN, 288 289 GPIO2A4_SHIFT = 8, 290 GPIO2A4_MASK = 3 << GPIO2A4_SHIFT, 291 GPIO2A4_GPIO = 0, 292 GPIO2A4_NAND_RDY, 293 GPIO2A4_EMMC_CMD, 294 295 GPIO2A3_SHIFT = 6, 296 GPIO2A3_MASK = 3 << GPIO2A3_SHIFT, 297 GPIO2A3_GPIO = 0, 298 GPIO2A3_NAND_RDN, 299 GPIO2A4_SPI1_CSN1, 300 301 GPIO2A2_SHIFT = 4, 302 GPIO2A2_MASK = 3 << GPIO2A2_SHIFT, 303 GPIO2A2_GPIO = 0, 304 GPIO2A2_NAND_WRN, 305 GPIO2A4_SPI1_CSN0, 306 307 GPIO2A1_SHIFT = 2, 308 GPIO2A1_MASK = 3 << GPIO2A1_SHIFT, 309 GPIO2A1_GPIO = 0, 310 GPIO2A1_NAND_CLE, 311 GPIO2A1_SPI1_TXD, 312 313 GPIO2A0_SHIFT = 0, 314 GPIO2A0_MASK = 3 << GPIO2A0_SHIFT, 315 GPIO2A0_GPIO = 0, 316 GPIO2A0_NAND_ALE, 317 GPIO2A0_SPI1_RXD, 318 }; 319 320 /* GRF_GPIO2B_IOMUX */ 321 enum { 322 GPIO2B7_SHIFT = 14, 323 GPIO2B7_MASK = 3 << GPIO2B7_SHIFT, 324 GPIO2B7_GPIO = 0, 325 GPIO2B7_GMAC_RXER, 326 327 GPIO2B6_SHIFT = 12, 328 GPIO2B6_MASK = 3 << GPIO2B6_SHIFT, 329 GPIO2B6_GPIO = 0, 330 GPIO2B6_GMAC_CLK, 331 GPIO2B6_MAC_LINK, 332 333 GPIO2B5_SHIFT = 10, 334 GPIO2B5_MASK = 3 << GPIO2B5_SHIFT, 335 GPIO2B5_GPIO = 0, 336 GPIO2B5_GMAC_TXEN, 337 338 GPIO2B4_SHIFT = 8, 339 GPIO2B4_MASK = 3 << GPIO2B4_SHIFT, 340 GPIO2B4_GPIO = 0, 341 GPIO2B4_GMAC_MDIO, 342 343 GPIO2B3_SHIFT = 6, 344 GPIO2B3_MASK = 3 << GPIO2B3_SHIFT, 345 GPIO2B3_GPIO = 0, 346 GPIO2B3_GMAC_RXCLK, 347 348 GPIO2B2_SHIFT = 4, 349 GPIO2B2_MASK = 3 << GPIO2B2_SHIFT, 350 GPIO2B2_GPIO = 0, 351 GPIO2B2_GMAC_CRS, 352 353 GPIO2B1_SHIFT = 2, 354 GPIO2B1_MASK = 3 << GPIO2B1_SHIFT, 355 GPIO2B1_GPIO = 0, 356 GPIO2B1_GMAC_TXCLK, 357 358 GPIO2B0_SHIFT = 0, 359 GPIO2B0_MASK = 3 << GPIO2B0_SHIFT, 360 GPIO2B0_GPIO = 0, 361 GPIO2B0_GMAC_RXDV, 362 GPIO2B0_MAC_SPEED_IOUT, 363 }; 364 365 /* GRF_GPIO2C_IOMUX */ 366 enum { 367 GPIO2C7_SHIFT = 14, 368 GPIO2C7_MASK = 3 << GPIO2C7_SHIFT, 369 GPIO2C7_GPIO = 0, 370 GPIO2C7_GMAC_TXD3, 371 372 GPIO2C6_SHIFT = 12, 373 GPIO2C6_MASK = 3 << GPIO2C6_SHIFT, 374 GPIO2C6_GPIO = 0, 375 GPIO2C6_GMAC_TXD2, 376 377 GPIO2C5_SHIFT = 10, 378 GPIO2C5_MASK = 3 << GPIO2C5_SHIFT, 379 GPIO2C5_GPIO = 0, 380 GPIO2C5_I2C2_SCL, 381 GPIO2C5_GMAC_RXD2, 382 383 GPIO2C4_SHIFT = 8, 384 GPIO2C4_MASK = 3 << GPIO2C4_SHIFT, 385 GPIO2C4_GPIO = 0, 386 GPIO2C4_I2C2_SDA, 387 GPIO2C4_GMAC_RXD3, 388 389 GPIO2C3_SHIFT = 6, 390 GPIO2C3_MASK = 3 << GPIO2C3_SHIFT, 391 GPIO2C3_GPIO = 0, 392 GPIO2C3_GMAC_TXD0, 393 394 GPIO2C2_SHIFT = 4, 395 GPIO2C2_MASK = 3 << GPIO2C2_SHIFT, 396 GPIO2C2_GPIO = 0, 397 GPIO2C2_GMAC_TXD1, 398 399 GPIO2C1_SHIFT = 2, 400 GPIO2C1_MASK = 3 << GPIO2C1_SHIFT, 401 GPIO2C1_GPIO = 0, 402 GPIO2C1_GMAC_RXD0, 403 404 GPIO2C0_SHIFT = 0, 405 GPIO2C0_MASK = 3 << GPIO2C0_SHIFT, 406 GPIO2C0_GPIO = 0, 407 GPIO2C0_GMAC_RXD1, 408 }; 409 410 /* GRF_GPIO2D_IOMUX */ 411 enum { 412 GPIO2D1_SHIFT = 2, 413 GPIO2D1_MASK = 3 << GPIO2D1_SHIFT, 414 GPIO2D1_GPIO = 0, 415 GPIO2D1_GMAC_MDC, 416 417 GPIO2D0_SHIFT = 0, 418 GPIO2D0_MASK = 3, 419 GPIO2D0_GPIO = 0, 420 GPIO2D0_GMAC_COL, 421 }; 422 423 /* GRF_GPIO3C_IOMUX */ 424 enum { 425 GPIO3C6_SHIFT = 12, 426 GPIO3C6_MASK = 3 << GPIO3C6_SHIFT, 427 GPIO3C6_GPIO = 0, 428 GPIO3C6_DRV_VBUS1, 429 430 GPIO3C5_SHIFT = 10, 431 GPIO3C5_MASK = 3 << GPIO3C5_SHIFT, 432 GPIO3C5_GPIO = 0, 433 GPIO3C5_PWM10, 434 435 GPIO3C1_SHIFT = 2, 436 GPIO3C1_MASK = 3 << GPIO3C1_SHIFT, 437 GPIO3C1_GPIO = 0, 438 GPIO3C1_DRV_VBUS, 439 }; 440 441 /* GRF_GPIO3D_IOMUX */ 442 enum { 443 GPIO3D2_SHIFT = 4, 444 GPIO3D2_MASK = 3 << GPIO3D2_SHIFT, 445 GPIO3D2_GPIO = 0, 446 GPIO3D2_PWM3, 447 }; 448 449 /* GRF_CON_IOMUX */ 450 enum { 451 CON_IOMUX_GMACSEL_SHIFT = 15, 452 CON_IOMUX_GMACSEL_MASK = 1 << CON_IOMUX_GMACSEL_SHIFT, 453 CON_IOMUX_GMACSEL_1 = 1, 454 CON_IOMUX_UART1SEL_SHIFT = 11, 455 CON_IOMUX_UART1SEL_MASK = 1 << CON_IOMUX_UART1SEL_SHIFT, 456 CON_IOMUX_UART2SEL_SHIFT = 8, 457 CON_IOMUX_UART2SEL_MASK = 1 << CON_IOMUX_UART2SEL_SHIFT, 458 CON_IOMUX_UART2SEL_2 = 0, 459 CON_IOMUX_UART2SEL_21, 460 CON_IOMUX_EMMCSEL_SHIFT = 7, 461 CON_IOMUX_EMMCSEL_MASK = 1 << CON_IOMUX_EMMCSEL_SHIFT, 462 CON_IOMUX_PWM3SEL_SHIFT = 3, 463 CON_IOMUX_PWM3SEL_MASK = 1 << CON_IOMUX_PWM3SEL_SHIFT, 464 CON_IOMUX_PWM2SEL_SHIFT = 2, 465 CON_IOMUX_PWM2SEL_MASK = 1 << CON_IOMUX_PWM2SEL_SHIFT, 466 CON_IOMUX_PWM1SEL_SHIFT = 1, 467 CON_IOMUX_PWM1SEL_MASK = 1 << CON_IOMUX_PWM1SEL_SHIFT, 468 CON_IOMUX_PWM0SEL_SHIFT = 0, 469 CON_IOMUX_PWM0SEL_MASK = 1 << CON_IOMUX_PWM0SEL_SHIFT, 470 }; 471 472 /* GRF_GPIO2B_E */ 473 enum { 474 GRF_GPIO2B0_E_SHIFT = 0, 475 GRF_GPIO2B0_E_MASK = 3 << GRF_GPIO2B0_E_SHIFT, 476 GRF_GPIO2B1_E_SHIFT = 2, 477 GRF_GPIO2B1_E_MASK = 3 << GRF_GPIO2B1_E_SHIFT, 478 GRF_GPIO2B3_E_SHIFT = 6, 479 GRF_GPIO2B3_E_MASK = 3 << GRF_GPIO2B3_E_SHIFT, 480 GRF_GPIO2B4_E_SHIFT = 8, 481 GRF_GPIO2B4_E_MASK = 3 << GRF_GPIO2B4_E_SHIFT, 482 GRF_GPIO2B5_E_SHIFT = 10, 483 GRF_GPIO2B5_E_MASK = 3 << GRF_GPIO2B5_E_SHIFT, 484 GRF_GPIO2B6_E_SHIFT = 12, 485 GRF_GPIO2B6_E_MASK = 3 << GRF_GPIO2B6_E_SHIFT, 486 }; 487 488 /* GRF_GPIO2C_E */ 489 enum { 490 GRF_GPIO2C0_E_SHIFT = 0, 491 GRF_GPIO2C0_E_MASK = 3 << GRF_GPIO2C0_E_SHIFT, 492 GRF_GPIO2C1_E_SHIFT = 2, 493 GRF_GPIO2C1_E_MASK = 3 << GRF_GPIO2C1_E_SHIFT, 494 GRF_GPIO2C2_E_SHIFT = 4, 495 GRF_GPIO2C2_E_MASK = 3 << GRF_GPIO2C2_E_SHIFT, 496 GRF_GPIO2C3_E_SHIFT = 6, 497 GRF_GPIO2C3_E_MASK = 3 << GRF_GPIO2C3_E_SHIFT, 498 GRF_GPIO2C4_E_SHIFT = 8, 499 GRF_GPIO2C4_E_MASK = 3 << GRF_GPIO2C4_E_SHIFT, 500 GRF_GPIO2C5_E_SHIFT = 10, 501 GRF_GPIO2C5_E_MASK = 3 << GRF_GPIO2C5_E_SHIFT, 502 GRF_GPIO2C6_E_SHIFT = 12, 503 GRF_GPIO2C6_E_MASK = 3 << GRF_GPIO2C6_E_SHIFT, 504 GRF_GPIO2C7_E_SHIFT = 14, 505 GRF_GPIO2C7_E_MASK = 3 << GRF_GPIO2C7_E_SHIFT, 506 }; 507 508 /* GRF_GPIO2D_E */ 509 enum { 510 GRF_GPIO2D1_E_SHIFT = 2, 511 GRF_GPIO2D1_E_MASK = 3 << GRF_GPIO2D1_E_SHIFT, 512 }; 513 514 /* GPIO Bias drive strength settings */ 515 enum GPIO_BIAS { 516 GPIO_BIAS_2MA = 0, 517 GPIO_BIAS_4MA, 518 GPIO_BIAS_8MA, 519 GPIO_BIAS_12MA, 520 }; 521 522 struct rk322x_pinctrl_priv { 523 struct rk322x_grf *grf; 524 }; 525 526 static void pinctrl_rk322x_pwm_config(struct rk322x_grf *grf, int pwm_id) 527 { 528 u32 mux_con = readl(&grf->con_iomux); 529 530 switch (pwm_id) { 531 case PERIPH_ID_PWM0: 532 if (mux_con & CON_IOMUX_PWM0SEL_MASK) 533 rk_clrsetreg(&grf->gpio3c_iomux, GPIO3C5_MASK, 534 GPIO3C5_PWM10 << GPIO3C5_SHIFT); 535 else 536 rk_clrsetreg(&grf->gpio0d_iomux, GPIO0D2_MASK, 537 GPIO0D2_PWM0 << GPIO0D2_SHIFT); 538 break; 539 case PERIPH_ID_PWM1: 540 if (mux_con & CON_IOMUX_PWM1SEL_MASK) 541 rk_clrsetreg(&grf->gpio0d_iomux, GPIO0D6_MASK, 542 GPIO0D6_PWM11 << GPIO0D6_SHIFT); 543 else 544 rk_clrsetreg(&grf->gpio0d_iomux, GPIO0D3_MASK, 545 GPIO0D3_PWM1 << GPIO0D3_SHIFT); 546 break; 547 case PERIPH_ID_PWM2: 548 if (mux_con & CON_IOMUX_PWM2SEL_MASK) 549 rk_clrsetreg(&grf->gpio1b_iomux, GPIO1B4_MASK, 550 GPIO1B4_PWM12 << GPIO1B4_SHIFT); 551 else 552 rk_clrsetreg(&grf->gpio0d_iomux, GPIO0D4_MASK, 553 GPIO0D4_PWM2 << GPIO0D4_SHIFT); 554 break; 555 case PERIPH_ID_PWM3: 556 if (mux_con & CON_IOMUX_PWM3SEL_MASK) 557 rk_clrsetreg(&grf->gpio1b_iomux, GPIO1B3_MASK, 558 GPIO1B3_PWM13 << GPIO1B3_SHIFT); 559 else 560 rk_clrsetreg(&grf->gpio3d_iomux, GPIO3D2_MASK, 561 GPIO3D2_PWM3 << GPIO3D2_SHIFT); 562 break; 563 default: 564 debug("pwm id = %d iomux error!\n", pwm_id); 565 break; 566 } 567 } 568 569 static void pinctrl_rk322x_i2c_config(struct rk322x_grf *grf, int i2c_id) 570 { 571 switch (i2c_id) { 572 case PERIPH_ID_I2C0: 573 rk_clrsetreg(&grf->gpio0a_iomux, 574 GPIO0A1_MASK | GPIO0A0_MASK, 575 GPIO0A1_I2C0_SDA << GPIO0A1_SHIFT | 576 GPIO0A0_I2C0_SCL << GPIO0A0_SHIFT); 577 578 break; 579 case PERIPH_ID_I2C1: 580 rk_clrsetreg(&grf->gpio0a_iomux, 581 GPIO0A3_MASK | GPIO0A2_MASK, 582 GPIO0A3_I2C1_SDA << GPIO0A3_SHIFT | 583 GPIO0A2_I2C1_SCL << GPIO0A2_SHIFT); 584 break; 585 case PERIPH_ID_I2C2: 586 rk_clrsetreg(&grf->gpio2c_iomux, 587 GPIO2C5_MASK | GPIO2C4_MASK, 588 GPIO2C5_I2C2_SCL << GPIO2C5_SHIFT | 589 GPIO2C4_I2C2_SDA << GPIO2C4_SHIFT); 590 break; 591 case PERIPH_ID_I2C3: 592 rk_clrsetreg(&grf->gpio0a_iomux, 593 GPIO0A7_MASK | GPIO0A6_MASK, 594 GPIO0A7_I2C3_SDA << GPIO0A7_SHIFT | 595 GPIO0A6_I2C3_SCL << GPIO0A6_SHIFT); 596 597 break; 598 } 599 } 600 601 static void pinctrl_rk322x_spi_config(struct rk322x_grf *grf, int cs) 602 { 603 switch (cs) { 604 case 0: 605 rk_clrsetreg(&grf->gpio0b_iomux, GPIO0B6_MASK, 606 GPIO0B6_SPI_CSN0 << GPIO0B6_SHIFT); 607 break; 608 case 1: 609 rk_clrsetreg(&grf->gpio1b_iomux, GPIO1B4_MASK, 610 GPIO1B4_SPI_CSN1 << GPIO1B4_SHIFT); 611 break; 612 } 613 rk_clrsetreg(&grf->gpio0b_iomux, 614 GPIO0B1_MASK | GPIO0B3_MASK | GPIO0B5_MASK, 615 GPIO0B5_SPI_RXD << GPIO0B5_SHIFT | 616 GPIO0B3_SPI_TXD << GPIO0B3_SHIFT | 617 GPIO0B1_SPI_CLK << GPIO0B1_SHIFT); 618 } 619 620 static void pinctrl_rk322x_uart_config(struct rk322x_grf *grf, int uart_id) 621 { 622 u32 mux_con = readl(&grf->con_iomux); 623 624 switch (uart_id) { 625 case PERIPH_ID_UART1: 626 if (!(mux_con & CON_IOMUX_UART1SEL_MASK)) 627 rk_clrsetreg(&grf->gpio1b_iomux, 628 GPIO1B1_MASK | GPIO1B2_MASK, 629 GPIO1B1_UART1_SOUT << GPIO1B1_SHIFT | 630 GPIO1B2_UART1_SIN << GPIO1B2_SHIFT); 631 break; 632 case PERIPH_ID_UART2: 633 if (mux_con & CON_IOMUX_UART2SEL_MASK) 634 rk_clrsetreg(&grf->gpio1b_iomux, 635 GPIO1B1_MASK | GPIO1B2_MASK, 636 GPIO1B1_UART21_SOUT << GPIO1B1_SHIFT | 637 GPIO1B2_UART21_SIN << GPIO1B2_SHIFT); 638 else 639 rk_clrsetreg(&grf->gpio1c_iomux, 640 GPIO1C3_MASK | GPIO1C2_MASK, 641 GPIO1C3_UART2_SIN << GPIO1C3_SHIFT | 642 GPIO1C2_UART2_SOUT << GPIO1C2_SHIFT); 643 break; 644 } 645 } 646 647 static void pinctrl_rk322x_sdmmc_config(struct rk322x_grf *grf, int mmc_id) 648 { 649 switch (mmc_id) { 650 case PERIPH_ID_EMMC: 651 rk_clrsetreg(&grf->gpio1d_iomux, 0xffff, 652 GPIO1D7_EMMC_D7 << GPIO1D7_SHIFT | 653 GPIO1D6_EMMC_D6 << GPIO1D6_SHIFT | 654 GPIO1D5_EMMC_D5 << GPIO1D5_SHIFT | 655 GPIO1D4_EMMC_D4 << GPIO1D4_SHIFT | 656 GPIO1D3_EMMC_D3 << GPIO1D3_SHIFT | 657 GPIO1D2_EMMC_D2 << GPIO1D2_SHIFT | 658 GPIO1D1_EMMC_D1 << GPIO1D1_SHIFT | 659 GPIO1D0_EMMC_D0 << GPIO1D0_SHIFT); 660 rk_clrsetreg(&grf->gpio2a_iomux, 661 GPIO2A5_MASK | GPIO2A7_MASK, 662 GPIO2A5_EMMC_PWREN << GPIO2A5_SHIFT | 663 GPIO2A7_EMMC_CLKOUT << GPIO2A7_SHIFT); 664 rk_clrsetreg(&grf->gpio1c_iomux, 665 GPIO1C6_MASK | GPIO1C7_MASK, 666 GPIO1C6_EMMC_CMD << GPIO1C6_SHIFT | 667 GPIO1C7_EMMC_RSTNOUT << GPIO1C6_SHIFT); 668 break; 669 case PERIPH_ID_SDCARD: 670 rk_clrsetreg(&grf->gpio1b_iomux, 671 GPIO1B6_MASK | GPIO1B7_MASK, 672 GPIO1B6_SDMMC_PWREN << GPIO1B6_SHIFT | 673 GPIO1B7_SDMMC_CMD << GPIO1B7_SHIFT); 674 rk_clrsetreg(&grf->gpio1c_iomux, 0xfff, 675 GPIO1C5_SDMMC_D3 << GPIO1C5_SHIFT | 676 GPIO1C4_SDMMC_D2 << GPIO1C4_SHIFT | 677 GPIO1C3_SDMMC_D1 << GPIO1C3_SHIFT | 678 GPIO1C2_SDMMC_D0 << GPIO1C2_SHIFT | 679 GPIO1C1_SDMMC_DETN << GPIO1C1_SHIFT | 680 GPIO1C0_SDMMC_CLKOUT << GPIO1C0_SHIFT); 681 break; 682 } 683 } 684 685 #if CONFIG_IS_ENABLED(GMAC_ROCKCHIP) 686 static void pinctrl_rk322x_gmac_config(struct rk322x_grf *grf, int gmac_id) 687 { 688 switch (gmac_id) { 689 case PERIPH_ID_GMAC: 690 /* set rgmii pins mux */ 691 rk_clrsetreg(&grf->gpio2b_iomux, 692 GPIO2B0_MASK | 693 GPIO2B1_MASK | 694 GPIO2B3_MASK | 695 GPIO2B4_MASK | 696 GPIO2B5_MASK | 697 GPIO2B6_MASK, 698 GPIO2B0_GMAC_RXDV << GPIO2B0_SHIFT | 699 GPIO2B1_GMAC_TXCLK << GPIO2B1_SHIFT | 700 GPIO2B3_GMAC_RXCLK << GPIO2B3_SHIFT | 701 GPIO2B4_GMAC_MDIO << GPIO2B4_SHIFT | 702 GPIO2B5_GMAC_TXEN << GPIO2B5_SHIFT | 703 GPIO2B6_GMAC_CLK << GPIO2B6_SHIFT); 704 705 rk_clrsetreg(&grf->gpio2c_iomux, 706 GPIO2C0_MASK | 707 GPIO2C1_MASK | 708 GPIO2C2_MASK | 709 GPIO2C3_MASK | 710 GPIO2C4_MASK | 711 GPIO2C5_MASK | 712 GPIO2C6_MASK | 713 GPIO2C7_MASK, 714 GPIO2C0_GMAC_RXD1 << GPIO2C0_SHIFT | 715 GPIO2C1_GMAC_RXD0 << GPIO2C1_SHIFT | 716 GPIO2C2_GMAC_TXD1 << GPIO2C2_SHIFT | 717 GPIO2C3_GMAC_TXD0 << GPIO2C3_SHIFT | 718 GPIO2C4_GMAC_RXD3 << GPIO2C4_SHIFT | 719 GPIO2C5_GMAC_RXD2 << GPIO2C5_SHIFT | 720 GPIO2C6_GMAC_TXD2 << GPIO2C6_SHIFT | 721 GPIO2C7_GMAC_TXD3 << GPIO2C7_SHIFT); 722 723 rk_clrsetreg(&grf->gpio2d_iomux, 724 GPIO2D1_MASK, 725 GPIO2D1_GMAC_MDC << GPIO2D1_SHIFT); 726 727 /* 728 * set rgmii tx pins to 12ma drive-strength, 729 * clean others with 2ma. 730 */ 731 rk_clrsetreg(&grf->gpio2_e[1], 732 GRF_GPIO2B0_E_MASK | 733 GRF_GPIO2B1_E_MASK | 734 GRF_GPIO2B3_E_MASK | 735 GRF_GPIO2B4_E_MASK | 736 GRF_GPIO2B5_E_MASK | 737 GRF_GPIO2B6_E_MASK, 738 GPIO_BIAS_2MA << GRF_GPIO2B0_E_SHIFT | 739 GPIO_BIAS_12MA << GRF_GPIO2B1_E_SHIFT | 740 GPIO_BIAS_2MA << GRF_GPIO2B3_E_SHIFT | 741 GPIO_BIAS_2MA << GRF_GPIO2B4_E_SHIFT | 742 GPIO_BIAS_12MA << GRF_GPIO2B5_E_SHIFT | 743 GPIO_BIAS_2MA << GRF_GPIO2B6_E_SHIFT); 744 745 rk_clrsetreg(&grf->gpio2_e[2], 746 GRF_GPIO2C0_E_MASK | 747 GRF_GPIO2C1_E_MASK | 748 GRF_GPIO2C2_E_MASK | 749 GRF_GPIO2C3_E_MASK | 750 GRF_GPIO2C4_E_MASK | 751 GRF_GPIO2C5_E_MASK | 752 GRF_GPIO2C6_E_MASK | 753 GRF_GPIO2C7_E_MASK, 754 GPIO_BIAS_2MA << GRF_GPIO2C0_E_SHIFT | 755 GPIO_BIAS_2MA << GRF_GPIO2C1_E_SHIFT | 756 GPIO_BIAS_12MA << GRF_GPIO2C2_E_SHIFT | 757 GPIO_BIAS_12MA << GRF_GPIO2C3_E_SHIFT | 758 GPIO_BIAS_2MA << GRF_GPIO2C4_E_SHIFT | 759 GPIO_BIAS_2MA << GRF_GPIO2C5_E_SHIFT | 760 GPIO_BIAS_12MA << GRF_GPIO2C6_E_SHIFT | 761 GPIO_BIAS_12MA << GRF_GPIO2C7_E_SHIFT); 762 763 rk_clrsetreg(&grf->gpio2_e[3], 764 GRF_GPIO2D1_E_MASK, 765 GPIO_BIAS_2MA << GRF_GPIO2D1_E_SHIFT); 766 break; 767 default: 768 debug("gmac id = %d iomux error!\n", gmac_id); 769 break; 770 } 771 } 772 #endif 773 774 static int rk322x_pinctrl_request(struct udevice *dev, int func, int flags) 775 { 776 struct rk322x_pinctrl_priv *priv = dev_get_priv(dev); 777 778 debug("%s: func=%x, flags=%x\n", __func__, func, flags); 779 switch (func) { 780 case PERIPH_ID_PWM0: 781 case PERIPH_ID_PWM1: 782 case PERIPH_ID_PWM2: 783 case PERIPH_ID_PWM3: 784 pinctrl_rk322x_pwm_config(priv->grf, func); 785 break; 786 case PERIPH_ID_I2C0: 787 case PERIPH_ID_I2C1: 788 case PERIPH_ID_I2C2: 789 pinctrl_rk322x_i2c_config(priv->grf, func); 790 break; 791 case PERIPH_ID_SPI0: 792 pinctrl_rk322x_spi_config(priv->grf, flags); 793 break; 794 case PERIPH_ID_UART0: 795 case PERIPH_ID_UART1: 796 case PERIPH_ID_UART2: 797 pinctrl_rk322x_uart_config(priv->grf, func); 798 break; 799 case PERIPH_ID_SDMMC0: 800 case PERIPH_ID_SDMMC1: 801 pinctrl_rk322x_sdmmc_config(priv->grf, func); 802 break; 803 #if CONFIG_IS_ENABLED(GMAC_ROCKCHIP) 804 case PERIPH_ID_GMAC: 805 pinctrl_rk322x_gmac_config(priv->grf, func); 806 break; 807 #endif 808 default: 809 return -EINVAL; 810 } 811 812 return 0; 813 } 814 815 static int rk322x_pinctrl_get_periph_id(struct udevice *dev, 816 struct udevice *periph) 817 { 818 u32 cell[3]; 819 int ret; 820 821 ret = fdtdec_get_int_array(gd->fdt_blob, dev_of_offset(periph), 822 "interrupts", cell, ARRAY_SIZE(cell)); 823 if (ret < 0) 824 return -EINVAL; 825 826 switch (cell[1]) { 827 case 12: 828 return PERIPH_ID_SDCARD; 829 case 14: 830 return PERIPH_ID_EMMC; 831 case 36: 832 return PERIPH_ID_I2C0; 833 case 37: 834 return PERIPH_ID_I2C1; 835 case 38: 836 return PERIPH_ID_I2C2; 837 case 49: 838 return PERIPH_ID_SPI0; 839 case 50: 840 return PERIPH_ID_PWM0; 841 case 55: 842 return PERIPH_ID_UART0; 843 case 56: 844 return PERIPH_ID_UART1; 845 case 57: 846 return PERIPH_ID_UART2; 847 #if CONFIG_IS_ENABLED(GMAC_ROCKCHIP) 848 case 24: 849 return PERIPH_ID_GMAC; 850 #endif 851 } 852 return -ENOENT; 853 } 854 855 static int rk322x_pinctrl_set_state_simple(struct udevice *dev, 856 struct udevice *periph) 857 { 858 int func; 859 860 func = rk322x_pinctrl_get_periph_id(dev, periph); 861 if (func < 0) 862 return func; 863 return rk322x_pinctrl_request(dev, func, 0); 864 } 865 866 static struct pinctrl_ops rk322x_pinctrl_ops = { 867 .set_state_simple = rk322x_pinctrl_set_state_simple, 868 .request = rk322x_pinctrl_request, 869 .get_periph_id = rk322x_pinctrl_get_periph_id, 870 }; 871 872 static int rk322x_pinctrl_probe(struct udevice *dev) 873 { 874 struct rk322x_pinctrl_priv *priv = dev_get_priv(dev); 875 876 priv->grf = syscon_get_first_range(ROCKCHIP_SYSCON_GRF); 877 debug("%s: grf=%p\n", __func__, priv->grf); 878 return 0; 879 } 880 881 static const struct udevice_id rk322x_pinctrl_ids[] = { 882 { .compatible = "rockchip,rk3228-pinctrl" }, 883 { } 884 }; 885 886 U_BOOT_DRIVER(pinctrl_rk3228) = { 887 .name = "pinctrl_rk3228", 888 .id = UCLASS_PINCTRL, 889 .of_match = rk322x_pinctrl_ids, 890 .priv_auto_alloc_size = sizeof(struct rk322x_pinctrl_priv), 891 .ops = &rk322x_pinctrl_ops, 892 .bind = dm_scan_fdt_dev, 893 .probe = rk322x_pinctrl_probe, 894 }; 895