[PATCH v3 2/3] mmc: core: changes frequency to hs_max_dtr when selecting hs400es

Shawn Lin shawn.lin at rock-chips.com
Thu Sep 29 23:18:59 PDT 2016

Per JESD84-B51 P49, Host need to change frequency to <=52MHz
after setting HS_TIMING to 0x1, and host may changes frequency
to <= 200MHz after setting HS_TIMING to 0x3. That means the card
expects the clock rate to increase from the current used f_init
(which is less than 400KHz, but still being less than 52MHz) to
52MHz, otherwise we find some eMMC devices significantly report
failure when sending status.

Reported-by: Xiao Yao <xiaoyao at rock-chips.com>
Signed-off-by: Shawn Lin <shawn.lin at rock-chips.com>

Reviewed-by: Douglas Anderson <dianders at chromium.org>

Changes in v3:
- add Doug's tag and fix the wrong page index of spec

Changes in v2:
- improve the changelog

 drivers/mmc/core/mmc.c | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/drivers/mmc/core/mmc.c b/drivers/mmc/core/mmc.c
index f4ed5ac..39fc5b2 100644
--- a/drivers/mmc/core/mmc.c
+++ b/drivers/mmc/core/mmc.c
@@ -1282,6 +1282,8 @@ static int mmc_select_hs400es(struct mmc_card *card)
 	if (err)
 		goto out_err;
+	mmc_set_clock(host, card->ext_csd.hs_max_dtr);
 	err = mmc_switch_status(card);
 	if (err)
 		goto out_err;

More information about the Linux-rockchip mailing list