diff options
author | Uwe Kleine-König <u.kleine-koenig@pengutronix.de> | 2021-09-16 11:36:26 +0200 |
---|---|---|
committer | Sascha Hauer <s.hauer@pengutronix.de> | 2021-10-05 13:51:11 +0200 |
commit | d64e4d691f19180825035e480218596427e3f9d1 (patch) | |
tree | e38400cef035c225dcd9130ac6ab9dccba87bd21 /drivers | |
parent | 4a471f0360e67e8e6696c0cd86dd1af6eb92e5be (diff) | |
download | barebox-d64e4d691f19180825035e480218596427e3f9d1.tar.gz barebox-d64e4d691f19180825035e480218596427e3f9d1.tar.xz |
mci-bcm2835: Don't block infinitely while waiting for a command completion
Instead abort with a timeout error. This prevents getting a hung barebox
when a command doesn't complete.
Signed-off-by: Uwe Kleine-König <u.kleine-koenig@pengutronix.de>
Link: https://lore.barebox.org/20210916093627.173566-1-u.kleine-koenig@pengutronix.de
Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de>
Diffstat (limited to 'drivers')
-rw-r--r-- | drivers/mci/mci-bcm2835.c | 4 |
1 files changed, 4 insertions, 0 deletions
diff --git a/drivers/mci/mci-bcm2835.c b/drivers/mci/mci-bcm2835.c index 0450f899c6..12f7cb6ea3 100644 --- a/drivers/mci/mci-bcm2835.c +++ b/drivers/mci/mci-bcm2835.c @@ -87,13 +87,17 @@ static u32 bcm2835_sdhci_read32(struct sdhci *sdhci, int reg) static u32 bcm2835_mci_wait_command_done(struct bcm2835_mci_host *host) { u32 interrupt = 0; + uint64_t start; + start = get_time_ns(); while (true) { interrupt = sdhci_read32(&host->sdhci, SDHCI_INT_STATUS); if (interrupt & SDHCI_INT_INDEX) return -EPERM; if (interrupt & SDHCI_INT_CMD_COMPLETE) break; + if (is_timeout(start, SECOND)) + return -ETIMEDOUT; } return 0; } |