Commit e85fecc3 authored by Linus Walleij's avatar Linus Walleij Committed by Ulf Hansson

mmc: mmci: Use state machine state as exit condition

Return true if and only if we reached the state
MMCI_BUSY_DONE in the ux500 ->busy_complete() callback.
Signed-off-by: default avatarLinus Walleij <linus.walleij@linaro.org>
Link: https://lore.kernel.org/r/20230405-pl180-busydetect-fix-v7-7-69a7164f2a61@linaro.orgSigned-off-by: default avatarUlf Hansson <ulf.hansson@linaro.org>
parent 7892497f
...@@ -683,7 +683,7 @@ static bool ux500_busy_complete(struct mmci_host *host, u32 status, u32 err_msk) ...@@ -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->variant->busy_detect_mask, base + MMCIMASK0);
host->busy_state = MMCI_BUSY_DONE; host->busy_state = MMCI_BUSY_DONE;
host->busy_status = 0; 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) ...@@ -713,7 +713,7 @@ static bool ux500_busy_complete(struct mmci_host *host, u32 status, u32 err_msk)
host->variant->busy_detect_mask, host->variant->busy_detect_mask,
base + MMCIMASK0); base + MMCIMASK0);
host->busy_state = MMCI_BUSY_WAITING_FOR_START_IRQ; host->busy_state = MMCI_BUSY_WAITING_FOR_START_IRQ;
return false; goto out_ret_state;
} }
retries--; retries--;
} }
...@@ -722,8 +722,7 @@ static bool ux500_busy_complete(struct mmci_host *host, u32 status, u32 err_msk) ...@@ -722,8 +722,7 @@ static bool ux500_busy_complete(struct mmci_host *host, u32 status, u32 err_msk)
writel(readl(base + MMCIMASK0) & writel(readl(base + MMCIMASK0) &
~host->variant->busy_detect_mask, base + MMCIMASK0); ~host->variant->busy_detect_mask, base + MMCIMASK0);
host->busy_state = MMCI_BUSY_DONE; host->busy_state = MMCI_BUSY_DONE;
host->busy_status = 0; goto out_ret_state;
return true;
} }
/* /*
...@@ -742,7 +741,7 @@ static bool ux500_busy_complete(struct mmci_host *host, u32 status, u32 err_msk) ...@@ -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); host->busy_status |= status & (MCI_CMDSENT | MCI_CMDRESPEND);
writel(host->variant->busy_detect_mask, base + MMCICLEAR); writel(host->variant->busy_detect_mask, base + MMCICLEAR);
host->busy_state = MMCI_BUSY_WAITING_FOR_END_IRQ; host->busy_state = MMCI_BUSY_WAITING_FOR_END_IRQ;
return false; goto out_ret_state;
} else { } else {
dev_dbg(mmc_dev(host->mmc), dev_dbg(mmc_dev(host->mmc),
"lost busy status when waiting for busy start IRQ\n"); "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) ...@@ -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->variant->busy_detect_mask, base + MMCIMASK0);
host->busy_state = MMCI_BUSY_DONE; host->busy_state = MMCI_BUSY_DONE;
host->busy_status = 0; 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) ...@@ -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)) { if (!(status & host->variant->busy_detect_flag)) {
host->busy_status |= status & (MCI_CMDSENT | MCI_CMDRESPEND); host->busy_status |= status & (MCI_CMDSENT | MCI_CMDRESPEND);
host->busy_state = MMCI_BUSY_DONE; host->busy_state = MMCI_BUSY_DONE;
return true; goto out_ret_state;
} else { } else {
dev_dbg(mmc_dev(host->mmc), dev_dbg(mmc_dev(host->mmc),
"busy status still asserted when handling busy end IRQ - will keep waiting\n"); "busy status still asserted when handling busy end IRQ - will keep waiting\n");
return false; goto out_ret_state;
} }
} }
return true; return true;
out_ret_state:
return (host->busy_state == MMCI_BUSY_DONE);
} }
/* /*
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment