All of lore.kernel.org
 help / color / mirror / Atom feed
* [U-Boot] [PATCH 0/6] rk3328 pinctrl drvier and sdmmc power fix
@ 2017-05-17  3:44 Kever Yang
  2017-05-17  3:44 ` [U-Boot] [PATCH 1/6] rockchip: pinctrl: move rk3328 grf reg definition in header file Kever Yang
                   ` (5 more replies)
  0 siblings, 6 replies; 19+ messages in thread
From: Kever Yang @ 2017-05-17  3:44 UTC (permalink / raw)
  To: u-boot


Move pinctrl registers definition in GRF header file,
clean code with prefix like other Rockchip SoCs.
Use Fixed regulator(gpio) for sdmmc-pwren instead of
signal controled by mmc controller.


Kever Yang (6):
  rockchip: pinctrl: move rk3328 grf reg definition in header file
  rockchip: pinctrl: rk3328: do not set io routing
  rockchip: evb-rk3328: set uart2 and sdmmc io routing
  rockchip: pinctrl: rk3328: use gpio instead of sdmmc-pwren
  rockchip: evb-rk3328: enable boot on regulator
  rockchip: dts: rk3328-evb: add sdmmc-pwren regulator

 arch/arm/dts/rk3328-evb.dts                     |   8 +
 arch/arm/include/asm/arch-rockchip/grf_rk3328.h | 114 ++++++++++++
 board/rockchip/evb_rk3328/evb-rk3328.c          |  20 ++-
 drivers/pinctrl/rockchip/pinctrl_rk3328.c       | 226 +++++++-----------------
 4 files changed, 205 insertions(+), 163 deletions(-)

-- 
1.9.1

^ permalink raw reply	[flat|nested] 19+ messages in thread

* [U-Boot] [PATCH 1/6] rockchip: pinctrl: move rk3328 grf reg definition in header file
  2017-05-17  3:44 [U-Boot] [PATCH 0/6] rk3328 pinctrl drvier and sdmmc power fix Kever Yang
@ 2017-05-17  3:44 ` Kever Yang
  2017-05-20  2:29   ` Simon Glass
  2017-05-17  3:44 ` [U-Boot] [PATCH 2/6] rockchip: pinctrl: rk3328: do not set io routing Kever Yang
                   ` (4 subsequent siblings)
  5 siblings, 1 reply; 19+ messages in thread
From: Kever Yang @ 2017-05-17  3:44 UTC (permalink / raw)
  To: u-boot

Move GRF register bit definition into GRF header file, remove
'GRF_' prefix and add 'GPIOmXn_' as prefix for bit meaning.

Signed-off-by: Kever Yang <kever.yang@rock-chips.com>
---

 arch/arm/include/asm/arch-rockchip/grf_rk3328.h | 114 +++++++++++++
 drivers/pinctrl/rockchip/pinctrl_rk3328.c       | 205 ++++++------------------
 2 files changed, 164 insertions(+), 155 deletions(-)

diff --git a/arch/arm/include/asm/arch-rockchip/grf_rk3328.h b/arch/arm/include/asm/arch-rockchip/grf_rk3328.h
index 2776cef..40a4de0 100644
--- a/arch/arm/include/asm/arch-rockchip/grf_rk3328.h
+++ b/arch/arm/include/asm/arch-rockchip/grf_rk3328.h
@@ -131,4 +131,118 @@ struct rk3328_sgrf_regs {
 };
 check_member(rk3328_sgrf_regs, hdcp_key_access_mask, 0x2a0);
 
+enum {
+	/* GPIO0A_IOMUX */
+	GPIO0A5_SEL_SHIFT	= 10,
+	GPIO0A5_SEL_MASK	= 3 << GPIO0A5_SEL_SHIFT,
+	GPIO0A5_I2C3_SCL	= 2,
+
+	GPIO0A6_SEL_SHIFT	= 12,
+	GPIO0A6_SEL_MASK	= 3 << GPIO0A6_SEL_SHIFT,
+	GPIO0A6_I2C3_SDA	= 2,
+
+	GPIO0A7_SEL_SHIFT	= 14,
+	GPIO0A7_SEL_MASK	= 3 << GPIO0A7_SEL_SHIFT,
+	GPIO0A7_EMMC_DATA0	= 2,
+
+	/* GPIO0D_IOMUX*/
+	GPIO0D6_SEL_SHIFT	= 12,
+	GPIO0D6_SEL_MASK	= 3 << GPIO0D6_SEL_SHIFT,
+	GPIO0D6_GPIO		= 0,
+	GPIO0D6_SDMMC0_PWRENM1	= 3,
+
+	/* GPIO1A_IOMUX */
+	GPIO1A0_SEL_SHIFT	= 0,
+	GPIO1A0_SEL_MASK	= 0x3fff << GPIO1A0_SEL_SHIFT,
+	GPIO1A0_CARD_DATA_CLK_CMD_DETN	= 0x1555,
+
+	/* GPIO2A_IOMUX */
+	GPIO2A0_SEL_SHIFT	= 0,
+	GPIO2A0_SEL_MASK	= 3 << GPIO2A0_SEL_SHIFT,
+	GPIO2A0_UART2_TX_M1	= 1,
+
+	GPIO2A1_SEL_SHIFT	= 2,
+	GPIO2A1_SEL_MASK	= 3 << GPIO2A1_SEL_SHIFT,
+	GPIO2A1_UART2_RX_M1	= 1,
+
+	GPIO2A2_SEL_SHIFT	= 4,
+	GPIO2A2_SEL_MASK	= 3 << GPIO2A2_SEL_SHIFT,
+	GPIO2A2_PWM_IR		= 1,
+
+	GPIO2A4_SEL_SHIFT	= 8,
+	GPIO2A4_SEL_MASK	= 3 << GPIO2A4_SEL_SHIFT,
+	GPIO2A4_PWM_0		= 1,
+	GPIO2A4_I2C1_SDA,
+
+	GPIO2A5_SEL_SHIFT	= 10,
+	GPIO2A5_SEL_MASK	= 3 << GPIO2A5_SEL_SHIFT,
+	GPIO2A5_PWM_1		= 1,
+	GPIO2A5_I2C1_SCL,
+
+	GPIO2A6_SEL_SHIFT	= 12,
+	GPIO2A6_SEL_MASK	= 3 << GPIO2A6_SEL_SHIFT,
+	GPIO2A6_PWM_2		= 1,
+
+	GPIO2A7_SEL_SHIFT	= 14,
+	GPIO2A7_SEL_MASK	= 3 << GPIO2A7_SEL_SHIFT,
+	GPIO2A7_GPIO		= 0,
+	GPIO2A7_SDMMC0_PWRENM0,
+
+	/* GPIO2BL_IOMUX */
+	GPIO2BL0_SEL_SHIFT	= 0,
+	GPIO2BL0_SEL_MASK	= 0x3f << GPIO2BL0_SEL_SHIFT,
+	GPIO2BL0_SPI_CLK_TX_RX_M0	= 0x15,
+
+	GPIO2BL3_SEL_SHIFT	= 6,
+	GPIO2BL3_SEL_MASK	= 3 << GPIO2BL3_SEL_SHIFT,
+	GPIO2BL3_SPI_CSN0_M0	= 1,
+
+	GPIO2BL4_SEL_SHIFT	= 8,
+	GPIO2BL4_SEL_MASK	= 3 << GPIO2BL4_SEL_SHIFT,
+	GPIO2BL4_SPI_CSN1_M0	= 1,
+
+	GPIO2BL5_SEL_SHIFT	= 10,
+	GPIO2BL5_SEL_MASK	= 3 << GPIO2BL5_SEL_SHIFT,
+	GPIO2BL5_I2C2_SDA	= 1,
+
+	GPIO2BL6_SEL_SHIFT	= 12,
+	GPIO2BL6_SEL_MASK	= 3 << GPIO2BL6_SEL_SHIFT,
+	GPIO2BL6_I2C2_SCL	= 1,
+
+	/* GPIO2D_IOMUX */
+	GPIO2D0_SEL_SHIFT	= 0,
+	GPIO2D0_SEL_MASK	= 3 << GPIO2D0_SEL_SHIFT,
+	GPIO2D0_I2C0_SCL	= 1,
+
+	GPIO2D1_SEL_SHIFT	= 2,
+	GPIO2D1_SEL_MASK	= 3 << GPIO2D1_SEL_SHIFT,
+	GPIO2D1_I2C0_SDA	= 1,
+
+	GPIO2D4_SEL_SHIFT	= 8,
+	GPIO2D4_SEL_MASK	= 0xff << GPIO2D4_SEL_SHIFT,
+	GPIO2D4_EMMC_DATA1234	= 0xaa,
+
+	/* GPIO3C_IOMUX */
+	GPIO3C0_SEL_SHIFT	= 0,
+	GPIO3C0_SEL_MASK	= 0x3fff << GPIO3C0_SEL_SHIFT,
+	GPIO3C0_EMMC_DATA567_PWR_CLK_RSTN_CMD	= 0x2aaa,
+
+	/* COM_IOMUX */
+	UART2_IOMUX_SEL_SHIFT	= 0,
+	UART2_IOMUX_SEL_MASK	= 3 << UART2_IOMUX_SEL_SHIFT,
+	UART2_IOMUX_SEL_M0		= 0,
+	UART2_IOMUX_SEL_M1,
+
+	SPI_IOMUX_SEL_SHIFT = 4,
+	SPI_IOMUX_SEL_MASK	= 3 << SPI_IOMUX_SEL_SHIFT,
+	SPI_IOMUX_SEL_M0	= 0,
+	SPI_IOMUX_SEL_M1,
+	SPI_IOMUX_SEL_M2,
+
+	CARD_IOMUX_SEL_SHIFT	= 7,
+	CARD_IOMUX_SEL_MASK		= 1 << CARD_IOMUX_SEL_SHIFT,
+	CARD_IOMUX_SEL_M0		= 0,
+	CARD_IOMUX_SEL_M1,
+};
+
 #endif	/* __SOC_ROCKCHIP_RK3328_GRF_H__ */
