mirror of
https://github.com/torvalds/linux.git
synced 2024-11-26 22:21:42 +00:00
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: 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>
This commit is contained in:
parent
7892497f1f
commit
e85fecc386
@ -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);
|
||||
}
|
||||
|
||||
/*
|
||||
|
Loading…
Reference in New Issue
Block a user