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...@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 _______________________________________________ U-Boot mailing list U-Boot@lists.denx.de https://lists.denx.de/listinfo/u-boot