From 3417de3d76e4d4e2830d3112450ff664f6f28b93 Mon Sep 17 00:00:00 2001 From: Sarthak Garg Date: Thu, 11 Feb 2021 13:43:47 +0530 Subject: [PATCH] mmc: core: Update mmc_scale_high logic properly for HS400 mode Current mmc_scale_high logic don't work well for HS400 mode. Infact we are ending up selecting HS200 mode instead of HS400 mode. Update mmc_scale_high logic properly for HS400 mode. Change-Id: Ic4960268866c35dd94b5ea9b41a813fc36ba8a94 Signed-off-by: Sarthak Garg --- drivers/mmc/core/mmc.c | 45 +++++++++++++----------------------------- 1 file changed, 14 insertions(+), 31 deletions(-) diff --git a/drivers/mmc/core/mmc.c b/drivers/mmc/core/mmc.c index 87e76b37ff1a..5c17979ccf2b 100644 --- a/drivers/mmc/core/mmc.c +++ b/drivers/mmc/core/mmc.c @@ -1610,37 +1610,6 @@ static int mmc_scale_high(struct mmc_host *host) mmc_set_clock(host, MMC_HIGH_26_MAX_DTR); } - if (!host->card->ext_csd.strobe_support) { - if (!(host->card->mmc_avail_type & EXT_CSD_CARD_TYPE_HS200)) { - pr_err("%s: %s: card does not support HS200\n", - mmc_hostname(host), __func__); - WARN_ON(1); - return -EPERM; - } - - err = mmc_select_hs200(host->card); - if (err) { - pr_err("%s: %s: selecting HS200 failed (%d)\n", - mmc_hostname(host), __func__, err); - return err; - } - - mmc_set_bus_speed(host->card); - - err = mmc_hs200_tuning(host->card); - if (err) { - pr_err("%s: %s: hs200 tuning failed (%d)\n", - mmc_hostname(host), __func__, err); - return err; - } - - if (!(host->card->mmc_avail_type & EXT_CSD_CARD_TYPE_HS400)) { - pr_debug("%s: card does not support HS400\n", - mmc_hostname(host)); - return 0; - } - } - mmc_set_initial_state(host); err = mmc_select_timing(host->card); if (err) { @@ -1649,6 +1618,20 @@ static int mmc_scale_high(struct mmc_host *host) return err; } + if (mmc_card_hs200(host->card)) { + err = mmc_hs200_tuning(host->card); + if (err) { + pr_err("%s: %s: hs200 tuning failed (%d)\n", + mmc_hostname(host), __func__, err); + return err; + } + err = mmc_select_hs400(host->card); + if (err) { + pr_err("%s: %s: Select hs400 failed (%d)\n", + mmc_hostname(host), __func__, err); + return err; + } + } return 0; }