[U-Boot] [PATCH 21/33] mmc: add DDR52 support for eMMC card
Ziyuan Xu
xzy.xu at rock-chips.com
Mon May 15 06:07:15 UTC 2017
4.41+ eMMC card devices can run at 52MHz on DDR 8-bit mode, it can
improve write/read performance. Host driver can set MMC_MODE_DDR_52Mhz
to enable this feature.
Signed-off-by: Ziyuan Xu <xzy.xu at rock-chips.com>
---
drivers/mmc/mmc.c | 26 +++++++++++++++++++++++++-
1 file changed, 25 insertions(+), 1 deletion(-)
diff --git a/drivers/mmc/mmc.c b/drivers/mmc/mmc.c
index 953ffd8..c1f54c3 100644
--- a/drivers/mmc/mmc.c
+++ b/drivers/mmc/mmc.c
@@ -795,6 +795,27 @@ static int mmc_select_hs(struct mmc *mmc)
return ret;
}
+static int mmc_select_hs_ddr(struct mmc *mmc)
+{
+ u32 ext_csd_bits;
+ int err = 0;
+
+ if (mmc->bus_width == MMC_BUS_WIDTH_1BIT)
+ return 0;
+
+ ext_csd_bits = (mmc->bus_width == MMC_BUS_WIDTH_8BIT) ?
+ EXT_CSD_DDR_BUS_WIDTH_8 : EXT_CSD_DDR_BUS_WIDTH_4;
+
+ err = mmc_switch(mmc, EXT_CSD_CMD_SET_NORMAL,
+ EXT_CSD_BUS_WIDTH, ext_csd_bits);
+ if (err)
+ return err;
+
+ mmc_set_timing(mmc, MMC_TIMING_MMC_DDR52);
+
+ return 0;
+}
+
#ifndef CONFIG_SPL_BUILD
static int mmc_select_hs200(struct mmc *mmc)
{
@@ -941,8 +962,11 @@ static int mmc_change_freq(struct mmc *mmc)
if (mmc_card_hs200(mmc))
err = mmc_hs200_tuning(mmc);
- else
+ else if (!mmc_card_hs400es(mmc)) {
err = mmc_select_bus_width(mmc) > 0 ? 0 : err;
+ if (!err && avail_type & EXT_CSD_CARD_TYPE_DDR_52)
+ err = mmc_select_hs_ddr(mmc);
+ }
return err;
}
--
2.7.4
More information about the U-Boot
mailing list