diff options
| -rw-r--r-- | drivers/mmc/host/sdhci-msm.c | 8 | ||||
| -rw-r--r-- | drivers/mmc/host/sdhci-msm.h | 1 |
2 files changed, 9 insertions, 0 deletions
diff --git a/drivers/mmc/host/sdhci-msm.c b/drivers/mmc/host/sdhci-msm.c index 7f4d22276194..39de38908718 100644 --- a/drivers/mmc/host/sdhci-msm.c +++ b/drivers/mmc/host/sdhci-msm.c @@ -966,6 +966,13 @@ int sdhci_msm_execute_tuning(struct sdhci_host *host, u32 opcode) (ios.timing == MMC_TIMING_UHS_SDR104))) return 0; + /* + * Don't allow re-tuning for CRC errors observed for any commands + * that are sent during tuning sequence itself. + */ + if (msm_host->tuning_in_progress) + return 0; + msm_host->tuning_in_progress = true; pr_debug("%s: Enter %s\n", mmc_hostname(mmc), __func__); /* CDC/SDC4 DLL HW calibration is only required for HS400 mode*/ @@ -1142,6 +1149,7 @@ out: if (!rc) msm_host->tuning_done = true; spin_unlock_irqrestore(&host->lock, flags); + msm_host->tuning_in_progress = false; pr_debug("%s: Exit %s, err(%d)\n", mmc_hostname(mmc), __func__, rc); return rc; } diff --git a/drivers/mmc/host/sdhci-msm.h b/drivers/mmc/host/sdhci-msm.h index 00785765a1ec..e47a5083e8a6 100644 --- a/drivers/mmc/host/sdhci-msm.h +++ b/drivers/mmc/host/sdhci-msm.h @@ -213,6 +213,7 @@ struct sdhci_msm_host { struct device_attribute pm_qos_group_status_attr; bool pm_qos_group_enable; struct sdhci_msm_pm_qos_irq pm_qos_irq; + bool tuning_in_progress; }; extern char *saved_command_line; |
