mmc: sdhci-of-esdhc: convert to use esdhc_tuning_window_ptr()
authorYangbo Lu <yangbo.lu@nxp.com>
Thu, 12 Dec 2019 07:52:18 +0000 (15:52 +0800)
committerUlf Hansson <ulf.hansson@linaro.org>
Thu, 16 Jan 2020 10:45:53 +0000 (11:45 +0100)
Convert to use a new function esdhc_tuning_window_ptr() to
get tuning window start point and end point.

Signed-off-by: Yangbo Lu <yangbo.lu@nxp.com>
Acked-by: Adrian Hunter <adrian.hunter@intel.com>
Link: https://lore.kernel.org/r/20191212075219.48625-1-yangbo.lu@nxp.com
Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org>
drivers/mmc/host/sdhci-of-esdhc.c

index cd3b676..1bfd211 100644 (file)
@@ -888,20 +888,11 @@ static void esdhc_tuning_block_enable(struct sdhci_host *host, bool enable)
        esdhc_clock_enable(host, true);
 }
 
-static void esdhc_prepare_sw_tuning(struct sdhci_host *host, u8 *window_start,
+static void esdhc_tuning_window_ptr(struct sdhci_host *host, u8 *window_start,
                                    u8 *window_end)
 {
-       struct sdhci_pltfm_host *pltfm_host = sdhci_priv(host);
-       struct sdhci_esdhc *esdhc = sdhci_pltfm_priv(pltfm_host);
-       u8 tbstat_15_8, tbstat_7_0;
        u32 val;
 
-       if (esdhc->quirk_tuning_erratum_type1) {
-               *window_start = 5 * esdhc->div_ratio;
-               *window_end = 3 * esdhc->div_ratio;
-               return;
-       }
-
        /* Write TBCTL[11:8]=4'h8 */
        val = sdhci_readl(host, ESDHC_TBCTL);
        val &= ~(0xf << 8);
@@ -920,6 +911,25 @@ static void esdhc_prepare_sw_tuning(struct sdhci_host *host, u8 *window_start,
        val = sdhci_readl(host, ESDHC_TBSTAT);
        val = sdhci_readl(host, ESDHC_TBSTAT);
 
+       *window_end = val & 0xff;
+       *window_start = (val >> 8) & 0xff;
+}
+
+static void esdhc_prepare_sw_tuning(struct sdhci_host *host, u8 *window_start,
+                                   u8 *window_end)
+{
+       struct sdhci_pltfm_host *pltfm_host = sdhci_priv(host);
+       struct sdhci_esdhc *esdhc = sdhci_pltfm_priv(pltfm_host);
+       u8 start_ptr, end_ptr;
+
+       if (esdhc->quirk_tuning_erratum_type1) {
+               *window_start = 5 * esdhc->div_ratio;
+               *window_end = 3 * esdhc->div_ratio;
+               return;
+       }
+
+       esdhc_tuning_window_ptr(host, &start_ptr, &end_ptr);
+
        /* Reset data lines by setting ESDHCCTL[RSTD] */
        sdhci_reset(host, SDHCI_RESET_DATA);
        /* Write 32'hFFFF_FFFF to IRQSTAT register */
@@ -930,10 +940,8 @@ static void esdhc_prepare_sw_tuning(struct sdhci_host *host, u8 *window_start,
         * then program TBPTR[TB_WNDW_END_PTR] = 4 * div_ratio
         * and program TBPTR[TB_WNDW_START_PTR] = 8 * div_ratio.
         */
-       tbstat_7_0 = val & 0xff;
-       tbstat_15_8 = (val >> 8) & 0xff;
 
-       if (abs(tbstat_15_8 - tbstat_7_0) > (4 * esdhc->div_ratio)) {
+       if (abs(start_ptr - end_ptr) > (4 * esdhc->div_ratio)) {
                *window_start = 8 * esdhc->div_ratio;
                *window_end = 4 * esdhc->div_ratio;
        } else {