mmc: renesas_sdhi: Get the reset handle early in the probe
authorLad Prabhakar <prabhakar.mahadev-lad.rj@bp.renesas.com>
Fri, 24 Jun 2022 18:14:37 +0000 (19:14 +0100)
committerUlf Hansson <ulf.hansson@linaro.org>
Tue, 12 Jul 2022 10:27:08 +0000 (12:27 +0200)
In case of devm_reset_control_get_optional_exclusive() failure we returned
directly instead of jumping to the error path to roll back initialization.

This patch moves devm_reset_control_get_optional_exclusive() early in the
probe so that we have the reset handle prior to initialization of the
hardware.

Fixes: b4d86f37eacb7 ("mmc: renesas_sdhi: do hard reset if possible")
Reported-by: Pavel Machek <pavel@denx.de>
Signed-off-by: Lad Prabhakar <prabhakar.mahadev-lad.rj@bp.renesas.com>
Reviewed-by: Geert Uytterhoeven <geert+renesas@glider.be>
Reviewed-by: Wolfram Sang <wsa+renesas@sang-engineering.com>
Link: https://lore.kernel.org/r/20220624181438.4355-2-prabhakar.mahadev-lad.rj@bp.renesas.com
Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org>
drivers/mmc/host/renesas_sdhi_core.c

index 4404ca1f98d80158940618fd2a3a89f35557959e..0d258b6e1a436ed89545c5b44cc8453bb30404cd 100644 (file)
@@ -938,6 +938,10 @@ int renesas_sdhi_probe(struct platform_device *pdev,
        if (IS_ERR(priv->clk_cd))
                return dev_err_probe(&pdev->dev, PTR_ERR(priv->clk_cd), "cannot get cd clock");
 
+       priv->rstc = devm_reset_control_get_optional_exclusive(&pdev->dev, NULL);
+       if (IS_ERR(priv->rstc))
+               return PTR_ERR(priv->rstc);
+
        priv->pinctrl = devm_pinctrl_get(&pdev->dev);
        if (!IS_ERR(priv->pinctrl)) {
                priv->pins_default = pinctrl_lookup_state(priv->pinctrl,
@@ -1030,10 +1034,6 @@ int renesas_sdhi_probe(struct platform_device *pdev,
        if (ret)
                goto efree;
 
-       priv->rstc = devm_reset_control_get_optional_exclusive(&pdev->dev, NULL);
-       if (IS_ERR(priv->rstc))
-               return PTR_ERR(priv->rstc);
-
        ver = sd_ctrl_read16(host, CTL_VERSION);
        /* GEN2_SDR104 is first known SDHI to use 32bit block count */
        if (ver < SDHI_VER_GEN2_SDR104 && mmc_data->max_blk_count > U16_MAX)