diff --git a/drivers/pinctrl/rockchip/pinctrl_rk3328.c b/drivers/pinctrl/rockchip/pinctrl_rk3328.c
index 5ca6782..63ce7a0 100644
--- a/drivers/pinctrl/rockchip/pinctrl_rk3328.c
+++ b/drivers/pinctrl/rockchip/pinctrl_rk3328.c
@@ -21,135 +21,28 @@ struct rk3328_pinctrl_priv {
 	struct rk3328_grf_regs *grf;
 };
 
-enum {
-	/* GRF_GPIO0A_IOMUX */
-	GRF_GPIO0A5_SEL_SHIFT	= 10,
-	GRF_GPIO0A5_SEL_MASK	= 3 << GRF_GPIO0A5_SEL_SHIFT,
-	GRF_I2C3_SCL		= 2,
-
-	GRF_GPIO0A6_SEL_SHIFT	= 12,
-	GRF_GPIO0A6_SEL_MASK	= 3 << GRF_GPIO0A6_SEL_SHIFT,
-	GRF_I2C3_SDA		= 2,
-
-	GRF_GPIO0A7_SEL_SHIFT	= 14,
-	GRF_GPIO0A7_SEL_MASK	= 3 << GRF_GPIO0A7_SEL_SHIFT,
-	GRF_EMMC_DATA0		= 2,
-
-	/* GRF_GPIO1A_IOMUX */
-	GRF_GPIO1A0_SEL_SHIFT	= 0,
-	GRF_GPIO1A0_SEL_MASK	= 0x3fff << GRF_GPIO1A0_SEL_SHIFT,
-	GRF_CARD_DATA_CLK_CMD_DETN	= 0x1555,
-
-	/* GRF_GPIO2A_IOMUX */
-	GRF_GPIO2A0_SEL_SHIFT	= 0,
-	GRF_GPIO2A0_SEL_MASK	= 3 << GRF_GPIO2A0_SEL_SHIFT,
-	GRF_UART2_TX_M1		= 1,
-
-	GRF_GPIO2A1_SEL_SHIFT	= 2,
-	GRF_GPIO2A1_SEL_MASK	= 3 << GRF_GPIO2A1_SEL_SHIFT,
-	GRF_UART2_RX_M1		= 1,
-
-	GRF_GPIO2A2_SEL_SHIFT	= 4,
-	GRF_GPIO2A2_SEL_MASK	= 3 << GRF_GPIO2A2_SEL_SHIFT,
-	GRF_PWM_IR		= 1,
-
-	GRF_GPIO2A4_SEL_SHIFT	= 8,
-	GRF_GPIO2A4_SEL_MASK	= 3 << GRF_GPIO2A4_SEL_SHIFT,
-	GRF_PWM_0		= 1,
-	GRF_I2C1_SDA,
-
-	GRF_GPIO2A5_SEL_SHIFT	= 10,
-	GRF_GPIO2A5_SEL_MASK	= 3 << GRF_GPIO2A5_SEL_SHIFT,
-	GRF_PWM_1		= 1,
-	GRF_I2C1_SCL,
-
-	GRF_GPIO2A6_SEL_SHIFT	= 12,
-	GRF_GPIO2A6_SEL_MASK	= 3 << GRF_GPIO2A6_SEL_SHIFT,
-	GRF_PWM_2		= 1,
-
-	GRF_GPIO2A7_SEL_SHIFT	= 14,
-	GRF_GPIO2A7_SEL_MASK	= 3 << GRF_GPIO2A7_SEL_SHIFT,
-	GRF_CARD_PWR_EN_M0	= 1,
-
-	/* GRF_GPIO2BL_IOMUX */
-	GRF_GPIO2BL0_SEL_SHIFT	= 0,
-	GRF_GPIO2BL0_SEL_MASK	= 0x3f << GRF_GPIO2BL0_SEL_SHIFT,
-	GRF_SPI_CLK_TX_RX_M0	= 0x15,
-
-	GRF_GPIO2BL3_SEL_SHIFT	= 6,
-	GRF_GPIO2BL3_SEL_MASK	= 3 << GRF_GPIO2BL3_SEL_SHIFT,
-	GRF_SPI_CSN0_M0		= 1,
-
-	GRF_GPIO2BL4_SEL_SHIFT	= 8,
-	GRF_GPIO2BL4_SEL_MASK	= 3 << GRF_GPIO2BL4_SEL_SHIFT,
-	GRF_SPI_CSN1_M0		= 1,
-
-	GRF_GPIO2BL5_SEL_SHIFT	= 10,
-	GRF_GPIO2BL5_SEL_MASK	= 3 << GRF_GPIO2BL5_SEL_SHIFT,
-	GRF_I2C2_SDA		= 1,
-
-	GRF_GPIO2BL6_SEL_SHIFT	= 12,
-	GRF_GPIO2BL6_SEL_MASK	= 3 << GRF_GPIO2BL6_SEL_SHIFT,
-	GRF_I2C2_SCL		= 1,
-
-	/* GRF_GPIO2D_IOMUX */
-	GRF_GPIO2D0_SEL_SHIFT	= 0,
-	GRF_GPIO2D0_SEL_MASK	= 3 << GRF_GPIO2D0_SEL_SHIFT,
-	GRF_I2C0_SCL		= 1,
-
-	GRF_GPIO2D1_SEL_SHIFT	= 2,
-	GRF_GPIO2D1_SEL_MASK	= 3 << GRF_GPIO2D1_SEL_SHIFT,
-	GRF_I2C0_SDA		= 1,
-
-	GRF_GPIO2D4_SEL_SHIFT	= 8,
-	GRF_GPIO2D4_SEL_MASK	= 0xff << GRF_GPIO2D4_SEL_SHIFT,
-	GRF_EMMC_DATA123	= 0xaa,
-
-	/* GRF_GPIO3C_IOMUX */
-	GRF_GPIO3C0_SEL_SHIFT	= 0,
-	GRF_GPIO3C0_SEL_MASK	= 0x3fff << GRF_GPIO3C0_SEL_SHIFT,
-	GRF_EMMC_DATA567_PWR_CLK_RSTN_CMD	= 0x2aaa,
-
-	/* GRF_COM_IOMUX */
-	GRF_UART2_IOMUX_SEL_SHIFT	= 0,
-	GRF_UART2_IOMUX_SEL_MASK	= 3 << GRF_UART2_IOMUX_SEL_SHIFT,
-	GRF_UART2_IOMUX_SEL_M0		= 0,
-	GRF_UART2_IOMUX_SEL_M1,
-
-	GRF_SPI_IOMUX_SEL_SHIFT = 4,
-	GRF_SPI_IOMUX_SEL_MASK	= 3 << GRF_SPI_IOMUX_SEL_SHIFT,
-	GRF_SPI_IOMUX_SEL_M0	= 0,
-	GRF_SPI_IOMUX_SEL_M1,
-	GRF_SPI_IOMUX_SEL_M2,
-
-	GRF_CARD_IOMUX_SEL_SHIFT	= 7,
-	GRF_CARD_IOMUX_SEL_MASK		= 1 << GRF_CARD_IOMUX_SEL_SHIFT,
-	GRF_CARD_IOMUX_SEL_M0		= 0,
-	GRF_CARD_IOMUX_SEL_M1,
-};
-
 static void pinctrl_rk3328_pwm_config(struct rk3328_grf_regs *grf, int pwm_id)
 {
 	switch (pwm_id) {
 	case PERIPH_ID_PWM0:
 		rk_clrsetreg(&grf->gpio2a_iomux,
-			     GRF_GPIO2A4_SEL_MASK,
-			     GRF_PWM_0 << GRF_GPIO2A4_SEL_SHIFT);
+			     GPIO2A4_SEL_MASK,
+			     GPIO2A4_PWM_0 << GPIO2A4_SEL_SHIFT);
 		break;
 	case PERIPH_ID_PWM1:
 		rk_clrsetreg(&grf->gpio2a_iomux,
-			     GRF_GPIO2A5_SEL_MASK,
-			     GRF_PWM_1 << GRF_GPIO2A5_SEL_SHIFT);
+			     GPIO2A5_SEL_MASK,
+			     GPIO2A5_PWM_1 << GPIO2A5_SEL_SHIFT);
 		break;
 	case PERIPH_ID_PWM2:
 		rk_clrsetreg(&grf->gpio2a_iomux,
-			     GRF_GPIO2A6_SEL_MASK,
-			     GRF_PWM_2 << GRF_GPIO2A6_SEL_SHIFT);
+			     GPIO2A6_SEL_MASK,
+			     GPIO2A6_PWM_2 << GPIO2A6_SEL_SHIFT);
 		break;
 	case PERIPH_ID_PWM3:
 		rk_clrsetreg(&grf->gpio2a_iomux,
-			     GRF_GPIO2A2_SEL_MASK,
-			     GRF_PWM_IR << GRF_GPIO2A2_SEL_SHIFT);
+			     GPIO2A2_SEL_MASK,
+			     GPIO2A2_PWM_IR << GPIO2A2_SEL_SHIFT);
 		break;
 	default:
 		debug("pwm id = %d iomux error!\n", pwm_id);
