mmc: fix mmc_poll_for_busy() false timeout when card is ready
mmc_poll_for_busy() returns a false -ETIMEDOUT if the card becomes ready on the exact iteration where timeout_ms reaches 0. The card-ready check breaks out of the loop, but then the post-loop check "if (timeout_ms <= 0)" fires and returns -ETIMEDOUT despite the card being ready. Fix by returning 0 directly when the card is ready instead of breaking out of the loop. The only exit from the loop is now the timeout path, so the post-loop code unconditionally returns -ETIMEDOUT. Reviewed-by: Tanmay Kathpalia <tanmay.kathpalia@altera.com> Signed-off-by: Peng Fan <peng.fan@nxp.com>
This commit is contained in:
+3
-7
@@ -325,7 +325,7 @@ int mmc_poll_for_busy(struct mmc *mmc, int timeout_ms)
|
||||
if ((status & MMC_STATUS_RDY_FOR_DATA) &&
|
||||
(status & MMC_STATUS_CURR_STATE) !=
|
||||
MMC_STATE_PRG)
|
||||
break;
|
||||
return 0;
|
||||
|
||||
if (status & MMC_STATUS_MASK) {
|
||||
#if !defined(CONFIG_XPL_BUILD) || defined(CONFIG_SPL_LIBCOMMON_SUPPORT)
|
||||
@@ -340,14 +340,10 @@ int mmc_poll_for_busy(struct mmc *mmc, int timeout_ms)
|
||||
udelay(1000);
|
||||
}
|
||||
|
||||
if (timeout_ms <= 0) {
|
||||
#if !defined(CONFIG_XPL_BUILD) || defined(CONFIG_SPL_LIBCOMMON_SUPPORT)
|
||||
log_err("Timeout waiting card ready\n");
|
||||
log_err("Timeout waiting card ready\n");
|
||||
#endif
|
||||
return -ETIMEDOUT;
|
||||
}
|
||||
|
||||
return 0;
|
||||
return -ETIMEDOUT;
|
||||
}
|
||||
|
||||
int mmc_set_blocklen(struct mmc *mmc, int len)
|
||||
|
||||
Reference in New Issue
Block a user