dts: starfive: enhance SD card io Output Drive Strength
authorJianlong Huang <jianlong.huang@starfivetech.com>
Thu, 15 Sep 2022 00:56:06 +0000 (08:56 +0800)
committerJianlong Huang <jianlong.huang@starfivetech.com>
Thu, 3 Nov 2022 09:23:28 +0000 (17:23 +0800)
SD card gpio is generic gpio on visionfive2, the default output drive strength may be not enough, some sd card do not work.
So enhance the gpio output drive strength to max.
But on visionfive2, the sd card gpio is fixed 3.3V, there is no need to switch_voltage and not support uhs mode.

Signed-off-by: Jianlong Huang <jianlong.huang@starfivetech.com>
arch/riscv/boot/dts/starfive/jh7110-visionfive-v2-A10.dts
arch/riscv/boot/dts/starfive/jh7110-visionfive-v2.dts
arch/riscv/boot/dts/starfive/jh7110-visionfive-v2.dtsi
arch/riscv/boot/dts/starfive/jh7110.dtsi
arch/riscv/configs/starfive_visionfive2_defconfig
drivers/mmc/host/dw_mmc-starfive.c

index d28a606..ba0c801 100644 (file)
        sdcard1_pins: sdcard1-pins {
                sdcard1-pins0 {
                        starfive,pins = <PAD_GPIO4>;
-                       starfive,pin-ioconfig = <IO(GPIO_IE(1) | (GPIO_PU(1)))>;
+                       starfive,pin-ioconfig = <IO(GPIO_IE(1) | (GPIO_PU(1)) | GPIO_DS(3))>;
                        starfive,pin-gpio-dout = <GPO_SDIO1_CCLK_OUT>;
                        starfive,pin-gpio-doen = <OEN_LOW>;
                };
 
                sdcard1-pins1 {
                        starfive,pins = <PAD_GPIO5>;
-                       starfive,pin-ioconfig = <IO(GPIO_IE(1) | (GPIO_PU(1)))>;
+                       starfive,pin-ioconfig = <IO(GPIO_IE(1) | (GPIO_PU(1)) | GPIO_DS(3))>;
                        starfive,pin-gpio-dout = <GPO_SDIO1_CCMD_OUT>;
                        starfive,pin-gpio-doen = <OEN_SDIO1_CCMD_OUT_EN>;
                        starfive,pin-gpio-din =  <GPI_SDIO1_CCMD_IN>;
@@ -79,7 +79,7 @@
 
                sdcard1-pins2 {
                        starfive,pins = <PAD_GPIO0>;
-                       starfive,pin-ioconfig = <IO(GPIO_IE(1) | (GPIO_PU(1)))>;
+                       starfive,pin-ioconfig = <IO(GPIO_IE(1) | (GPIO_PU(1)) | GPIO_DS(3))>;
                        starfive,pin-gpio-dout = <GPO_SDIO1_CDATA_OUT_0>;
                        starfive,pin-gpio-doen = <OEN_SDIO1_CDATA_OUT_EN_0>;
                        starfive,pin-gpio-din =  <GPI_SDIO1_CDATA_IN_0>;
@@ -87,7 +87,7 @@
 
                sdcard1-pins3 {
                        starfive,pins = <PAD_GPIO1>;
-                       starfive,pin-ioconfig = <IO(GPIO_IE(1) | (GPIO_PU(1)))>;
+                       starfive,pin-ioconfig = <IO(GPIO_IE(1) | (GPIO_PU(1)) | GPIO_DS(3))>;
                        starfive,pin-gpio-dout = <GPO_SDIO1_CDATA_OUT_1>;
                        starfive,pin-gpio-doen = <OEN_SDIO1_CDATA_OUT_EN_1>;
                        starfive,pin-gpio-din =  <GPI_SDIO1_CDATA_IN_1>;
@@ -95,7 +95,7 @@
 
                sdcard1-pins4 {
                        starfive,pins = <PAD_GPIO2>;
-                       starfive,pin-ioconfig = <IO(GPIO_IE(1) | (GPIO_PU(1)))>;
+                       starfive,pin-ioconfig = <IO(GPIO_IE(1) | (GPIO_PU(1)) | GPIO_DS(3))>;
                        starfive,pin-gpio-dout = <GPO_SDIO1_CDATA_OUT_2>;
                        starfive,pin-gpio-doen = <OEN_SDIO1_CDATA_OUT_EN_2>;
                        starfive,pin-gpio-din =  <GPI_SDIO1_CDATA_IN_2>;
 
                sdcard1-pins5 {
                        starfive,pins = <PAD_GPIO3>;
-                       starfive,pin-ioconfig = <IO(GPIO_IE(1) | (GPIO_PU(1)))>;
+                       starfive,pin-ioconfig = <IO(GPIO_IE(1) | (GPIO_PU(1)) | GPIO_DS(3))>;
                        starfive,pin-gpio-dout = <GPO_SDIO1_CDATA_OUT_3>;
                        starfive,pin-gpio-doen = <OEN_SDIO1_CDATA_OUT_EN_3>;
                        starfive,pin-gpio-din =  <GPI_SDIO1_CDATA_IN_3>;
index 657caa5..3815a8d 100644 (file)
@@ -62,7 +62,7 @@
                sdcard1-pins0 {
                        starfive,pins = <PAD_GPIO10>;
                        starfive,pinmux = <PAD_GPIO10_FUNC_SEL 0>;
-                       starfive,pin-ioconfig = <IO(GPIO_IE(1) | (GPIO_PU(1)))>;
+                       starfive,pin-ioconfig = <IO(GPIO_IE(1) | (GPIO_PU(1)) | GPIO_DS(3))>;
                        starfive,pin-gpio-dout = <GPO_SDIO1_CCLK_OUT>;
                        starfive,pin-gpio-doen = <OEN_LOW>;
                };
@@ -70,7 +70,7 @@
                sdcard1-pins1 {
                        starfive,pins = <PAD_GPIO9>;
                        starfive,pinmux = <PAD_GPIO9_FUNC_SEL 0>;
-                       starfive,pin-ioconfig = <IO(GPIO_IE(1) | (GPIO_PU(1)))>;
+                       starfive,pin-ioconfig = <IO(GPIO_IE(1) | (GPIO_PU(1)) | GPIO_DS(3))>;
                        starfive,pin-gpio-dout = <GPO_SDIO1_CCMD_OUT>;
                        starfive,pin-gpio-doen = <OEN_SDIO1_CCMD_OUT_EN>;
                        starfive,pin-gpio-din =  <GPI_SDIO1_CCMD_IN>;
@@ -79,7 +79,7 @@
                sdcard1-pins2 {
                        starfive,pins = <PAD_GPIO11>;
                        starfive,pinmux = <PAD_GPIO11_FUNC_SEL 0>;
-                       starfive,pin-ioconfig = <IO(GPIO_IE(1) | (GPIO_PU(1)))>;
+                       starfive,pin-ioconfig = <IO(GPIO_IE(1) | (GPIO_PU(1)) | GPIO_DS(3))>;
                        starfive,pin-gpio-dout = <GPO_SDIO1_CDATA_OUT_0>;
                        starfive,pin-gpio-doen = <OEN_SDIO1_CDATA_OUT_EN_0>;
                        starfive,pin-gpio-din =  <GPI_SDIO1_CDATA_IN_0>;
@@ -88,7 +88,7 @@
                sdcard1-pins3 {
                        starfive,pins = <PAD_GPIO12>;
                        starfive,pinmux = <PAD_GPIO12_FUNC_SEL 0>;
-                       starfive,pin-ioconfig = <IO(GPIO_IE(1) | (GPIO_PU(1)))>;
+                       starfive,pin-ioconfig = <IO(GPIO_IE(1) | (GPIO_PU(1)) | GPIO_DS(3))>;
                        starfive,pin-gpio-dout = <GPO_SDIO1_CDATA_OUT_1>;
                        starfive,pin-gpio-doen = <OEN_SDIO1_CDATA_OUT_EN_1>;
                        starfive,pin-gpio-din =  <GPI_SDIO1_CDATA_IN_1>;
@@ -97,7 +97,7 @@
                sdcard1-pins4 {
                        starfive,pins = <PAD_GPIO7>;
                        starfive,pinmux = <PAD_GPIO7_FUNC_SEL 0>;
-                       starfive,pin-ioconfig = <IO(GPIO_IE(1) | (GPIO_PU(1)))>;
+                       starfive,pin-ioconfig = <IO(GPIO_IE(1) | (GPIO_PU(1)) | GPIO_DS(3))>;
                        starfive,pin-gpio-dout = <GPO_SDIO1_CDATA_OUT_2>;
                        starfive,pin-gpio-doen = <OEN_SDIO1_CDATA_OUT_EN_2>;
                        starfive,pin-gpio-din =  <GPI_SDIO1_CDATA_IN_2>;
                sdcard1-pins5 {
                        starfive,pins = <PAD_GPIO8>;
                        starfive,pinmux = <PAD_GPIO8_FUNC_SEL 0>;
-                       starfive,pin-ioconfig = <IO(GPIO_IE(1) | (GPIO_PU(1)))>;
+                       starfive,pin-ioconfig = <IO(GPIO_IE(1) | (GPIO_PU(1)) | GPIO_DS(3))>;
                        starfive,pin-gpio-dout = <GPO_SDIO1_CDATA_OUT_3>;
                        starfive,pin-gpio-doen = <OEN_SDIO1_CDATA_OUT_EN_3>;
                        starfive,pin-gpio-din =  <GPI_SDIO1_CDATA_IN_3>;
index ba229c9..a2d21bc 100644 (file)
                                regulator-compatible = "sdio_vdd";
                                regulator-name = "sdio_vdd";
                                regulator-min-microvolt = <1800000>;
-                               regulator-max-microvolt = <3300000>;
+                               regulator-max-microvolt = <1800000>;
                        };
                        cpu_vdd: DCDC2 {
                                regulator-boot-on;
 };
 
 &sdio0 {
-       clock-frequency = <102400000>;
        max-frequency = <100000000>;
        card-detect-delay = <300>;
        bus-width = <8>;
        cap-mmc-highspeed;
-       mmc-hs400-1_8v;
-       mmc-hs400-enhanced-strobe;
+       mmc-ddr-1_8v;
+       mmc-hs200-1_8v;
        non-removable;
        cap-mmc-hw-reset;
        post-power-on-delay-ms = <200>;
 };
 
 &sdio1 {
-       clock-frequency = <102400000>;
-       max-frequency = <200000000>;
+       max-frequency = <100000000>;
        card-detect-delay = <300>;
        bus-width = <4>;
+       no-sdio;
+       no-mmc;
        broken-cd;
        cap-sd-highspeed;
        post-power-on-delay-ms = <200>;
index 6a2b038..dbcf742 100644 (file)
                        fifo-depth = <32>;
                        fifo-watermark-aligned;
                        data-addr = <0>;
+                       starfive,sys-syscon = <&sys_syscon 0x9c 0x1 0x3e>;
                        status = "disabled";
                };
 
index 8dadc8a..cd936e2 100644 (file)
@@ -222,6 +222,7 @@ CONFIG_MMC_SDHCI_PLTFM=y
 CONFIG_MMC_SDHCI_OF_DWCMSHC=y
 CONFIG_MMC_SPI=y
 CONFIG_MMC_DW=y
+CONFIG_MMC_DW_STARFIVE=y
 CONFIG_RTC_CLASS=y
 CONFIG_RTC_DRV_STARFIVE=y
 CONFIG_RTC_DRV_GOLDFISH=y
index 0cb0bab..a16c4bf 100644 (file)
@@ -187,10 +187,10 @@ static int dw_mci_starfive_parse_dt(struct dw_mci *host)
 static const struct dw_mci_drv_data starfive_data = {
        .caps = dw_mci_starfive_caps,
        .num_caps = ARRAY_SIZE(dw_mci_starfive_caps),
-       .set_ios = dw_mci_starfive_set_ios,
+       //.set_ios = dw_mci_starfive_set_ios,
        .parse_dt = dw_mci_starfive_parse_dt,
        .execute_tuning = dw_mci_starfive_execute_tuning,
-       .switch_voltage  = dw_mci_starfive_switch_voltage,
+       //.switch_voltage  = dw_mci_starfive_switch_voltage,
 };
 
 static const struct of_device_id dw_mci_starfive_match[] = {