@@ -162,27 +55,27 @@ static void pinctrl_rk3328_i2c_config(struct rk3328_grf_regs *grf, int i2c_id)
 	switch (i2c_id) {
 	case PERIPH_ID_I2C0:
 		rk_clrsetreg(&grf->gpio2d_iomux,
-			     GRF_GPIO2D0_SEL_MASK | GRF_GPIO2D1_SEL_MASK,
-			     GRF_I2C0_SCL << GRF_GPIO2D0_SEL_SHIFT
-			     | GRF_I2C0_SDA << GRF_GPIO2D1_SEL_SHIFT);
+			     GPIO2D0_SEL_MASK | GPIO2D1_SEL_MASK,
+			     GPIO2D0_I2C0_SCL << GPIO2D0_SEL_SHIFT |
+			     GPIO2D1_I2C0_SDA << GPIO2D1_SEL_SHIFT);
 		break;
 	case PERIPH_ID_I2C1:
 		rk_clrsetreg(&grf->gpio2a_iomux,
-			     GRF_GPIO2A4_SEL_MASK | GRF_GPIO2A5_SEL_MASK,
-			     GRF_I2C1_SCL << GRF_GPIO2A5_SEL_SHIFT
-			     | GRF_I2C1_SDA << GRF_GPIO2A4_SEL_SHIFT);
+			     GPIO2A4_SEL_MASK | GPIO2A5_SEL_MASK,
+			     GPIO2A5_I2C1_SCL << GPIO2A5_SEL_SHIFT |
+			     GPIO2A4_I2C1_SDA << GPIO2A4_SEL_SHIFT);
 		break;
 	case PERIPH_ID_I2C2:
 		rk_clrsetreg(&grf->gpio2bl_iomux,
-			     GRF_GPIO2BL5_SEL_MASK | GRF_GPIO2BL6_SEL_MASK,
-			     GRF_I2C2_SCL << GRF_GPIO2BL6_SEL_SHIFT
-			     | GRF_I2C2_SDA << GRF_GPIO2BL6_SEL_SHIFT);
+			     GPIO2BL5_SEL_MASK | GPIO2BL6_SEL_MASK,
+			     GPIO2BL6_I2C2_SCL << GPIO2BL6_SEL_SHIFT |
+			     GPIO2BL5_I2C2_SDA << GPIO2BL5_SEL_SHIFT);
 		break;
 	case PERIPH_ID_I2C3:
 		rk_clrsetreg(&grf->gpio0a_iomux,
-			     GRF_GPIO0A5_SEL_MASK | GRF_GPIO0A6_SEL_MASK,
-			     GRF_I2C3_SCL << GRF_GPIO0A5_SEL_SHIFT
-			     | GRF_I2C3_SDA << GRF_GPIO0A6_SEL_SHIFT);
+			     GPIO0A5_SEL_MASK | GPIO0A6_SEL_MASK,
+			     GPIO0A5_I2C3_SCL << GPIO0A5_SEL_SHIFT |
+			     GPIO0A6_I2C3_SDA << GPIO0A6_SEL_SHIFT);
 		break;
 	default:
 		debug("i2c id = %d iomux error!\n", i2c_id);
@@ -205,28 +98,30 @@ static int pinctrl_rk3328_spi_config(struct rk3328_grf_regs *grf,
 				     enum periph_id spi_id, int cs)
 {
 	rk_clrsetreg(&grf->com_iomux,
-		     GRF_SPI_IOMUX_SEL_MASK,
-		     GRF_SPI_IOMUX_SEL_M0 << GRF_SPI_IOMUX_SEL_SHIFT);
+		     SPI_IOMUX_SEL_MASK,
+		     SPI_IOMUX_SEL_M0 << SPI_IOMUX_SEL_SHIFT);
 
 	switch (spi_id) {
 	case PERIPH_ID_SPI0:
 		switch (cs) {
 		case 0:
 			rk_clrsetreg(&grf->gpio2bl_iomux,
-				     GRF_GPIO2BL3_SEL_MASK,
-				     GRF_SPI_CSN0_M0 << GRF_GPIO2BL3_SEL_SHIFT);
+				     GPIO2BL3_SEL_MASK,
+				     GPIO2BL3_SPI_CSN0_M0
+				     << GPIO2BL3_SEL_SHIFT);
 			break;
 		case 1:
 			rk_clrsetreg(&grf->gpio2bl_iomux,
-				     GRF_GPIO2BL4_SEL_MASK,
-				     GRF_SPI_CSN1_M0 << GRF_GPIO2BL4_SEL_SHIFT);
+				     GPIO2BL4_SEL_MASK,
+				     GPIO2BL4_SPI_CSN1_M0
+				     << GPIO2BL4_SEL_SHIFT);
 			break;
 		default:
 			goto err;
 		}
 		rk_clrsetreg(&grf->gpio2bl_iomux,
-			     GRF_GPIO2BL0_SEL_MASK,
-			     GRF_SPI_CLK_TX_RX_M0 << GRF_GPIO2BL0_SEL_SHIFT);
+			     GPIO2BL0_SEL_MASK,
+			     GPIO2BL0_SPI_CLK_TX_RX_M0 << GPIO2BL0_SEL_SHIFT);
 		break;
 	default:
 		goto err;
@@ -245,13 +140,13 @@ static void pinctrl_rk3328_uart_config(struct rk3328_grf_regs *grf, int uart_id)
 		break;
 		/* uart2 iomux select m1 */
 		rk_clrsetreg(&grf->com_iomux,
-			     GRF_UART2_IOMUX_SEL_MASK,
-			     GRF_UART2_IOMUX_SEL_M1
-			     << GRF_UART2_IOMUX_SEL_SHIFT);
+			     UART2_IOMUX_SEL_MASK,
+			     UART2_IOMUX_SEL_M1
+			     << UART2_IOMUX_SEL_SHIFT);
 		rk_clrsetreg(&grf->gpio2a_iomux,
-			     GRF_GPIO2A0_SEL_MASK | GRF_GPIO2A1_SEL_MASK,
-			     GRF_UART2_TX_M1 << GRF_GPIO2A0_SEL_SHIFT |
-			     GRF_UART2_RX_M1 << GRF_GPIO2A1_SEL_SHIFT);
+			     GPIO2A0_SEL_MASK | GPIO2A1_SEL_MASK,
+			     GPIO2A0_UART2_TX_M1 << GPIO2A0_SEL_SHIFT |
+			     GPIO2A1_UART2_RX_M1 << GPIO2A1_SEL_SHIFT);
 		break;
 	case PERIPH_ID_UART0:
 	case PERIPH_ID_UART1:
@@ -269,28 +164,28 @@ static void pinctrl_rk3328_sdmmc_config(struct rk3328_grf_regs *grf,
 	switch (mmc_id) {
 	case PERIPH_ID_EMMC:
 		rk_clrsetreg(&grf->gpio0a_iomux,
-			     GRF_GPIO0A7_SEL_MASK,
-			     GRF_EMMC_DATA0 << GRF_GPIO0A7_SEL_SHIFT);
+			     GPIO0A7_SEL_MASK,
+			     GPIO0A7_EMMC_DATA0 << GPIO0A7_SEL_SHIFT);
 		rk_clrsetreg(&grf->gpio2d_iomux,
-			     GRF_GPIO2D4_SEL_MASK,
-			     GRF_EMMC_DATA123 << GRF_GPIO2D4_SEL_SHIFT);
+			     GPIO2D4_SEL_MASK,
+			     GPIO2D4_EMMC_DATA1234 << GPIO2D4_SEL_SHIFT);
 		rk_clrsetreg(&grf->gpio3c_iomux,
-			     GRF_GPIO3C0_SEL_MASK,
-			     GRF_EMMC_DATA567_PWR_CLK_RSTN_CMD
-			     << GRF_GPIO3C0_SEL_SHIFT);
+			     GPIO3C0_SEL_MASK,
+			     GPIO3C0_EMMC_DATA567_PWR_CLK_RSTN_CMD
+			     << GPIO3C0_SEL_SHIFT);
 		break;
 	case PERIPH_ID_SDCARD:
 		/* sdcard iomux select m0 */
 		rk_clrsetreg(&grf->com_iomux,
-			     GRF_CARD_IOMUX_SEL_MASK,
-			     GRF_CARD_IOMUX_SEL_M0 << GRF_CARD_IOMUX_SEL_SHIFT);
+			     CARD_IOMUX_SEL_MASK,
+			     CARD_IOMUX_SEL_M0 << CARD_IOMUX_SEL_SHIFT);
 		rk_clrsetreg(&grf->gpio2a_iomux,
-			     GRF_GPIO2A7_SEL_MASK,
-			     GRF_CARD_PWR_EN_M0 << GRF_GPIO2A7_SEL_SHIFT);
+			     GPIO2A7_SEL_MASK,
+			     GPIO2A7_SDMMC0_PWRENM0 << GPIO2A7_SEL_SHIFT);
 		rk_clrsetreg(&grf->gpio1a_iomux,
-			     GRF_GPIO1A0_SEL_MASK,
-			     GRF_CARD_DATA_CLK_CMD_DETN
-			     << GRF_GPIO1A0_SEL_SHIFT);
+			     GPIO1A0_SEL_MASK,
+			     GPIO1A0_CARD_DATA_CLK_CMD_DETN
+			     << GPIO1A0_SEL_SHIFT);
 		break;
 	default:
 		debug("mmc id = %d iomux error!\n", mmc_id);
-- 
1.9.1

^ permalink raw reply related	[flat|nested] 19+ messages in thread

