mmc: mmci: Use state machine state as exit condition
authorLinus Walleij <linus.walleij@linaro.org>
Fri, 16 Jun 2023 20:42:25 +0000 (22:42 +0200)
committerUlf Hansson <ulf.hansson@linaro.org>
Mon, 19 Jun 2023 11:14:26 +0000 (13:14 +0200)
Return true if and only if we reached the state
MMCI_BUSY_DONE in the ux500 ->busy_complete() callback.

Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
Link: https://lore.kernel.org/r/20230405-pl180-busydetect-fix-v7-7-69a7164f2a61@linaro.org
Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org>
drivers/mmc/host/mmci.c

index 4c78783..f59c6eb 100644 (file)
@@ -683,7 +683,7 @@ static bool ux500_busy_complete(struct mmci_host *host, u32 status, u32 err_msk)
                       ~host->variant->busy_detect_mask, base + MMCIMASK0);
                host->busy_state = MMCI_BUSY_DONE;
                host->busy_status = 0;
-               return true;
+               goto out_ret_state;
        }
 
        /*
@@ -713,7 +713,7 @@ static bool ux500_busy_complete(struct mmci_host *host, u32 status, u32 err_msk)
                                       host->variant->busy_detect_mask,
                                       base + MMCIMASK0);
                                host->busy_state = MMCI_BUSY_WAITING_FOR_START_IRQ;
-                               return false;
+                               goto out_ret_state;
                        }
                        retries--;
                }
@@ -722,8 +722,7 @@ static bool ux500_busy_complete(struct mmci_host *host, u32 status, u32 err_msk)
                writel(readl(base + MMCIMASK0) &
                       ~host->variant->busy_detect_mask, base + MMCIMASK0);
                host->busy_state = MMCI_BUSY_DONE;
-               host->busy_status = 0;
-               return true;
+               goto out_ret_state;
        }
 
        /*
@@ -742,7 +741,7 @@ static bool ux500_busy_complete(struct mmci_host *host, u32 status, u32 err_msk)
                        host->busy_status |= status & (MCI_CMDSENT | MCI_CMDRESPEND);
                        writel(host->variant->busy_detect_mask, base + MMCICLEAR);
                        host->busy_state = MMCI_BUSY_WAITING_FOR_END_IRQ;
-                       return false;
+                       goto out_ret_state;
                } else {
                        dev_dbg(mmc_dev(host->mmc),
                                "lost busy status when waiting for busy start IRQ\n");
@@ -751,7 +750,7 @@ static bool ux500_busy_complete(struct mmci_host *host, u32 status, u32 err_msk)
                               ~host->variant->busy_detect_mask, base + MMCIMASK0);
                        host->busy_state = MMCI_BUSY_DONE;
                        host->busy_status = 0;
-                       return true;
+                       goto out_ret_state;
                }
        }
 
@@ -759,15 +758,18 @@ static bool ux500_busy_complete(struct mmci_host *host, u32 status, u32 err_msk)
                if (!(status & host->variant->busy_detect_flag)) {
                        host->busy_status |= status & (MCI_CMDSENT | MCI_CMDRESPEND);
                        host->busy_state = MMCI_BUSY_DONE;
-                       return true;
+                       goto out_ret_state;
                } else {
                        dev_dbg(mmc_dev(host->mmc),
                                "busy status still asserted when handling busy end IRQ - will keep waiting\n");
-                       return false;
+                       goto out_ret_state;
                }
        }
 
        return true;
+
+out_ret_state:
+       return (host->busy_state == MMCI_BUSY_DONE);
 }
 
 /*