]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
mmc: dw_mmc: allow biu and ciu clocks to defer
authorBen Whitten <ben.whitten@gmail.com>
Sun, 11 Aug 2024 21:22:11 +0000 (22:22 +0100)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Thu, 29 Aug 2024 15:36:10 +0000 (17:36 +0200)
commit 6275c7bc8dd07644ea8142a1773d826800f0f3f7 upstream.

Fix a race condition if the clock provider comes up after mmc is probed,
this causes mmc to fail without retrying.
When given the DEFER error from the clk source, pass it on up the chain.

Fixes: f90a0612f0e1 ("mmc: dw_mmc: lookup for optional biu and ciu clocks")
Signed-off-by: Ben Whitten <ben.whitten@gmail.com>
Cc: stable@vger.kernel.org
Link: https://lore.kernel.org/r/20240811212212.123255-1-ben.whitten@gmail.com
Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/mmc/host/dw_mmc.c

index 8e2d676b9239909fa5c2449b0c67fd64c46528d4..a4f813ea177a8e869d5208879fe3c4be968105c4 100644 (file)
@@ -3293,6 +3293,10 @@ int dw_mci_probe(struct dw_mci *host)
        host->biu_clk = devm_clk_get(host->dev, "biu");
        if (IS_ERR(host->biu_clk)) {
                dev_dbg(host->dev, "biu clock not available\n");
+               ret = PTR_ERR(host->biu_clk);
+               if (ret == -EPROBE_DEFER)
+                       return ret;
+
        } else {
                ret = clk_prepare_enable(host->biu_clk);
                if (ret) {
@@ -3304,6 +3308,10 @@ int dw_mci_probe(struct dw_mci *host)
        host->ciu_clk = devm_clk_get(host->dev, "ciu");
        if (IS_ERR(host->ciu_clk)) {
                dev_dbg(host->dev, "ciu clock not available\n");
+               ret = PTR_ERR(host->ciu_clk);
+               if (ret == -EPROBE_DEFER)
+                       goto err_clk_biu;
+
                host->bus_hz = host->pdata->bus_hz;
        } else {
                ret = clk_prepare_enable(host->ciu_clk);