mmc: tmio: factor out TAP usage
authorWolfram Sang <wsa+renesas@sang-engineering.com>
Wed, 29 Jan 2020 20:37:08 +0000 (21:37 +0100)
committerUlf Hansson <ulf.hansson@linaro.org>
Tue, 24 Mar 2020 13:35:38 +0000 (14:35 +0100)
TAPs are Renesas SDHI specific. Now that we moved all handling to the
SDHI core, we can also move the definitions from the TMIO struct to the
SDHI one.

Signed-off-by: Wolfram Sang <wsa+renesas@sang-engineering.com>
Reviewed-by: Niklas Söderlund <niklas.soderlund+renesas@ragnatech.se>
Reviewed-by: Yoshihiro Shimoda <yoshihiro.shimoda.uh@renesas.com>
Link: https://lore.kernel.org/r/20200129203709.30493-6-wsa+renesas@sang-engineering.com
Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org>
drivers/mmc/host/renesas_sdhi.h
drivers/mmc/host/renesas_sdhi_core.c
drivers/mmc/host/tmio_mmc.h

index 11a0b2b..7a1a741 100644 (file)
@@ -58,6 +58,11 @@ struct renesas_sdhi {
        u32 scc_tappos;
        u32 scc_tappos_hs400;
        bool doing_tune;
+
+       /* Tuning values: 1 for success, 0 for failure */
+       DECLARE_BITMAP(taps, BITS_PER_BYTE * sizeof(long));
+       unsigned int tap_num;
+       unsigned long tap_set;
 };
 
 #define host_to_priv(host) \