* [U-Boot] [PATCH 2/6] rockchip: pinctrl: rk3328: do not set io routing
  2017-05-17  3:44 [U-Boot] [PATCH 0/6] rk3328 pinctrl drvier and sdmmc power fix Kever Yang
  2017-05-17  3:44 ` [U-Boot] [PATCH 1/6] rockchip: pinctrl: move rk3328 grf reg definition in header file Kever Yang
@ 2017-05-17  3:44 ` Kever Yang
  2017-05-20  2:29   ` Simon Glass
  2017-05-17  3:44 ` [U-Boot] [PATCH 3/6] rockchip: evb-rk3328: set uart2 and sdmmc " Kever Yang
                   ` (3 subsequent siblings)
  5 siblings, 1 reply; 19+ messages in thread
From: Kever Yang @ 2017-05-17  3:44 UTC (permalink / raw)
  To: u-boot

In rk3328, some function pin may have more than one choice, and muxed
with more than one IO, for example, the UART2 controller IO,
TX and RX, have 3 choice(setting in com_iomux):
- M0 which mux with GPIO1A0/GPIO1A1
- M1 which mux with GPIO2A0/GPIO2A1
- usb2phy which mux with USB2.0 DP/DM pin.

We should not decide which group to use in pinctrl driver,
for it may be different in different board, it should goes to board
file, and the pinctrl file should setting correct iomux depends on
the com_iomux value.

Signed-off-by: Kever Yang <kever.yang@rock-chips.com>
---

 arch/arm/include/asm/arch-rockchip/grf_rk3328.h | 30 ++++++++--------
 drivers/pinctrl/rockchip/pinctrl_rk3328.c       | 47 +++++++++++++++----------
 2 files changed, 43 insertions(+), 34 deletions(-)

diff --git a/arch/arm/include/asm/arch-rockchip/grf_rk3328.h b/arch/arm/include/asm/arch-rockchip/grf_rk3328.h
index 40a4de0..f0a0781 100644
--- a/arch/arm/include/asm/arch-rockchip/grf_rk3328.h
+++ b/arch/arm/include/asm/arch-rockchip/grf_rk3328.h
@@ -228,21 +228,21 @@ enum {
 	GPIO3C0_EMMC_DATA567_PWR_CLK_RSTN_CMD	= 0x2aaa,
 
 	/* COM_IOMUX */
-	UART2_IOMUX_SEL_SHIFT	= 0,
-	UART2_IOMUX_SEL_MASK	= 3 << UART2_IOMUX_SEL_SHIFT,
-	UART2_IOMUX_SEL_M0		= 0,
-	UART2_IOMUX_SEL_M1,
-
-	SPI_IOMUX_SEL_SHIFT = 4,
-	SPI_IOMUX_SEL_MASK	= 3 << SPI_IOMUX_SEL_SHIFT,
-	SPI_IOMUX_SEL_M0	= 0,
-	SPI_IOMUX_SEL_M1,
-	SPI_IOMUX_SEL_M2,
-
-	CARD_IOMUX_SEL_SHIFT	= 7,
-	CARD_IOMUX_SEL_MASK		= 1 << CARD_IOMUX_SEL_SHIFT,
-	CARD_IOMUX_SEL_M0		= 0,
-	CARD_IOMUX_SEL_M1,
+	IOMUX_SEL_UART2_SHIFT	= 0,
+	IOMUX_SEL_UART2_MASK	= 3 << IOMUX_SEL_UART2_SHIFT,
+	IOMUX_SEL_UART2_M0	= 0,
+	IOMUX_SEL_UART2_M1,
+
+	IOMUX_SEL_SPI_SHIFT	= 4,
+	IOMUX_SEL_SPI_MASK	= 3 << IOMUX_SEL_SPI_SHIFT,
+	IOMUX_SEL_SPI_M0	= 0,
+	IOMUX_SEL_SPI_M1,
+	IOMUX_SEL_SPI_M2,
+
+	IOMUX_SEL_SDMMC_SHIFT	= 7,
+	IOMUX_SEL_SDMMC_MASK	= 1 << IOMUX_SEL_SDMMC_SHIFT,
+	IOMUX_SEL_SDMMC_M0	= 0,
+	IOMUX_SEL_SDMMC_M1,
 };
 
 #endif	/* __SOC_ROCKCHIP_RK3328_GRF_H__ */
diff --git a/drivers/pinctrl/rockchip/pinctrl_rk3328.c b/drivers/pinctrl/rockchip/pinctrl_rk3328.c
index 63ce7a0..716d02a 100644
--- a/drivers/pinctrl/rockchip/pinctrl_rk3328.c
+++ b/drivers/pinctrl/rockchip/pinctrl_rk3328.c
@@ -97,9 +97,13 @@ static void pinctrl_rk3328_lcdc_config(struct rk3328_grf_regs *grf, int lcd_id)
 static int pinctrl_rk3328_spi_config(struct rk3328_grf_regs *grf,
 				     enum periph_id spi_id, int cs)
 {
-	rk_clrsetreg(&grf->com_iomux,
-		     SPI_IOMUX_SEL_MASK,
-		     SPI_IOMUX_SEL_M0 << SPI_IOMUX_SEL_SHIFT);
+	u32 com_iomux = readl(&grf->com_iomux);
+
+	if ((com_iomux & IOMUX_SEL_SPI_MASK) !=
+		IOMUX_SEL_SPI_M0 << IOMUX_SEL_SPI_SHIFT) {
+		debug("driver do not support iomux other than m0\n");
+		goto err;
+	}
 
 	switch (spi_id) {
 	case PERIPH_ID_SPI0:
@@ -135,18 +139,17 @@ err:
 
 static void pinctrl_rk3328_uart_config(struct rk3328_grf_regs *grf, int uart_id)
 {
+	u32 com_iomux = readl(&grf->com_iomux);
+
 	switch (uart_id) {
 	case PERIPH_ID_UART2:
 		break;
-		/* uart2 iomux select m1 */
-		rk_clrsetreg(&grf->com_iomux,
-			     UART2_IOMUX_SEL_MASK,
-			     UART2_IOMUX_SEL_M1
-			     << UART2_IOMUX_SEL_SHIFT);
-		rk_clrsetreg(&grf->gpio2a_iomux,
-			     GPIO2A0_SEL_MASK | GPIO2A1_SEL_MASK,
-			     GPIO2A0_UART2_TX_M1 << GPIO2A0_SEL_SHIFT |
-			     GPIO2A1_UART2_RX_M1 << GPIO2A1_SEL_SHIFT);
+		if (com_iomux & IOMUX_SEL_UART2_MASK)
+			rk_clrsetreg(&grf->gpio2a_iomux,
+				     GPIO2A0_SEL_MASK | GPIO2A1_SEL_MASK,
+				     GPIO2A0_UART2_TX_M1 << GPIO2A0_SEL_SHIFT |
+				     GPIO2A1_UART2_RX_M1 << GPIO2A1_SEL_SHIFT);
+
 		break;
 	case PERIPH_ID_UART0:
 	case PERIPH_ID_UART1:
@@ -161,6 +164,8 @@ static void pinctrl_rk3328_uart_config(struct rk3328_grf_regs *grf, int uart_id)
 static void pinctrl_rk3328_sdmmc_config(struct rk3328_grf_regs *grf,
 					int mmc_id)
 {
+	u32 com_iomux = readl(&grf->com_iomux);
+
 	switch (mmc_id) {
 	case PERIPH_ID_EMMC:
 		rk_clrsetreg(&grf->gpio0a_iomux,
@@ -175,13 +180,17 @@ static void pinctrl_rk3328_sdmmc_config(struct rk3328_grf_regs *grf,
 			     << GPIO3C0_SEL_SHIFT);
 		break;
 	case PERIPH_ID_SDCARD:
-		/* sdcard iomux select m0 */
-		rk_clrsetreg(&grf->com_iomux,
-			     CARD_IOMUX_SEL_MASK,
-			     CARD_IOMUX_SEL_M0 << CARD_IOMUX_SEL_SHIFT);
-		rk_clrsetreg(&grf->gpio2a_iomux,
-			     GPIO2A7_SEL_MASK,
-			     GPIO2A7_SDMMC0_PWRENM0 << GPIO2A7_SEL_SHIFT);
+		/* SDMMC_PWREN use GPIO and init as regulator-fiexed  */
+		if (com_iomux & IOMUX_SEL_SDMMC_MASK)
+			rk_clrsetreg(&grf->gpio0d_iomux,
+				     GPIO0D6_SEL_MASK,
+				     GPIO0D6_SDMMC0_PWRENM1
+				     << GPIO0D6_SEL_SHIFT);
+		else
+			rk_clrsetreg(&grf->gpio2a_iomux,
+				     GPIO2A7_SEL_MASK,
+				     GPIO2A7_SDMMC0_PWRENM0
+				     << GPIO2A7_SEL_SHIFT);
 		rk_clrsetreg(&grf->gpio1a_iomux,
 			     GPIO1A0_SEL_MASK,
 			     GPIO1A0_CARD_DATA_CLK_CMD_DETN
-- 
1.9.1

^ permalink raw reply related	[flat|nested] 19+ messages in thread

* [U-Boot] [PATCH 3/6] rockchip: evb-rk3328: set uart2 and sdmmc io routing
  2017-05-17  3:44 [U-Boot] [PATCH 0/6] rk3328 pinctrl drvier and sdmmc power fix Kever Yang
  2017-05-17  3:44 ` [U-Boot] [PATCH 1/6] rockchip: pinctrl: move rk3328 grf reg definition in header file Kever Yang
  2017-05-17  3:44 ` [U-Boot] [PATCH 2/6] rockchip: pinctrl: rk3328: do not set io routing Kever Yang
@ 2017-05-17  3:44 ` Kever Yang
  2017-05-20  2:29   ` Simon Glass
  2017-05-17  3:44 ` [U-Boot] [PATCH 4/6] rockchip: pinctrl: rk3328: use gpio instead of sdmmc-pwren Kever Yang
                   ` (2 subsequent siblings)
  5 siblings, 1 reply; 19+ messages in thread
From: Kever Yang @ 2017-05-17  3:44 UTC (permalink / raw)
  To: u-boot

In rk3328, some function pin may have more than one choice, and muxed
with more than one IO, for example, the UART2 controller IO,
TX and RX, have 3 choice(setting in com_iomux):
- M0 which mux with GPIO1A0/GPIO1A1
- M1 which mux with GPIO2A0/GPIO2A1
- usb2phy which mux with USB2.0 DP/DM pin.

We should set these IO routing in board file.

Signed-off-by: Kever Yang <kever.yang@rock-chips.com>
---

 board/rockchip/evb_rk3328/evb-rk3328.c | 12 ++++++++++++
 1 file changed, 12 insertions(+)

diff --git a/board/rockchip/evb_rk3328/evb-rk3328.c b/board/rockchip/evb_rk3328/evb-rk3328.c
index a7895cb..d9dc782 100644
--- a/board/rockchip/evb_rk3328/evb-rk3328.c
+++ b/board/rockchip/evb_rk3328/evb-rk3328.c
@@ -5,7 +5,10 @@
  */
 
 #include <common.h>
+#include <asm/arch/hardware.h>
+#include <asm/arch/grf_rk3328.h>
 #include <asm/armv8/mmu.h>
+#include <asm/io.h>
 #include <dwc3-uboot.h>
 #include <usb.h>
 
@@ -13,6 +16,15 @@ DECLARE_GLOBAL_DATA_PTR;
 
 int board_init(void)
 {
+#define GRF_BASE	0xff100000
+	struct rk3328_grf_regs * const grf = (void *)GRF_BASE;
+
+	/* uart2 select m1, sdcard select m1*/
+	rk_clrsetreg(&grf->com_iomux,
+		     IOMUX_SEL_UART2_MASK | IOMUX_SEL_SDMMC_MASK,
+		     IOMUX_SEL_UART2_M1 << IOMUX_SEL_UART2_SHIFT |
+		     IOMUX_SEL_SDMMC_M1 << IOMUX_SEL_SDMMC_SHIFT);
+
 	return 0;
 }
 
-- 
1.9.1

^ permalink raw reply related	[flat|nested] 19+ messages in thread

* [U-Boot] [PATCH 4/6] rockchip: pinctrl: rk3328: use gpio instead of sdmmc-pwren
  2017-05-17  3:44 [U-Boot] [PATCH 0/6] rk3328 pinctrl drvier and sdmmc power fix Kever Yang
                   ` (2 preceding siblings ...)
  2017-05-17  3:44 ` [U-Boot] [PATCH 3/6] rockchip: evb-rk3328: set uart2 and sdmmc " Kever Yang
@ 2017-05-17  3:44 ` Kever Yang
  2017-05-20  2:29   ` Simon Glass
  2017-05-17  3:44 ` [U-Boot] [PATCH 5/6] rockchip: evb-rk3328: enable boot on regulator Kever Yang
  2017-05-17  3:44 ` [U-Boot] [PATCH 6/6] rockchip: dts: rk3328-evb: add sdmmc-pwren regulator Kever Yang
  5 siblings, 1 reply; 19+ messages in thread
From: Kever Yang @ 2017-05-17  3:44 UTC (permalink / raw)
  To: u-boot

SDMMC-PWREN is a pin to control voltage for SDMMC IO, it may
be high active or low active, the dwmmc driver always assume
the sdmmc-pwren as high active.

Kernel treat this pin as fixed regulator instead of a pin from
controller, and then it can set in dts file upon board schematic,
that's a good solution, we can also do this in u-boot.

Signed-off-by: Kever Yang <kever.yang@rock-chips.com>
---

 drivers/pinctrl/rockchip/pinctrl_rk3328.c | 6 ++----
 1 file changed, 2 insertions(+), 4 deletions(-)

diff --git a/drivers/pinctrl/rockchip/pinctrl_rk3328.c b/drivers/pinctrl/rockchip/pinctrl_rk3328.c
index 716d02a..0995d9f 100644
--- a/drivers/pinctrl/rockchip/pinctrl_rk3328.c
+++ b/drivers/pinctrl/rockchip/pinctrl_rk3328.c
@@ -184,13 +184,11 @@ static void pinctrl_rk3328_sdmmc_config(struct rk3328_grf_regs *grf,
 		if (com_iomux & IOMUX_SEL_SDMMC_MASK)
 			rk_clrsetreg(&grf->gpio0d_iomux,
 				     GPIO0D6_SEL_MASK,
-				     GPIO0D6_SDMMC0_PWRENM1
-				     << GPIO0D6_SEL_SHIFT);
+				     GPIO0D6_GPIO << GPIO0D6_SEL_SHIFT);
 		else
 			rk_clrsetreg(&grf->gpio2a_iomux,
 				     GPIO2A7_SEL_MASK,
-				     GPIO2A7_SDMMC0_PWRENM0
-				     << GPIO2A7_SEL_SHIFT);
+				     GPIO2A7_GPIO << GPIO2A7_SEL_SHIFT);
 		rk_clrsetreg(&grf->gpio1a_iomux,
 			     GPIO1A0_SEL_MASK,
 			     GPIO1A0_CARD_DATA_CLK_CMD_DETN
-- 
1.9.1

^ permalink raw reply related	[flat|nested] 19+ messages in thread

* [U-Boot] [PATCH 5/6] rockchip: evb-rk3328: enable boot on regulator
  2017-05-17  3:44 [U-Boot] [PATCH 0/6] rk3328 pinctrl drvier and sdmmc power fix Kever Yang
                   ` (3 preceding siblings ...)
  2017-05-17  3:44 ` [U-Boot] [PATCH 4/6] rockchip: pinctrl: rk3328: use gpio instead of sdmmc-pwren Kever Yang
@ 2017-05-17  3:44 ` Kever Yang
  2017-05-20  2:29   ` Simon Glass
  2017-05-17  3:44 ` [U-Boot] [PATCH 6/6] rockchip: dts: rk3328-evb: add sdmmc-pwren regulator Kever Yang
  5 siblings, 1 reply; 19+ messages in thread
