]> git.dujemihanovic.xyz Git - u-boot.git/commitdiff
mmc: tmio: Always check for errors after receiving an IRQ
authorMarek Vasut <marek.vasut+renesas@mailbox.org>
Sat, 14 Oct 2023 21:56:03 +0000 (23:56 +0200)
committerMarek Vasut <marek.vasut+renesas@mailbox.org>
Fri, 27 Oct 2023 09:21:28 +0000 (11:21 +0200)
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 <marek.vasut+renesas@mailbox.org>
Reviewed-by: Yoshihiro Shimoda <yoshihiro.shimoda.uh@renesas.com>
Tested-by: Thuan Nguyen Hong <thuan.nguyen-hong@banvien.com.vn>
drivers/mmc/tmio-common.c

index d1e26815996fe63d52b5e88c908ff344c4b07468..83eaf361f0cdc67695ec146ce9226e17e5b3a2a3 100644 (file)
@@ -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;