index 0c9e5e0..22eaabe 100644 (file)
@@ -354,7 +354,7 @@ static void renesas_sdhi_hs400_complete(struct tmio_mmc_host *host)
 
        if (priv->quirks && priv->quirks->hs400_4taps)
                sd_scc_write32(host, priv, SH_MOBILE_SDHI_SCC_TAPSET,
-                              host->tap_set / 2);
+                              priv->tap_set / 2);
 
        sd_scc_write32(host, priv, SH_MOBILE_SDHI_SCC_CKSEL,
                       SH_MOBILE_SDHI_SCC_CKSEL_DTSEL |
@@ -438,11 +438,11 @@ static int renesas_sdhi_select_tuning(struct tmio_mmc_host *host)
         * result requiring the tap to be good in both runs before
         * considering it for tuning selection.
         */
-       for (i = 0; i < host->tap_num * 2; i++) {
-               int offset = host->tap_num * (i < host->tap_num ? 1 : -1);
+       for (i = 0; i < priv->tap_num * 2; i++) {
+               int offset = priv->tap_num * (i < priv->tap_num ? 1 : -1);
 
-               if (!test_bit(i, host->taps))
-                       clear_bit(i + offset, host->taps);
+               if (!test_bit(i, priv->taps))
+                       clear_bit(i + offset, priv->taps);
        }
 
        /*
@@ -454,8 +454,8 @@ static int renesas_sdhi_select_tuning(struct tmio_mmc_host *host)
        ntap = 0;
        tap_start = 0;
        tap_end = 0;
-       for (i = 0; i < host->tap_num * 2; i++) {
-               if (test_bit(i, host->taps)) {
+       for (i = 0; i < priv->tap_num * 2; i++) {
+               if (test_bit(i, priv->taps)) {
                        ntap++;
                } else {
                        if (ntap > tap_cnt) {
@@ -474,12 +474,12 @@ static int renesas_sdhi_select_tuning(struct tmio_mmc_host *host)
        }
 
        if (tap_cnt >= SH_MOBILE_SDHI_MAX_TAP)
-               host->tap_set = (tap_start + tap_end) / 2 % host->tap_num;
+               priv->tap_set = (tap_start + tap_end) / 2 % priv->tap_num;
        else
                return -EIO;
 
        /* Set SCC */
-       sd_scc_write32(host, priv, SH_MOBILE_SDHI_SCC_TAPSET, host->tap_set);
+       sd_scc_write32(host, priv, SH_MOBILE_SDHI_SCC_TAPSET, priv->tap_set);
 
        /* Enable auto re-tuning */
        sd_scc_write32(host, priv, SH_MOBILE_SDHI_SCC_RVSCNTL,
@@ -494,27 +494,27 @@ static int renesas_sdhi_execute_tuning(struct tmio_mmc_host *host, u32 opcode)
        struct renesas_sdhi *priv = host_to_priv(host);
        int i, ret;
 
-       host->tap_num = renesas_sdhi_init_tuning(host);
-       if (!host->tap_num)
+       priv->tap_num = renesas_sdhi_init_tuning(host);
+       if (!priv->tap_num)
                return 0; /* Tuning is not supported */
 
-       if (host->tap_num * 2 >= sizeof(host->taps) * BITS_PER_BYTE) {
+       if (priv->tap_num * 2 >= sizeof(priv->taps) * BITS_PER_BYTE) {
                dev_err(&host->pdev->dev,
                        "Too many taps, please update 'taps' in tmio_mmc_host!\n");
                return -EINVAL;
        }
 
        priv->doing_tune = true;
-       bitmap_zero(host->taps, host->tap_num * 2);
+       bitmap_zero(priv->taps, priv->tap_num * 2);
 
        /* Issue CMD19 twice for each tap */
-       for (i = 0; i < 2 * host->tap_num; i++) {
+       for (i = 0; i < 2 * priv->tap_num; i++) {
                /* Set sampling clock position */
-               sd_scc_write32(host, priv, SH_MOBILE_SDHI_SCC_TAPSET, i % host->tap_num);
+               sd_scc_write32(host, priv, SH_MOBILE_SDHI_SCC_TAPSET, i % priv->tap_num);
 
                ret = mmc_send_tuning(host->mmc, opcode, NULL);
                if (ret == 0)
-                       set_bit(i, host->taps);
+                       set_bit(i, priv->taps);
        }
 
        return renesas_sdhi_select_tuning(host);
@@ -523,7 +523,7 @@ static int renesas_sdhi_execute_tuning(struct tmio_mmc_host *host, u32 opcode)
 static bool renesas_sdhi_manual_correction(struct tmio_mmc_host *host, bool use_4tap)
 {
        struct renesas_sdhi *priv = host_to_priv(host);
-       unsigned long new_tap = host->tap_set;
+       unsigned long new_tap = priv->tap_set;
        u32 val;
 
        val = sd_scc_read32(host, priv, SH_MOBILE_SDHI_SCC_RVSREQ);
@@ -560,9 +560,9 @@ static bool renesas_sdhi_manual_correction(struct tmio_mmc_host *host, bool use_
                        return false;
        }
 
-       host->tap_set = (new_tap % host->tap_num);
+       priv->tap_set = (new_tap % priv->tap_num);
        sd_scc_write32(host, priv, SH_MOBILE_SDHI_SCC_TAPSET,
-                      host->tap_set / (use_4tap ? 2 : 1));
+                      priv->tap_set / (use_4tap ? 2 : 1));
 
        return false;
 }
index b6fffd3..b4cf101 100644 (file)
@@ -184,11 +184,6 @@ struct tmio_mmc_host {
         */
        int (*execute_tuning)(struct tmio_mmc_host *host, u32 opcode);
 
-       /* Tuning values: 1 for success, 0 for failure */
-       DECLARE_BITMAP(taps, BITS_PER_BYTE * sizeof(long));
-       unsigned int tap_num;
-       unsigned long tap_set;
-
        void (*prepare_hs400_tuning)(struct tmio_mmc_host *host);
        void (*hs400_downgrade)(struct tmio_mmc_host *host);
        void (*hs400_complete)(struct tmio_mmc_host *host);