From: Kever Yang @ 2017-05-17  3:44 UTC (permalink / raw)
  To: u-boot

Enable all the boot-on regulator in default.

Signed-off-by: Kever Yang <kever.yang@rock-chips.com>
---

 board/rockchip/evb_rk3328/evb-rk3328.c | 8 +++++++-
 1 file changed, 7 insertions(+), 1 deletion(-)

diff --git a/board/rockchip/evb_rk3328/evb-rk3328.c b/board/rockchip/evb_rk3328/evb-rk3328.c
index d9dc782..eb15cee 100644
--- a/board/rockchip/evb_rk3328/evb-rk3328.c
+++ b/board/rockchip/evb_rk3328/evb-rk3328.c
@@ -10,12 +10,14 @@
 #include <asm/armv8/mmu.h>
 #include <asm/io.h>
 #include <dwc3-uboot.h>
+#include <power/regulator.h>
 #include <usb.h>
 
 DECLARE_GLOBAL_DATA_PTR;
 
 int board_init(void)
 {
+	int ret;
 #define GRF_BASE	0xff100000
 	struct rk3328_grf_regs * const grf = (void *)GRF_BASE;
 
@@ -25,7 +27,11 @@ int board_init(void)
 		     IOMUX_SEL_UART2_M1 << IOMUX_SEL_UART2_SHIFT |
 		     IOMUX_SEL_SDMMC_M1 << IOMUX_SEL_SDMMC_SHIFT);
 
-	return 0;
+	ret = regulators_enable_boot_on(false);
+	if (ret)
+		debug("%s: Cannot enable boot on regulator\n", __func__);
+
+	return ret;
 }
 
 int dram_init(void)
-- 
1.9.1

^ permalink raw reply related	[flat|nested] 19+ messages in thread

* [U-Boot] [PATCH 6/6] rockchip: dts: rk3328-evb: add sdmmc-pwren regulator
  2017-05-17  3:44 [U-Boot] [PATCH 0/6] rk3328 pinctrl drvier and sdmmc power fix Kever Yang
                   ` (4 preceding siblings ...)
  2017-05-17  3:44 ` [U-Boot] [PATCH 5/6] rockchip: evb-rk3328: enable boot on regulator Kever Yang
@ 2017-05-17  3:44 ` Kever Yang
  2017-05-20  2:29   ` Simon Glass
  5 siblings, 1 reply; 19+ messages in thread
From: Kever Yang @ 2017-05-17  3:44 UTC (permalink / raw)
  To: u-boot

Use fixed regulator for sdmmc-pwren for sdmmc power.

Signed-off-by: Kever Yang <kever.yang@rock-chips.com>
---

 arch/arm/dts/rk3328-evb.dts | 8 ++++++++
 1 file changed, 8 insertions(+)

diff --git a/arch/arm/dts/rk3328-evb.dts b/arch/arm/dts/rk3328-evb.dts
index 01794ed..7b14982 100644
--- a/arch/arm/dts/rk3328-evb.dts
+++ b/arch/arm/dts/rk3328-evb.dts
@@ -14,6 +14,14 @@
 	chosen {
 		stdout-path = &uart2;
 	};
