armbian-build/patch/u-boot/u-boot-rockchip64-default/board_z28pro/use_sdmmc_ext.patch

193 lines
5.4 KiB
Diff

diff --git a/arch/arm/dts/rk3328-rock64.dts b/arch/arm/dts/rk3328-rock64.dts
index d19d609..5c72488 100644
--- a/arch/arm/dts/rk3328-rock64.dts
+++ b/arch/arm/dts/rk3328-rock64.dts
@@ -17,7 +17,7 @@
};
aliases {
- spi0 = &spi0;
+ mmc1 = &sdmmc_ext;
};
gmac_clkin: external-gmac-clock {
@@ -37,7 +37,7 @@
vcc3v3_sdmmc: sdmmc-pwren {
compatible = "regulator-fixed";
regulator-name = "vcc3v3";
- gpio = <&gpio0 30 GPIO_ACTIVE_LOW>;
+ gpio = <&gpio2 7 GPIO_ACTIVE_LOW>;
regulator-always-on;
regulator-boot-on;
};
@@ -75,16 +75,16 @@
status = "okay";
};
-&sdmmc {
+&sdmmc_ext {
u-boot,dm-spl;
bus-width = <4>;
cap-mmc-highspeed;
cap-sd-highspeed;
- card-detect-delay = <200>;
+ cd-gpios = <&gpio3 RK_PA1 GPIO_ACTIVE_LOW>;
disable-wp;
num-slots = <1>;
pinctrl-names = "default";
- pinctrl-0 = <&sdmmc0_clk>, <&sdmmc0_cmd>, <&sdmmc0_dectn>, <&sdmmc0_bus4>;
+ pinctrl-0 = <&sdmmc0ext_clk>, <&sdmmc0ext_cmd>, <&sdmmc0ext_dectn>, <&sdmmc0ext_bus4>;
status = "okay";
};
@@ -268,42 +268,6 @@
status = "okay";
};
-&spi0 {
- u-boot,dm-spl;
- status = "okay";
-
- spiflash: spi-flash@0 {
- u-boot,dm-spl;
- #address-cells = <0x1>;
- #size-cells = <1>;
- compatible = "spi-flash";
- reg = <0x0>;
- spi-max-frequency = <25000000>;
- status = "okay";
-
- partitions {
- compatible = "fixed-partitions";
- #address-cells = <1>;
- #size-cells = <1>;
-
- loader@8000 {
- label = "loader";
- reg = <0x8000 0x3F0000>;
- };
-
- env@3f8000 {
- label = "env";
- reg = <0x3F8000 0x8000>;
- };
-
- vendor@7c0000 {
- label = "vendor";
- reg = <0x7C0000 0x40000>;
- };
- };
- };
-};
-
&pinctrl {
pmic {
pmic_int_l: pmic-int-l {
diff --git a/arch/arm/include/asm/arch-rockchip/grf_rk3328.h b/arch/arm/include/asm/arch-rockchip/grf_rk3328.h
index a396510..260117b 100644
--- a/arch/arm/include/asm/arch-rockchip/grf_rk3328.h
+++ b/arch/arm/include/asm/arch-rockchip/grf_rk3328.h
@@ -361,6 +361,17 @@ enum {
GPIO2D4_SEL_MASK = 0xff << GPIO2D4_SEL_SHIFT,
GPIO2D4_EMMC_DATA1234 = 0xaa,
+ /* GPIO3AL_IOMUX */
+ GPIO3A0_SEL_SHIFT = 0,
+ GPIO3A0_SEL_MASK = 0x71ff << GPIO3A0_SEL_SHIFT,
+ GPIO3A0_CARD_DATA_CLK_CMD_DETN = 0x36db,
+
+ /* GPIO3AH_IOMUX */
+ GPIO3A5_SEL_SHIFT = 0,
+ GPIO3A5_SEL_MASK = 0x1ff << GPIO3A5_SEL_SHIFT,
+ GPIO3A5_CARD_DATA234 = 0xdb,
+
+
/* GPIO3C_IOMUX */
GPIO3C0_SEL_SHIFT = 0,
GPIO3C0_SEL_MASK = 0x3fff << GPIO3C0_SEL_SHIFT,
diff --git a/arch/arm/mach-rockchip/rk3328/rk3328.c b/arch/arm/mach-rockchip/rk3328/rk3328.c
index f1db5bf..b627083 100644
--- a/arch/arm/mach-rockchip/rk3328/rk3328.c
+++ b/arch/arm/mach-rockchip/rk3328/rk3328.c
@@ -96,11 +96,10 @@ int board_init(void)
#define GRF_BASE 0xff100000
struct rk3328_grf_regs * const grf = (void *)GRF_BASE;
- /* uart2 select m1, sdcard select m1*/
+ /* uart2 select m1, no sdcard select, because we use sdmmc_ext */
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);
+ IOMUX_SEL_UART2_MASK,
+ IOMUX_SEL_UART2_M1 << IOMUX_SEL_UART2_SHIFT);
ret = regulators_enable_boot_on(false);
if (ret)
diff --git a/drivers/clk/rockchip/clk_rk3328.c b/drivers/clk/rockchip/clk_rk3328.c
index 8438047..9af8262 100644
--- a/drivers/clk/rockchip/clk_rk3328.c
+++ b/drivers/clk/rockchip/clk_rk3328.c
@@ -401,7 +401,7 @@ static ulong rk3328_mmc_get_clk(struct rk3328_cru *cru, uint clk_id)
switch (clk_id) {
case HCLK_SDMMC:
case SCLK_SDMMC:
- con_id = 30;
+ con_id = 43;
break;
case HCLK_EMMC:
case SCLK_EMMC:
@@ -429,7 +429,7 @@ static ulong rk3328_mmc_set_clk(struct rk3328_cru *cru,
switch (clk_id) {
case HCLK_SDMMC:
case SCLK_SDMMC:
- con_id = 30;
+ con_id = 43;
break;
case HCLK_EMMC:
case SCLK_EMMC:
diff --git a/drivers/pinctrl/rockchip/pinctrl_rk3328.c b/drivers/pinctrl/rockchip/pinctrl_rk3328.c
index c928134..01ed39d 100644
--- a/drivers/pinctrl/rockchip/pinctrl_rk3328.c
+++ b/drivers/pinctrl/rockchip/pinctrl_rk3328.c
@@ -180,19 +180,17 @@ static void pinctrl_rk3328_sdmmc_config(struct rk3328_grf_regs *grf,
<< GPIO3C0_SEL_SHIFT);
break;
case PERIPH_ID_SDCARD:
- /* 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_GPIO << GPIO0D6_SEL_SHIFT);
- else
- rk_clrsetreg(&grf->gpio2a_iomux,
- GPIO2A7_SEL_MASK,
- GPIO2A7_GPIO << GPIO2A7_SEL_SHIFT);
- rk_clrsetreg(&grf->gpio1a_iomux,
- GPIO1A0_SEL_MASK,
- GPIO1A0_CARD_DATA_CLK_CMD_DETN
- << GPIO1A0_SEL_SHIFT);
+ /* SDMMC_PWREN use GPIO and init as regulator-fixed */
+ /* SDMMC0EXT hardcoded */
+ rk_clrsetreg(&grf->gpio2a_iomux,
+ GPIO2A7_SEL_MASK,
+ GPIO2A7_GPIO << GPIO2A7_SEL_SHIFT);
+ rk_clrsetreg(&grf->gpio3al_iomux,
+ GPIO3A0_SEL_MASK,
+ GPIO3A0_CARD_DATA_CLK_CMD_DETN << GPIO3A0_SEL_SHIFT);
+ rk_clrsetreg(&grf->gpio3ah_iomux,
+ GPIO3A5_SEL_MASK,
+ GPIO3A5_CARD_DATA234 << GPIO3A5_SEL_SHIFT);
break;
default:
debug("mmc id = %d iomux error!\n", mmc_id);
@@ -425,7 +423,7 @@ static int rk3328_pinctrl_get_periph_id(struct udevice *dev,
return PERIPH_ID_I2C2;
case 39:
return PERIPH_ID_I2C3;
- case 12:
+ case 4:
return PERIPH_ID_SDCARD;
case 14:
return PERIPH_ID_EMMC;