]> rtime.felk.cvut.cz Git - sojka/nv-tegra/linux-3.10.git/commitdiff
mmc: tegra: Update HW Tuning Iterations Value
authorNaveen Kumar Arepalli <naveenk@nvidia.com>
Wed, 4 Feb 2015 09:52:46 +0000 (15:22 +0530)
committerNaveen Kumar Arepalli <naveenk@nvidia.com>
Thu, 12 Feb 2015 06:36:28 +0000 (22:36 -0800)
-Set HW Tuning Iterations to 256 in SDR50 mode.
-Set HW Tuning Iterations to 128 in non SDR50 modes.

Bug 1547083

Change-Id: Ia5dbac24963e6f111ce0feca77c1edb94ba97eaa
Signed-off-by: Naveen Kumar Arepalli <naveenk@nvidia.com>
Reviewed-on: http://git-master/r/681097
(cherry picked from commit 716450629e5d42dd0918634803285358cd9e88e7)
Reviewed-on: http://git-master/r/705357
Reviewed-by: Automatic_Commit_Validation_User
Reviewed-by: Bitan Biswas <bbiswas@nvidia.com>
drivers/mmc/host/sdhci-tegra.c

index d7d46c35bbf72a7e3d3a34d647e37737074d4067..9326b76abb43f4510c3cb6b0616c88ab9ffc378d 100644 (file)
 #define SDHCI_VNDR_TUN_CTRL0_TUN_HW_TAP                        0x20000
 #define TUNING_WORD_SEL_MASK                           0x7
 /*value 4 in 13 to 15 bits indicates 256 iterations*/
-#define SDHCI_VNDR_TUN_CTRL0_TUN_ITERATIONS            0x8000
+#define SDHCI_VNDR_TUN_CTRL0_TUN_ITERATIONS_MASK       0x7
+#define SDHCI_VNDR_TUN_CTRL0_TUN_ITERATIONS_SHIFT      13
+/* Value 2 in NUM_TUNING_ITERATIONS indicates 128 iterations */
+#define HW_TUNING_128_TRIES                            2
+/* Value 4 in NUM_TUNING_ITERATIONS indicates 256 iterations */
+#define HW_TUNING_256_TRIES                            4
+
 #define SDHCI_VNDR_TUN_CTRL1_TUN_STEP_SIZE             0x77
 
 
@@ -753,6 +759,21 @@ static void tegra_sdhci_dumpregs(struct sdhci_host *sdhci)
 
 static int sdhci_tegra_get_max_tuning_loop_counter(struct sdhci_host *sdhci)
 {
+       u16 hw_tuning_iterations;
+       u32 vendor_ctrl;
+
+       if (sdhci->mmc->ios.timing == MMC_TIMING_UHS_SDR50)
+               hw_tuning_iterations = HW_TUNING_256_TRIES;
+       else
+               hw_tuning_iterations = HW_TUNING_128_TRIES;
+
+       vendor_ctrl = sdhci_readl(sdhci, SDHCI_VNDR_TUN_CTRL0_0);
+       vendor_ctrl &=  ~(SDHCI_VNDR_TUN_CTRL0_TUN_ITERATIONS_MASK <<
+                       SDHCI_VNDR_TUN_CTRL0_TUN_ITERATIONS_SHIFT);
+       vendor_ctrl |= (hw_tuning_iterations <<
+                       SDHCI_VNDR_TUN_CTRL0_TUN_ITERATIONS_SHIFT);
+       sdhci_writel(sdhci, vendor_ctrl, SDHCI_VNDR_TUN_CTRL0_0);
+
        return 257;
 }
 
@@ -1499,7 +1520,6 @@ static void tegra_sdhci_reset_exit(struct sdhci_host *host, u8 mask)
                vendor_ctrl &= ~(SDHCI_VNDR_TUN_CTRL0_0_MUL_M);
                vendor_ctrl |= SDHCI_VNDR_TUN_CTRL0_0_MUL_M_VAL;
                vendor_ctrl |= SDHCI_VNDR_TUN_CTRL_RETUNE_REQ_EN;
-               vendor_ctrl |= SDHCI_VNDR_TUN_CTRL0_TUN_ITERATIONS;
                sdhci_writel(host, vendor_ctrl, SDHCI_VNDR_TUN_CTRL0_0);
 
                vendor_ctrl = sdhci_readl(host, SDHCI_VNDR_TUN_CTRL1_0);