From: Ye Li Date: Thu, 24 Oct 2019 02:27:48 +0000 (-0700) Subject: MLK-22851-1 mmc: fsl_esdhc: reduce unnecessary clock change X-Git-Tag: rel_imx_4.19.35_1.1.0~5 X-Git-Url: https://git.somdevices.com/?a=commitdiff_plain;h=18d62cf12e4c736d1a7cf2c9e7404ba0cac270fa;p=u-boot.git MLK-22851-1 mmc: fsl_esdhc: reduce unnecessary clock change In mmc initial state, the mmc framework sets clock to 0, so the fsl_esdhc driver converts to use min clock 400Khz. But the priv->clock is logged 400Khz not 0, and cause following calls to set_ios to set clock again. Each set to clock has 10ms delay for stable, then the problem accumulates some unnecessary delay. Signed-off-by: Ye Li (cherry picked from commit 151ab3bef2b1ec1c142c31048f3005ebce2a7a18) --- diff --git a/drivers/mmc/fsl_esdhc.c b/drivers/mmc/fsl_esdhc.c index 5d09b3ffba..78e1a60bc5 100644 --- a/drivers/mmc/fsl_esdhc.c +++ b/drivers/mmc/fsl_esdhc.c @@ -636,9 +636,6 @@ static void set_sysctl(struct fsl_esdhc_priv *priv, struct mmc *mmc, uint clock) sdhc_clk >>= 1; } - if (clock < mmc->cfg->f_min) - clock = mmc->cfg->f_min; - if (sdhc_clk / 16 > clock) { for (; pre_div < 256; pre_div *= 2) if ((sdhc_clk / pre_div) <= (clock * 16)) @@ -971,6 +968,7 @@ static int esdhc_set_ios_common(struct fsl_esdhc_priv *priv, struct mmc *mmc) { struct fsl_esdhc *regs = priv->esdhc_regs; int ret __maybe_unused; + uint clock; #ifdef CONFIG_FSL_ESDHC_USE_PERIPHERAL_CLK /* Select to use peripheral clock */ @@ -979,8 +977,12 @@ static int esdhc_set_ios_common(struct fsl_esdhc_priv *priv, struct mmc *mmc) esdhc_clock_control(priv, true); #endif /* Set the clock speed */ - if (priv->clock != mmc->clock) - set_sysctl(priv, mmc, mmc->clock); + clock = mmc->clock; + if (clock < mmc->cfg->f_min) + clock = mmc->cfg->f_min; + + if (priv->clock != clock) + set_sysctl(priv, mmc, clock); #ifdef MMC_SUPPORTS_TUNING if (mmc->clk_disable) {