mmc: fsl_esdhc_imx: correct the actual card clock
authorHaibo Chen <haibo.chen@nxp.com>
Fri, 11 Feb 2022 11:16:57 +0000 (19:16 +0800)
committerStefano Babic <sbabic@denx.de>
Sat, 19 Feb 2022 13:46:54 +0000 (14:46 +0100)
The original code logic can not show the correct card clock, and also
has one risk when the div is 0. Because there is div -=1 before.

So move the operation before div -=1, and also involve ddr_pre_div
to get the correct value.

Signed-off-by: Haibo Chen <haibo.chen@nxp.com>
Reviewed-by: Marek Vasut <marex@denx.de>
drivers/mmc/fsl_esdhc_imx.c

index 29a945e..697e3c6 100644 (file)
@@ -608,6 +608,8 @@ static void set_sysctl(struct fsl_esdhc_priv *priv, struct mmc *mmc, uint clock)
        while (sdhc_clk / (div * pre_div * ddr_pre_div) > clock && div < 16)
                div++;
 
+       mmc->clock = sdhc_clk / pre_div / div / ddr_pre_div;
+
        pre_div >>= 1;
        div -= 1;
 
@@ -629,7 +631,6 @@ static void set_sysctl(struct fsl_esdhc_priv *priv, struct mmc *mmc, uint clock)
        else
                esdhc_setbits32(&regs->sysctl, SYSCTL_PEREN | SYSCTL_CKEN);
 
-       mmc->clock = sdhc_clk / pre_div / div;
        priv->clock = clock;
 }