|
@@ -216,8 +216,12 @@ void sdhci_reset(struct sdhci_host *host, u8 mask)
|
|
|
timeout = ktime_add_ms(ktime_get(), 100);
|
|
|
|
|
|
/* hw clears the bit when it's done */
|
|
|
- while (sdhci_readb(host, SDHCI_SOFTWARE_RESET) & mask) {
|
|
|
- if (ktime_after(ktime_get(), timeout)) {
|
|
|
+ while (1) {
|
|
|
+ bool timedout = ktime_after(ktime_get(), timeout);
|
|
|
+
|
|
|
+ if (!(sdhci_readb(host, SDHCI_SOFTWARE_RESET) & mask))
|
|
|
+ break;
|
|
|
+ if (timedout) {
|
|
|
pr_err("%s: Reset 0x%x never completed.\n",
|
|
|
mmc_hostname(host->mmc), (int)mask);
|
|
|
sdhci_dumpregs(host);
|
|
@@ -1608,9 +1612,13 @@ void sdhci_enable_clk(struct sdhci_host *host, u16 clk)
|
|
|
|
|
|
/* Wait max 20 ms */
|
|
|
timeout = ktime_add_ms(ktime_get(), 20);
|
|
|
- while (!((clk = sdhci_readw(host, SDHCI_CLOCK_CONTROL))
|
|
|
- & SDHCI_CLOCK_INT_STABLE)) {
|
|
|
- if (ktime_after(ktime_get(), timeout)) {
|
|
|
+ while (1) {
|
|
|
+ bool timedout = ktime_after(ktime_get(), timeout);
|
|
|
+
|
|
|
+ clk = sdhci_readw(host, SDHCI_CLOCK_CONTROL);
|
|
|
+ if (clk & SDHCI_CLOCK_INT_STABLE)
|
|
|
+ break;
|
|
|
+ if (timedout) {
|
|
|
pr_err("%s: Internal clock never stabilised.\n",
|
|
|
mmc_hostname(host->mmc));
|
|
|
sdhci_dumpregs(host);
|