summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMarek Vasut <[email protected]>2023-10-14 23:56:03 +0200
committerMarek Vasut <[email protected]>2023-10-27 11:21:28 +0200
commit631dbe0c084f7459c4caa398470d4004152c2333 (patch)
treec4dbe91e5c36382cc5ee930f2c7c9c899bd48403
parent0fb6cd6aa4be28d84970ad81fe1aa5acf32af306 (diff)
mmc: tmio: Always check for errors after receiving an IRQ
Unconditionally check for errors even after successful reception of IRQ flag, since the hardware may set both an IRQ completion flag and an error flag at the same time. This mode of failure happens in case of an error during transfer, in which case the hardware may set the expected IRQ completion flag as well as error flags. The later is currently not checked by the driver and such an error is not detected. Improve the error detection. Signed-off-by: Marek Vasut <[email protected]> Reviewed-by: Yoshihiro Shimoda <[email protected]> Tested-by: Thuan Nguyen Hong <[email protected]>
-rw-r--r--drivers/mmc/tmio-common.c5
1 files changed, 4 insertions, 1 deletions
diff --git a/drivers/mmc/tmio-common.c b/drivers/mmc/tmio-common.c
index d1e26815996..83eaf361f0c 100644
--- a/drivers/mmc/tmio-common.c
+++ b/drivers/mmc/tmio-common.c
@@ -122,7 +122,10 @@ static int tmio_sd_wait_for_irq(struct udevice *dev, struct mmc_cmd *cmd,
long wait = 1000000;
int ret;
- while (!(tmio_sd_readl(priv, reg) & flag)) {
+ while (true) {
+ if (tmio_sd_readl(priv, reg) & flag)
+ return tmio_sd_check_error(dev, cmd);
+
if (wait-- < 0) {
dev_err(dev, "timeout\n");
return -ETIMEDOUT;