+
+	vcc3v3_sdmmc: sdmmc-pwren {
+		compatible = "regulator-fixed";
+		regulator-name = "vcc3v3";
+		gpio = <&gpio0 30 GPIO_ACTIVE_LOW>;
+		regulator-always-on;
+		regulator-boot-on;
+	};
 };
 
 &uart2 {
-- 
1.9.1

^ permalink raw reply related	[flat|nested] 19+ messages in thread

* [U-Boot] [PATCH 1/6] rockchip: pinctrl: move rk3328 grf reg definition in header file
  2017-05-17  3:44 ` [U-Boot] [PATCH 1/6] rockchip: pinctrl: move rk3328 grf reg definition in header file Kever Yang
@ 2017-05-20  2:29   ` Simon Glass
  0 siblings, 0 replies; 19+ messages in thread
From: Simon Glass @ 2017-05-20  2:29 UTC (permalink / raw)
  To: u-boot

On 16 May 2017 at 21:44, Kever Yang <kever.yang@rock-chips.com> wrote:
>
> Move GRF register bit definition into GRF header file, remove
> 'GRF_' prefix and add 'GPIOmXn_' as prefix for bit meaning.
>
> Signed-off-by: Kever Yang <kever.yang@rock-chips.com>
> ---
>
>  arch/arm/include/asm/arch-rockchip/grf_rk3328.h | 114 +++++++++++++
>  drivers/pinctrl/rockchip/pinctrl_rk3328.c       | 205 ++++++------------------
>  2 files changed, 164 insertions(+), 155 deletions(-)

Acked-by: Simon Glass <sjg@chromium.org>

^ permalink raw reply	[flat|nested] 19+ messages in thread

* [U-Boot] [PATCH 2/6] rockchip: pinctrl: rk3328: do not set io routing
  2017-05-17  3:44 ` [U-Boot] [PATCH 2/6] rockchip: pinctrl: rk3328: do not set io routing Kever Yang
@ 2017-05-20  2:29   ` Simon Glass
  0 siblings, 0 replies; 19+ messages in thread
From: Simon Glass @ 2017-05-20  2:29 UTC (permalink / raw)
  To: u-boot

On 16 May 2017 at 21:44, Kever Yang <kever.yang@rock-chips.com> wrote:
> In rk3328, some function pin may have more than one choice, and muxed
> with more than one IO, for example, the UART2 controller IO,
> TX and RX, have 3 choice(setting in com_iomux):
> - M0 which mux with GPIO1A0/GPIO1A1
> - M1 which mux with GPIO2A0/GPIO2A1
> - usb2phy which mux with USB2.0 DP/DM pin.
>
> We should not decide which group to use in pinctrl driver,
> for it may be different in different board, it should goes to board
> file, and the pinctrl file should setting correct iomux depends on
> the com_iomux value.
>
> Signed-off-by: Kever Yang <kever.yang@rock-chips.com>
> ---
>
>  arch/arm/include/asm/arch-rockchip/grf_rk3328.h | 30 ++++++++--------
>  drivers/pinctrl/rockchip/pinctrl_rk3328.c       | 47 +++++++++++++++----------
>  2 files changed, 43 insertions(+), 34 deletions(-)
>

Acked-by: Simon Glass <sjg@chromium.org>

^ permalink raw reply	[flat|nested] 19+ messages in thread

* [U-Boot] [PATCH 3/6] rockchip: evb-rk3328: set uart2 and sdmmc io routing
  2017-05-17  3:44 ` [U-Boot] [PATCH 3/6] rockchip: evb-rk3328: set uart2 and sdmmc " Kever Yang
@ 2017-05-20  2:29   ` Simon Glass
  2017-05-24  2:35     ` Kever Yang
  0 siblings, 1 reply; 19+ messages in thread
From: Simon Glass @ 2017-05-20  2:29 UTC (permalink / raw)
  To: u-boot

Hi Kever,

On 16 May 2017 at 21:44, Kever Yang <kever.yang@rock-chips.com> wrote:
> In rk3328, some function pin may have more than one choice, and muxed
> with more than one IO, for example, the UART2 controller IO,
> TX and RX, have 3 choice(setting in com_iomux):
> - M0 which mux with GPIO1A0/GPIO1A1
> - M1 which mux with GPIO2A0/GPIO2A1
> - usb2phy which mux with USB2.0 DP/DM pin.
>
> We should set these IO routing in board file.
>
> Signed-off-by: Kever Yang <kever.yang@rock-chips.com>
> ---
>
>  board/rockchip/evb_rk3328/evb-rk3328.c | 12 ++++++++++++
>  1 file changed, 12 insertions(+)
>
> diff --git a/board/rockchip/evb_rk3328/evb-rk3328.c b/board/rockchip/evb_rk3328/evb-rk3328.c
> index a7895cb..d9dc782 100644
> --- a/board/rockchip/evb_rk3328/evb-rk3328.c
> +++ b/board/rockchip/evb_rk3328/evb-rk3328.c
> @@ -5,7 +5,10 @@
>   */
>
>  #include <common.h>
> +#include <asm/arch/hardware.h>
> +#include <asm/arch/grf_rk3328.h>
>  #include <asm/armv8/mmu.h>
> +#include <asm/io.h>
>  #include <dwc3-uboot.h>
>  #include <usb.h>
>
> @@ -13,6 +16,15 @@ DECLARE_GLOBAL_DATA_PTR;
>
>  int board_init(void)
>  {
> +#define GRF_BASE       0xff100000
> +       struct rk3328_grf_regs * const grf = (void *)GRF_BASE;
> +
> +       /* uart2 select m1, sdcard select m1*/
> +       rk_clrsetreg(&grf->com_iomux,
> +                    IOMUX_SEL_UART2_MASK | IOMUX_SEL_SDMMC_MASK,
> +                    IOMUX_SEL_UART2_M1 << IOMUX_SEL_UART2_SHIFT |
> +                    IOMUX_SEL_SDMMC_M1 << IOMUX_SEL_SDMMC_SHIFT);
> +
>         return 0;
>  }

This needs to be done via a call to some sort of driver. The above
hack is OK in SPL but not in U-Boot proper.

See my comments elsewhere about using a misc driver with an IOCTL
interface to do this sort of thing. Although here I wonder why you
cannot use pinctrl?

Regards,
Simon

^ permalink raw reply	[flat|nested] 19+ messages in thread

* [U-Boot] [PATCH 4/6] rockchip: pinctrl: rk3328: use gpio instead of sdmmc-pwren
  2017-05-17  3:44 ` [U-Boot] [PATCH 4/6] rockchip: pinctrl: rk3328: use gpio instead of sdmmc-pwren Kever Yang
@ 2017-05-20  2:29   ` Simon Glass
  2017-06-05 21:33     ` Simon Glass
  0 siblings, 1 reply; 19+ messages in thread
From: Simon Glass @ 2017-05-20  2:29 UTC (permalink / raw)
  To: u-boot

On 16 May 2017 at 21:44, Kever Yang <kever.yang@rock-chips.com> wrote:
> SDMMC-PWREN is a pin to control voltage for SDMMC IO, it may
> be high active or low active, the dwmmc driver always assume
> the sdmmc-pwren as high active.
>
> Kernel treat this pin as fixed regulator instead of a pin from
> controller, and then it can set in dts file upon board schematic,
> that's a good solution, we can also do this in u-boot.
>
> Signed-off-by: Kever Yang <kever.yang@rock-chips.com>
> ---
>
>  drivers/pinctrl/rockchip/pinctrl_rk3328.c | 6 ++----
>  1 file changed, 2 insertions(+), 4 deletions(-)

Acked-by: Simon Glass <sjg@chromium.org>

^ permalink raw reply	[flat|nested] 19+ messages in thread

* [U-Boot] [PATCH 5/6] rockchip: evb-rk3328: enable boot on regulator
  2017-05-17  3:44 ` [U-Boot] [PATCH 5/6] rockchip: evb-rk3328: enable boot on regulator Kever Yang
@ 2017-05-20  2:29   ` Simon Glass
  0 siblings, 0 replies; 19+ messages in thread
From: Simon Glass @ 2017-05-20  2:29 UTC (permalink / raw)
  To: u-boot

On 16 May 2017 at 21:44, Kever Yang <kever.yang@rock-chips.com> wrote:
> Enable all the boot-on regulator in default.
>
> Signed-off-by: Kever Yang <kever.yang@rock-chips.com>
> ---
>
>  board/rockchip/evb_rk3328/evb-rk3328.c | 8 +++++++-
>  1 file changed, 7 insertions(+), 1 deletion(-)

Acked-by: Simon Glass <sjg@chromium.org>

^ permalink raw reply	[flat|nested] 19+ messages in thread

* [U-Boot] [PATCH 6/6] rockchip: dts: rk3328-evb: add sdmmc-pwren regulator
  2017-05-17  3:44 ` [U-Boot] [PATCH 6/6] rockchip: dts: rk3328-evb: add sdmmc-pwren regulator Kever Yang
@ 2017-05-20  2:29   ` Simon Glass
  0 siblings, 0 replies; 19+ messages in thread
From: Simon Glass @ 2017-05-20  2:29 UTC (permalink / raw)
  To: u-boot

On 16 May 2017 at 21:44, Kever Yang <kever.yang@rock-chips.com> wrote:
> Use fixed regulator for sdmmc-pwren for sdmmc power.
>
> Signed-off-by: Kever Yang <kever.yang@rock-chips.com>
> ---
>
>  arch/arm/dts/rk3328-evb.dts | 8 ++++++++
>  1 file changed, 8 insertions(+)

Acked-by: Simon Glass <sjg@chromium.org>

^ permalink raw reply	[flat|nested] 19+ messages in thread

* [U-Boot] [PATCH 3/6] rockchip: evb-rk3328: set uart2 and sdmmc io routing
  2017-05-20  2:29   ` Simon Glass
@ 2017-05-24  2:35     ` Kever Yang
  2017-05-26 22:28       ` Heiko Stuebner
  2017-06-01  3:10       ` Simon Glass
  0 siblings, 2 replies; 19+ messages in thread
From: Kever Yang @ 2017-05-24  2:35 UTC (permalink / raw)
  To: u-boot

Hi Simon,


On 05/20/2017 10:29 AM, Simon Glass wrote:
> Hi Kever,
>
> On 16 May 2017 at 21:44, Kever Yang <kever.yang@rock-chips.com> wrote:
>> In rk3328, some function pin may have more than one choice, and muxed
>> with more than one IO, for example, the UART2 controller IO,
>> TX and RX, have 3 choice(setting in com_iomux):
>> - M0 which mux with GPIO1A0/GPIO1A1
>> - M1 which mux with GPIO2A0/GPIO2A1
>> - usb2phy which mux with USB2.0 DP/DM pin.
>>
>> We should set these IO routing in board file.
>>
>> Signed-off-by: Kever Yang <kever.yang@rock-chips.com>
>> ---
>>
>>   board/rockchip/evb_rk3328/evb-rk3328.c | 12 ++++++++++++
>>   1 file changed, 12 insertions(+)
>>
>> diff --git a/board/rockchip/evb_rk3328/evb-rk3328.c b/board/rockchip/evb_rk3328/evb-rk3328.c
>> index a7895cb..d9dc782 100644
>> --- a/board/rockchip/evb_rk3328/evb-rk3328.c
>> +++ b/board/rockchip/evb_rk3328/evb-rk3328.c
>> @@ -5,7 +5,10 @@
>>    */
>>
>>   #include <common.h>
>> +#include <asm/arch/hardware.h>
>> +#include <asm/arch/grf_rk3328.h>
>>   #include <asm/armv8/mmu.h>
>> +#include <asm/io.h>
>>   #include <dwc3-uboot.h>
>>   #include <usb.h>
>>
>> @@ -13,6 +16,15 @@ DECLARE_GLOBAL_DATA_PTR;
>>
>>   int board_init(void)
>>   {
>> +#define GRF_BASE       0xff100000
>> +       struct rk3328_grf_regs * const grf = (void *)GRF_BASE;
>> +
>> +       /* uart2 select m1, sdcard select m1*/
>> +       rk_clrsetreg(&grf->com_iomux,
>> +                    IOMUX_SEL_UART2_MASK | IOMUX_SEL_SDMMC_MASK,
>> +                    IOMUX_SEL_UART2_M1 << IOMUX_SEL_UART2_SHIFT |
>> +                    IOMUX_SEL_SDMMC_M1 << IOMUX_SEL_SDMMC_SHIFT);
>> +
>>          return 0;
>>   }
> This needs to be done via a call to some sort of driver. The above
> hack is OK in SPL but not in U-Boot proper.

Yes, SPL also needs this. I thinks here should be the right place
before there is a SPL for rk3328.
>
> See my comments elsewhere about using a misc driver with an IOCTL
> interface to do this sort of thing. Although here I wonder why you
> cannot use pinctrl?

This is different from traditional pinctrl, kernel also still not have
final solution on this, see [0], and some people think it should be
done in boot loader.


Thanks,
- Kever
[0] 
http://lists.infradead.org/pipermail/linux-rockchip/2016-August/011209.html
>
> Regards,
> Simon
>

^ permalink raw reply	[flat|nested] 19+ messages in thread

* [U-Boot] [PATCH 3/6] rockchip: evb-rk3328: set uart2 and sdmmc io routing
  2017-05-24  2:35     ` Kever Yang
@ 2017-05-26 22:28       ` Heiko Stuebner
  2017-06-01  3:10       ` Simon Glass
  1 sibling, 0 replies; 19+ messages in thread
From: Heiko Stuebner @ 2017-05-26 22:28 UTC (permalink / raw)
  To: u-boot

Hi Kever,

Am Mittwoch, 24. Mai 2017, 10:35:04 CEST schrieb Kever Yang:
> On 05/20/2017 10:29 AM, Simon Glass wrote:
> > On 16 May 2017 at 21:44, Kever Yang <kever.yang@rock-chips.com> wrote:
> >> In rk3328, some function pin may have more than one choice, and muxed
> >> with more than one IO, for example, the UART2 controller IO,
> >> TX and RX, have 3 choice(setting in com_iomux):
> >> - M0 which mux with GPIO1A0/GPIO1A1
> >> - M1 which mux with GPIO2A0/GPIO2A1
> >> - usb2phy which mux with USB2.0 DP/DM pin.
> >>
> >> We should set these IO routing in board file.
> >>
> >> Signed-off-by: Kever Yang <kever.yang@rock-chips.com>
> >> ---
> >>
> >>   board/rockchip/evb_rk3328/evb-rk3328.c | 12 ++++++++++++
> >>   1 file changed, 12 insertions(+)
> >>
> >> diff --git a/board/rockchip/evb_rk3328/evb-rk3328.c b/board/rockchip/evb_rk3328/evb-rk3328.c
> >> index a7895cb..d9dc782 100644
> >> --- a/board/rockchip/evb_rk3328/evb-rk3328.c
> >> +++ b/board/rockchip/evb_rk3328/evb-rk3328.c
> >> @@ -5,7 +5,10 @@
> >>    */
> >>
> >>   #include <common.h>
> >> +#include <asm/arch/hardware.h>
> >> +#include <asm/arch/grf_rk3328.h>
> >>   #include <asm/armv8/mmu.h>
> >> +#include <asm/io.h>
> >>   #include <dwc3-uboot.h>
> >>   #include <usb.h>
> >>
> >> @@ -13,6 +16,15 @@ DECLARE_GLOBAL_DATA_PTR;
> >>
> >>   int board_init(void)
> >>   {
> >> +#define GRF_BASE       0xff100000
> >> +       struct rk3328_grf_regs * const grf = (void *)GRF_BASE;
> >> +
> >> +       /* uart2 select m1, sdcard select m1*/
> >> +       rk_clrsetreg(&grf->com_iomux,
> >> +                    IOMUX_SEL_UART2_MASK | IOMUX_SEL_SDMMC_MASK,
> >> +                    IOMUX_SEL_UART2_M1 << IOMUX_SEL_UART2_SHIFT |
> >> +                    IOMUX_SEL_SDMMC_M1 << IOMUX_SEL_SDMMC_SHIFT);
> >> +
> >>          return 0;
> >>   }
> > This needs to be done via a call to some sort of driver. The above
> > hack is OK in SPL but not in U-Boot proper.
> 
> Yes, SPL also needs this. I thinks here should be the right place
> before there is a SPL for rk3328.
> >
> > See my comments elsewhere about using a misc driver with an IOCTL
> > interface to do this sort of thing. Although here I wonder why you
> > cannot use pinctrl?
> 
> This is different from traditional pinctrl, kernel also still not have
> final solution on this, see [0], and some people think it should be
> done in boot loader.

Just to point out that thanks to David Wu we now have a solution [1]
on the kernel side I'm pretty happy with - as part of the pinctrl driver.


Heiko


> [0] 
> http://lists.infradead.org/pipermail/linux-rockchip/2016-August/011209.html

[1] https://www.spinics.net/lists/kernel/msg2517794.html

^ permalink raw reply	[flat|nested] 19+ messages in thread

* [U-Boot] [PATCH 3/6] rockchip: evb-rk3328: set uart2 and sdmmc io routing
  2017-05-24  2:35     ` Kever Yang
  2017-05-26 22:28       ` Heiko Stuebner
@ 2017-06-01  3:10       ` Simon Glass
  2017-06-07  3:28         ` Kever Yang
  1 sibling, 1 reply; 19+ messages in thread
From: Simon Glass @ 2017-06-01  3:10 UTC (permalink / raw)
  To: u-boot

Hi Kever,

On 23 May 2017 at 20:35, Kever Yang <kever.yang@rock-chips.com> wrote:
> Hi Simon,
>
>
>
> On 05/20/2017 10:29 AM, Simon Glass wrote:
>>
>> Hi Kever,
>>
>> On 16 May 2017 at 21:44, Kever Yang <kever.yang@rock-chips.com> wrote:
>>>
>>> In rk3328, some function pin may have more than one choice, and muxed
>>> with more than one IO, for example, the UART2 controller IO,
>>> TX and RX, have 3 choice(setting in com_iomux):
>>> - M0 which mux with GPIO1A0/GPIO1A1
>>> - M1 which mux with GPIO2A0/GPIO2A1
>>> - usb2phy which mux with USB2.0 DP/DM pin.
>>>
>>> We should set these IO routing in board file.
>>>
>>> Signed-off-by: Kever Yang <kever.yang@rock-chips.com>
>>> ---
>>>
>>>   board/rockchip/evb_rk3328/evb-rk3328.c | 12 ++++++++++++
>>>   1 file changed, 12 insertions(+)
>>>
>>> diff --git a/board/rockchip/evb_rk3328/evb-rk3328.c
>>> b/board/rockchip/evb_rk3328/evb-rk3328.c
>>> index a7895cb..d9dc782 100644
>>> --- a/board/rockchip/evb_rk3328/evb-rk3328.c
>>> +++ b/board/rockchip/evb_rk3328/evb-rk3328.c
>>> @@ -5,7 +5,10 @@
>>>    */
>>>
>>>   #include <common.h>
>>> +#include <asm/arch/hardware.h>
>>> +#include <asm/arch/grf_rk3328.h>
>>>   #include <asm/armv8/mmu.h>
>>> +#include <asm/io.h>
>>>   #include <dwc3-uboot.h>
>>>   #include <usb.h>
>>>
>>> @@ -13,6 +16,15 @@ DECLARE_GLOBAL_DATA_PTR;
>>>
>>>   int board_init(void)
>>>   {
>>> +#define GRF_BASE       0xff100000
>>> +       struct rk3328_grf_regs * const grf = (void *)GRF_BASE;
>>> +
>>> +       /* uart2 select m1, sdcard select m1*/
>>> +       rk_clrsetreg(&grf->com_iomux,
>>> +                    IOMUX_SEL_UART2_MASK | IOMUX_SEL_SDMMC_MASK,
>>> +                    IOMUX_SEL_UART2_M1 << IOMUX_SEL_UART2_SHIFT |
>>> +                    IOMUX_SEL_SDMMC_M1 << IOMUX_SEL_SDMMC_SHIFT);
>>> +
>>>          return 0;
>>>   }
>>
>> This needs to be done via a call to some sort of driver. The above
>> hack is OK in SPL but not in U-Boot proper.
>
>
> Yes, SPL also needs this. I thinks here should be the right place
> before there is a SPL for rk3328.

But if you are booting from an SD card, how can you need a mux to
select it? Surely the boot ROM must set it up or you would not be able
to boot from MMC?

When will there be SPL for rk3328?

>>
>>
>> See my comments elsewhere about using a misc driver with an IOCTL
>> interface to do this sort of thing. Although here I wonder why you
>> cannot use pinctrl?
>
>
> This is different from traditional pinctrl, kernel also still not have
> final solution on this, see [0], and some people think it should be
> done in boot loader.

How about putting it in grf syscon driver?

>
>
> Thanks,
> - Kever
> [0]
> http://lists.infradead.org/pipermail/linux-rockchip/2016-August/011209.html
>>
>>
>> Regards,
>> Simon
>>
>
>

^ permalink raw reply	[flat|nested] 19+ messages in thread

* [U-Boot] [PATCH 4/6] rockchip: pinctrl: rk3328: use gpio instead of sdmmc-pwren
  2017-05-20  2:29   ` Simon Glass
@ 2017-06-05 21:33     ` Simon Glass
  0 siblings, 0 replies; 19+ messages in thread
From: Simon Glass @ 2017-06-05 21:33 UTC (permalink / raw)
  To: u-boot

Hi Kever,

On 19 May 2017 at 20:29, Simon Glass <sjg@chromium.org> wrote:
> On 16 May 2017 at 21:44, Kever Yang <kever.yang@rock-chips.com> wrote:
>> SDMMC-PWREN is a pin to control voltage for SDMMC IO, it may
>> be high active or low active, the dwmmc driver always assume
>> the sdmmc-pwren as high active.
>>
>> Kernel treat this pin as fixed regulator instead of a pin from
>> controller, and then it can set in dts file upon board schematic,
>> that's a good solution, we can also do this in u-boot.
>>
>> Signed-off-by: Kever Yang <kever.yang@rock-chips.com>
>> ---
>>
>>  drivers/pinctrl/rockchip/pinctrl_rk3328.c | 6 ++----
>>  1 file changed, 2 insertions(+), 4 deletions(-)
>
> Acked-by: Simon Glass <sjg@chromium.org>

Can you please rebase this patch and the following ones? I have marked
them as 'changes requested' in patchwork.

Regards,
Simon

^ permalink raw reply	[flat|nested] 19+ messages in thread

* [U-Boot] [PATCH 3/6] rockchip: evb-rk3328: set uart2 and sdmmc io routing
  2017-06-01  3:10       ` Simon Glass
@ 2017-06-07  3:28         ` Kever Yang
  2017-06-09 12:27           ` Simon Glass
  0 siblings, 1 reply; 19+ messages in thread
From: Kever Yang @ 2017-06-07  3:28 UTC (permalink / raw)
  To: u-boot

Simon,


On 06/01/2017 11:10 AM, Simon Glass wrote:
> Hi Kever,
>
> On 23 May 2017 at 20:35, Kever Yang <kever.yang@rock-chips.com> wrote:
>> Hi Simon,
>>
>>
>>
>> On 05/20/2017 10:29 AM, Simon Glass wrote:
>>> Hi Kever,
>>>
>>> On 16 May 2017 at 21:44, Kever Yang <kever.yang@rock-chips.com> wrote:
>>>> In rk3328, some function pin may have more than one choice, and muxed
>>>> with more than one IO, for example, the UART2 controller IO,
>>>> TX and RX, have 3 choice(setting in com_iomux):
>>>> - M0 which mux with GPIO1A0/GPIO1A1
>>>> - M1 which mux with GPIO2A0/GPIO2A1
>>>> - usb2phy which mux with USB2.0 DP/DM pin.
>>>>
>>>> We should set these IO routing in board file.
>>>>
>>>> Signed-off-by: Kever Yang <kever.yang@rock-chips.com>
>>>> ---
>>>>
>>>>    board/rockchip/evb_rk3328/evb-rk3328.c | 12 ++++++++++++
>>>>    1 file changed, 12 insertions(+)
>>>>
>>>> diff --git a/board/rockchip/evb_rk3328/evb-rk3328.c
>>>> b/board/rockchip/evb_rk3328/evb-rk3328.c
>>>> index a7895cb..d9dc782 100644
>>>> --- a/board/rockchip/evb_rk3328/evb-rk3328.c
>>>> +++ b/board/rockchip/evb_rk3328/evb-rk3328.c
>>>> @@ -5,7 +5,10 @@
>>>>     */
>>>>
>>>>    #include <common.h>
>>>> +#include <asm/arch/hardware.h>
>>>> +#include <asm/arch/grf_rk3328.h>
>>>>    #include <asm/armv8/mmu.h>
>>>> +#include <asm/io.h>
>>>>    #include <dwc3-uboot.h>
>>>>    #include <usb.h>
>>>>
>>>> @@ -13,6 +16,15 @@ DECLARE_GLOBAL_DATA_PTR;
>>>>
>>>>    int board_init(void)
>>>>    {
>>>> +#define GRF_BASE       0xff100000
>>>> +       struct rk3328_grf_regs * const grf = (void *)GRF_BASE;
>>>> +
>>>> +       /* uart2 select m1, sdcard select m1*/
>>>> +       rk_clrsetreg(&grf->com_iomux,
>>>> +                    IOMUX_SEL_UART2_MASK | IOMUX_SEL_SDMMC_MASK,
>>>> +                    IOMUX_SEL_UART2_M1 << IOMUX_SEL_UART2_SHIFT |
>>>> +                    IOMUX_SEL_SDMMC_M1 << IOMUX_SEL_SDMMC_SHIFT);
>>>> +
>>>>           return 0;
>>>>    }
>>> This needs to be done via a call to some sort of driver. The above
>>> hack is OK in SPL but not in U-Boot proper.
>>
>> Yes, SPL also needs this. I thinks here should be the right place
>> before there is a SPL for rk3328.
> But if you are booting from an SD card, how can you need a mux to
> select it? Surely the boot ROM must set it up or you would not be able
> to boot from MMC?

If we need to boot from SD card, then we need to follow the boot ROM 
setting,
and hardware also need to follow it.
There is another case, the default SD card pin is used for other 
function in hardware,
then we use the alternative pin mux, we can't boot from SD card in bootrom,
but we still can use SD card in later stage like U-Boot and kernel.

Thanks,
- Kever
>
> When will there be SPL for rk3328?
>
>>>
>>> See my comments elsewhere about using a misc driver with an IOCTL
>>> interface to do this sort of thing. Although here I wonder why you
>>> cannot use pinctrl?
>>
>> This is different from traditional pinctrl, kernel also still not have
>> final solution on this, see [0], and some people think it should be
>> done in boot loader.
> How about putting it in grf syscon driver?
>
>>
>> Thanks,
>> - Kever
>> [0]
>> http://lists.infradead.org/pipermail/linux-rockchip/2016-August/011209.html
>>>
>>> Regards,
>>> Simon
>>>
>>

^ permalink raw reply	[flat|nested] 19+ messages in thread

* [U-Boot] [PATCH 3/6] rockchip: evb-rk3328: set uart2 and sdmmc io routing
  2017-06-07  3:28         ` Kever Yang
@ 2017-06-09 12:27           ` Simon Glass
  0 siblings, 0 replies; 19+ messages in thread
From: Simon Glass @ 2017-06-09 12:27 UTC (permalink / raw)
  To: u-boot

Hi Kever,

On 6 June 2017 at 21:28, Kever Yang <kever.yang@rock-chips.com> wrote:
> Simon,
>
>
>
> On 06/01/2017 11:10 AM, Simon Glass wrote:
>>
>> Hi Kever,
>>
>> On 23 May 2017 at 20:35, Kever Yang <kever.yang@rock-chips.com> wrote:
>>>
>>> Hi Simon,
>>>
>>>
>>>
>>> On 05/20/2017 10:29 AM, Simon Glass wrote:
>>>>
>>>> Hi Kever,
>>>>
>>>> On 16 May 2017 at 21:44, Kever Yang <kever.yang@rock-chips.com> wrote:
>>>>>
>>>>> In rk3328, some function pin may have more than one choice, and muxed
>>>>> with more than one IO, for example, the UART2 controller IO,
>>>>> TX and RX, have 3 choice(setting in com_iomux):
>>>>> - M0 which mux with GPIO1A0/GPIO1A1
>>>>> - M1 which mux with GPIO2A0/GPIO2A1
>>>>> - usb2phy which mux with USB2.0 DP/DM pin.
>>>>>
>>>>> We should set these IO routing in board file.
>>>>>
>>>>> Signed-off-by: Kever Yang <kever.yang@rock-chips.com>
>>>>> ---
>>>>>
>>>>>    board/rockchip/evb_rk3328/evb-rk3328.c | 12 ++++++++++++
>>>>>    1 file changed, 12 insertions(+)
>>>>>
>>>>> diff --git a/board/rockchip/evb_rk3328/evb-rk3328.c
>>>>> b/board/rockchip/evb_rk3328/evb-rk3328.c
>>>>> index a7895cb..d9dc782 100644
>>>>> --- a/board/rockchip/evb_rk3328/evb-rk3328.c
>>>>> +++ b/board/rockchip/evb_rk3328/evb-rk3328.c
>>>>> @@ -5,7 +5,10 @@
>>>>>     */
>>>>>
>>>>>    #include <common.h>
>>>>> +#include <asm/arch/hardware.h>
>>>>> +#include <asm/arch/grf_rk3328.h>
>>>>>    #include <asm/armv8/mmu.h>
>>>>> +#include <asm/io.h>
>>>>>    #include <dwc3-uboot.h>
>>>>>    #include <usb.h>
>>>>>
>>>>> @@ -13,6 +16,15 @@ DECLARE_GLOBAL_DATA_PTR;
>>>>>
>>>>>    int board_init(void)
>>>>>    {
>>>>> +#define GRF_BASE       0xff100000
>>>>> +       struct rk3328_grf_regs * const grf = (void *)GRF_BASE;
>>>>> +
>>>>> +       /* uart2 select m1, sdcard select m1*/
>>>>> +       rk_clrsetreg(&grf->com_iomux,
>>>>> +                    IOMUX_SEL_UART2_MASK | IOMUX_SEL_SDMMC_MASK,
>>>>> +                    IOMUX_SEL_UART2_M1 << IOMUX_SEL_UART2_SHIFT |
>>>>> +                    IOMUX_SEL_SDMMC_M1 << IOMUX_SEL_SDMMC_SHIFT);
>>>>> +
>>>>>           return 0;
>>>>>    }
>>>>
>>>> This needs to be done via a call to some sort of driver. The above
>>>> hack is OK in SPL but not in U-Boot proper.
>>>
>>>
>>> Yes, SPL also needs this. I thinks here should be the right place
>>> before there is a SPL for rk3328.
>>
>> But if you are booting from an SD card, how can you need a mux to
>> select it? Surely the boot ROM must set it up or you would not be able
>> to boot from MMC?
>
>
> If we need to boot from SD card, then we need to follow the boot ROM
> setting,
> and hardware also need to follow it.
> There is another case, the default SD card pin is used for other function in
> hardware,
> then we use the alternative pin mux, we can't boot from SD card in bootrom,
> but we still can use SD card in later stage like U-Boot and kernel.
>

OK, understood, thanks. Can you put it in the pinctrl driver?

- Simon

> Thanks,
> - Kever
>
>>
>> When will there be SPL for rk3328?
>>
>>>>
>>>> See my comments elsewhere about using a misc driver with an IOCTL
>>>> interface to do this sort of thing. Although here I wonder why you
>>>> cannot use pinctrl?
>>>
>>>
>>> This is different from traditional pinctrl, kernel also still not have
>>> final solution on this, see [0], and some people think it should be
>>> done in boot loader.
>>
>> How about putting it in grf syscon driver?
>>
>>>
>>> Thanks,
>>> - Kever
>>> [0]
>>>
>>> http://lists.infradead.org/pipermail/linux-rockchip/2016-August/011209.html
>>>>
>>>>
>>>> Regards,
>>>> Simon
>>>>
>>>
>
>

^ permalink raw reply	[flat|nested] 19+ messages in thread

end of thread, other threads:[~2017-06-09 12:27 UTC | newest]

Thread overview: 19+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2017-05-17  3:44 [U-Boot] [PATCH 0/6] rk3328 pinctrl drvier and sdmmc power fix Kever Yang
2017-05-17  3:44 ` [U-Boot] [PATCH 1/6] rockchip: pinctrl: move rk3328 grf reg definition in header file Kever Yang
2017-05-20  2:29   ` Simon Glass
2017-05-17  3:44 ` [U-Boot] [PATCH 2/6] rockchip: pinctrl: rk3328: do not set io routing Kever Yang
2017-05-20  2:29   ` Simon Glass
2017-05-17  3:44 ` [U-Boot] [PATCH 3/6] rockchip: evb-rk3328: set uart2 and sdmmc " Kever Yang
2017-05-20  2:29   ` Simon Glass
2017-05-24  2:35     ` Kever Yang
2017-05-26 22:28       ` Heiko Stuebner
2017-06-01  3:10       ` Simon Glass
2017-06-07  3:28         ` Kever Yang
2017-06-09 12:27           ` Simon Glass
2017-05-17  3:44 ` [U-Boot] [PATCH 4/6] rockchip: pinctrl: rk3328: use gpio instead of sdmmc-pwren Kever Yang
2017-05-20  2:29   ` Simon Glass
2017-06-05 21:33     ` Simon Glass
2017-05-17  3:44 ` [U-Boot] [PATCH 5/6] rockchip: evb-rk3328: enable boot on regulator Kever Yang
2017-05-20  2:29   ` Simon Glass
2017-05-17  3:44 ` [U-Boot] [PATCH 6/6] rockchip: dts: rk3328-evb: add sdmmc-pwren regulator Kever Yang
2017-05-20  2:29   ` Simon Glass

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.