]> www.infradead.org Git - users/hch/uuid.git/commitdiff
mmc: sdhci-esdhc-imx: obtain the 'per' clock rate after its enablement
authorCiprian Costea <ciprianmarian.costea@oss.nxp.com>
Mon, 8 Jul 2024 12:10:17 +0000 (15:10 +0300)
committerUlf Hansson <ulf.hansson@linaro.org>
Fri, 12 Jul 2024 09:07:15 +0000 (11:07 +0200)
The I.MX SDHCI driver assumes that the frequency of the 'per' clock
can be obtained even on disabled clocks, which is not always the case.

According to 'clk_get_rate' documentation, it is only valid
once the clock source has been enabled.

Signed-off-by: Ciprian Costea <ciprianmarian.costea@oss.nxp.com>
Reviewed-by: Haibo Chen <haibo.chen@nxp.com>
Acked-by: Adrian Hunter <adrian.hunter@intel.com>
Link: https://lore.kernel.org/r/20240708121018.246476-3-ciprianmarian.costea@oss.nxp.com
Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org>
drivers/mmc/host/sdhci-esdhc-imx.c

index 21d984a77be8565a9c72d7580a210cfdc04de97e..8f0bc6dca2b0402fd2a0695903cf261a5b4e19dc 100644 (file)
@@ -1709,7 +1709,6 @@ static int sdhci_esdhc_imx_probe(struct platform_device *pdev)
        }
 
        pltfm_host->clk = imx_data->clk_per;
-       pltfm_host->clock = clk_get_rate(pltfm_host->clk);
        err = clk_prepare_enable(imx_data->clk_per);
        if (err)
                goto free_sdhci;
@@ -1720,6 +1719,13 @@ static int sdhci_esdhc_imx_probe(struct platform_device *pdev)
        if (err)
                goto disable_ipg_clk;
 
+       pltfm_host->clock = clk_get_rate(pltfm_host->clk);
+       if (!pltfm_host->clock) {
+               dev_err(mmc_dev(host->mmc), "could not get clk rate\n");
+               err = -EINVAL;
+               goto disable_ahb_clk;
+       }
+
        imx_data->pinctrl = devm_pinctrl_get(&pdev->dev);
        if (IS_ERR(imx_data->pinctrl))
                dev_warn(mmc_dev(host->mmc), "could not get pinctrl\n");