Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit ea6d0273 authored by Adrian Hunter's avatar Adrian Hunter Committed by Ulf Hansson
Browse files

mmc: sdhci-of-esdhc: Fix timeout checks



Always check the wait condition before returning timeout.

Signed-off-by: default avatarAdrian Hunter <adrian.hunter@intel.com>
Reviewed-by: default avatarYangbo Lu <yangbo.lu@nxp.com>
Signed-off-by: default avatarUlf Hansson <ulf.hansson@linaro.org>
parent 566b6020
Loading
Loading
Loading
Loading
+12 −4
Original line number Diff line number Diff line
@@ -530,8 +530,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;
@@ -639,8 +643,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;