The clk_divider must be set to 1 on ddr52 8bit mode for rockchip
platform. Otherwise we will get a data crc error during data
transmission.

Signed-off-by: Ziyuan Xu <xzy...@rock-chips.com>
---

 drivers/mmc/dw_mmc.c          | 2 +-
 drivers/mmc/rockchip_dw_mmc.c | 7 +++++++
 2 files changed, 8 insertions(+), 1 deletion(-)

diff --git a/drivers/mmc/dw_mmc.c b/drivers/mmc/dw_mmc.c
index e862eb2..dcd7fba 100644
--- a/drivers/mmc/dw_mmc.c
+++ b/drivers/mmc/dw_mmc.c
@@ -344,7 +344,7 @@ static int dwmci_setup_bus(struct dwmci_host *host, u32 
freq)
        int timeout = 10000;
        unsigned long sclk;
 
-       if ((freq == host->clock) || (freq == 0))
+       if (freq == 0)
                return 0;
        /*
         * If host->get_mmc_clk isn't defined,
diff --git a/drivers/mmc/rockchip_dw_mmc.c b/drivers/mmc/rockchip_dw_mmc.c
index 474ca1c..b2b7f5a 100644
--- a/drivers/mmc/rockchip_dw_mmc.c
+++ b/drivers/mmc/rockchip_dw_mmc.c
@@ -43,6 +43,13 @@ static uint rockchip_dwmmc_get_mmc_clk(struct dwmci_host 
*host, uint freq)
        struct rockchip_dwmmc_priv *priv = dev_get_priv(dev);
        int ret;
 
+       /*
+        * If DDR52 8bit mode(only emmc work in 8bit mode),
+        * divider must be set 1
+        */
+       if (mmc_card_ddr52(host->mmc) && host->mmc->bus_width == 8)
+               freq *= 2;
+
        ret = clk_set_rate(&priv->clk, freq);
        if (ret < 0) {
                printf("%s: err=%d\n", __func__, ret);
-- 
2.7.4


_______________________________________________
U-Boot mailing list
U-Boot@lists.denx.de
https://lists.denx.de/listinfo/u-boot

Reply via email to