mmc: renesas_sdhi: break SCC reset into own function
authorWolfram Sang <wsa+renesas@sang-engineering.com>
Wed, 17 Mar 2021 09:16:21 +0000 (10:16 +0100)
committerUlf Hansson <ulf.hansson@linaro.org>
Tue, 30 Mar 2021 09:42:05 +0000 (11:42 +0200)
renesas_sdhi_reset used to mainly reset the SCC but is now doing more
and even more will be added. So, factor out SCC reset to have a clear
distinction when we want to reset either SCC or SDHI+SCC.

Reviewed-by: Yoshihiro Shimoda <yoshihiro.shimoda.uh@renesas.com>
Tested-by: Yoshihiro Shimoda <yoshihiro.shimoda.uh@renesas.com>
Signed-off-by: Wolfram Sang <wsa+renesas@sang-engineering.com>
Link: https://lore.kernel.org/r/20210317091622.31890-3-wsa+renesas@sang-engineering.com
Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org>
drivers/mmc/host/renesas_sdhi_core.c

index 09a5e0dafbef346edf39e2861a93ecad2f7f09b7..db753829eaf6a510501f5b1701511c4854020987 100644 (file)
@@ -557,21 +557,25 @@ static int renesas_sdhi_prepare_hs400_tuning(struct mmc_host *mmc, struct mmc_io
        return 0;
 }
 
+static void renesas_sdhi_scc_reset(struct tmio_mmc_host *host, struct renesas_sdhi *priv)
+{
+       renesas_sdhi_disable_scc(host->mmc);
+       renesas_sdhi_reset_hs400_mode(host, priv);
+       priv->needs_adjust_hs400 = false;
+
+       sd_scc_write32(host, priv, SH_MOBILE_SDHI_SCC_RVSCNTL,
+                      ~SH_MOBILE_SDHI_SCC_RVSCNTL_RVSEN &
+                      sd_scc_read32(host, priv, SH_MOBILE_SDHI_SCC_RVSCNTL));
+}
+
 /* only populated for TMIO_MMC_MIN_RCAR2 */
 static void renesas_sdhi_reset(struct tmio_mmc_host *host)
 {
        struct renesas_sdhi *priv = host_to_priv(host);
        u16 val;
 
-       if (priv->scc_ctl) {
-               renesas_sdhi_disable_scc(host->mmc);
-               renesas_sdhi_reset_hs400_mode(host, priv);
-               priv->needs_adjust_hs400 = false;
-
-               sd_scc_write32(host, priv, SH_MOBILE_SDHI_SCC_RVSCNTL,
-                              ~SH_MOBILE_SDHI_SCC_RVSCNTL_RVSEN &
-                              sd_scc_read32(host, priv, SH_MOBILE_SDHI_SCC_RVSCNTL));
-       }
+       if (priv->scc_ctl)
+               renesas_sdhi_scc_reset(host, priv);
 
        sd_ctrl_write32_as_16_and_16(host, CTL_IRQ_MASK, TMIO_MASK_ALL_RCAR2);
 
@@ -691,7 +695,7 @@ static int renesas_sdhi_execute_tuning(struct mmc_host *mmc, u32 opcode)
 
        ret = renesas_sdhi_select_tuning(host);
        if (ret < 0)
-               renesas_sdhi_reset(host);
+               renesas_sdhi_scc_reset(host, priv);
        return ret;
 }