| From 3833395f7cf65d9ae53a2034310c3b0951787ce5 Mon Sep 17 00:00:00 2001 |
| From: Adrian Hunter <adrian.hunter@intel.com> |
| Date: Mon, 10 Dec 2018 10:56:24 +0200 |
| Subject: mmc: sdhci-of-esdhc: Fix timeout checks |
| |
| [ Upstream commit ea6d027312111c6d96309ad1a684b33cb37e6764 ] |
| |
| Always check the wait condition before returning timeout. |
| |
| Signed-off-by: Adrian Hunter <adrian.hunter@intel.com> |
| Reviewed-by: Yangbo Lu <yangbo.lu@nxp.com> |
| Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org> |
| Signed-off-by: Sasha Levin <sashal@kernel.org> |
| --- |
| drivers/mmc/host/sdhci-of-esdhc.c | 16 ++++++++++++---- |
| 1 file changed, 12 insertions(+), 4 deletions(-) |
| |
| diff --git a/drivers/mmc/host/sdhci-of-esdhc.c b/drivers/mmc/host/sdhci-of-esdhc.c |
| index 8332f56e6c0d..7b7d077e40fd 100644 |
| --- a/drivers/mmc/host/sdhci-of-esdhc.c |
| +++ b/drivers/mmc/host/sdhci-of-esdhc.c |
| @@ -481,8 +481,12 @@ static void esdhc_clock_enable(struct sdhci_host *host, bool enable) |
| /* Wait max 20 ms */ |
| timeout = ktime_add_ms(ktime_get(), 20); |
| val = ESDHC_CLOCK_STABLE; |
| - while (!(sdhci_readl(host, ESDHC_PRSSTAT) & val)) { |
| - if (ktime_after(ktime_get(), timeout)) { |
| + while (1) { |
| + bool timedout = ktime_after(ktime_get(), timeout); |
| + |
| + if (sdhci_readl(host, ESDHC_PRSSTAT) & val) |
| + break; |
| + if (timedout) { |
| pr_err("%s: Internal clock never stabilised.\n", |
| mmc_hostname(host->mmc)); |
| break; |
| @@ -558,8 +562,12 @@ static void esdhc_of_set_clock(struct sdhci_host *host, unsigned int clock) |
| |
| /* Wait max 20 ms */ |
| timeout = ktime_add_ms(ktime_get(), 20); |
| - while (!(sdhci_readl(host, ESDHC_PRSSTAT) & ESDHC_CLOCK_STABLE)) { |
| - if (ktime_after(ktime_get(), timeout)) { |
| + while (1) { |
| + bool timedout = ktime_after(ktime_get(), timeout); |
| + |
| + if (sdhci_readl(host, ESDHC_PRSSTAT) & ESDHC_CLOCK_STABLE) |
| + break; |
| + if (timedout) { |
| pr_err("%s: Internal clock never stabilised.\n", |
| mmc_hostname(host->mmc)); |
| return; |
| -- |
| 2.19.1 |
| |