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>
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>;
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>;
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>;
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>;
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>;
};
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>;
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>;
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>;
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>;
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>;
fifo-depth = <32>;
fifo-watermark-aligned;
data-addr = <0>;
+ starfive,sys-syscon = <&sys_syscon 0x9c 0x1 0x3e>;
status = "disabled";
};
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
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[] = {