From 478653687b731aa79a42ee22151e1a5a43c278d9 Mon Sep 17 00:00:00 2001 From: R Raj Kumar Date: Wed, 11 Feb 2015 09:30:42 +0530 Subject: [PATCH] mmc: tegra: add delays in auto calibration sequence - Added 1us delay after enabling e_input pad and added 1us delay just before polling auto calibration status - Added NvQurik to add delays in auto calibration sequence only for T210 platforms Bug 200062843 Bug 1591658 Change-Id: I83d889f6fd2bd552f8371fcd2ae57b194c7da1fe Reviewed-on: http://git-master/r/705356 (cherry picked from commit fede7126f915ef2539c4e358b937ae7c6445407a) Signed-off-by: R Raj Kumar Change-Id: I80c4e3c4f8b4aeabce6fae67da1280796f27ac29 Reviewed-on: http://git-master/r/707735 Reviewed-by: Venu Byravarasu --- drivers/mmc/host/sdhci-tegra.c | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/drivers/mmc/host/sdhci-tegra.c b/drivers/mmc/host/sdhci-tegra.c index 9326b76abb4..55fae4bf4e7 100644 --- a/drivers/mmc/host/sdhci-tegra.c +++ b/drivers/mmc/host/sdhci-tegra.c @@ -231,6 +231,7 @@ #define NVQUIRK2_DYNAMIC_TRIM_SUPPLY_SWITCH BIT(4) /* Select SDR50 UHS mode for host if the device runs at SDR50 mode on T210 */ #define NVQUIRK2_SELECT_SDR50_MODE BIT(5) +#define NVQUIRK2_ADD_DELAY_AUTO_CALIBRATION BIT(6) /* Common subset of quirks for Tegra3 and later sdmmc controllers */ #define TEGRA_SDHCI_NVQUIRKS (NVQUIRK_ENABLE_PADPIPE_CLKEN | \ @@ -1969,6 +1970,10 @@ static void tegra_sdhci_do_calibration(struct sdhci_host *sdhci, } sdhci_writel(sdhci, val, SDMMC_SDMEMCOMPPADCTRL); + /* Wait for 1us after e_input is enabled*/ + if (soc_data->nvquirks2 & NVQUIRK2_ADD_DELAY_AUTO_CALIBRATION) + udelay(1); + /* Enable Auto Calibration*/ val = sdhci_readl(sdhci, SDMMC_AUTO_CAL_CONFIG); val |= SDMMC_AUTO_CAL_CONFIG_AUTO_CAL_ENABLE; @@ -2000,6 +2005,10 @@ static void tegra_sdhci_do_calibration(struct sdhci_host *sdhci, } sdhci_writel(sdhci, val, SDMMC_AUTO_CAL_CONFIG); + /* Wait for 1us after auto calibration is enabled*/ + if (soc_data->nvquirks2 & NVQUIRK2_ADD_DELAY_AUTO_CALIBRATION) + udelay(1); + /* Wait until the calibration is done */ do { if (!(sdhci_readl(sdhci, SDMMC_AUTO_CAL_STATUS) & @@ -4781,6 +4790,7 @@ static struct sdhci_tegra_soc_data soc_data_tegra21 = { NVQUIRK2_CONFIG_PWR_DET | NVQUIRK2_BROKEN_SD2_0_SUPPORT | NVQUIRK2_SELECT_SDR50_MODE | + NVQUIRK2_ADD_DELAY_AUTO_CALIBRATION | NVQUIRK2_DYNAMIC_TRIM_SUPPLY_SWITCH, }; -- 2.39.2