Message ID | 20230405-pl180-busydetect-fix-v3-1-cd3d5925ae64@linaro.org (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | Fix busydetect on Ux500 PL180/MMCI | expand |
On Sun, 11 Jun 2023 at 21:41, Linus Walleij <linus.walleij@linaro.org> wrote: > > If we are starting a command which can generate a busy > response, then clear the variable host->busy_status > if the variant is using a ->busy_complete callback. > > We are lucky that the member is zero by default and > hopefully always gets cleared in the ->busy_complete > callback even on errors, but it's just fragile so > make sure it is always initialized to zero. > > Signed-off-by: Linus Walleij <linus.walleij@linaro.org> > --- > ChangeLog v2->v3: > - Clear host->busy_status no matter if the MMC_RSP_BUSY flag > is set or not. > - Now we have an if inside an if left, so combine these into > one singel conditional. > - Resulting re-flow the if-clause. > ChangeLog v1->v2: > - Unconditionally clear host->busy_status if we get a > busy response. > --- > drivers/mmc/host/mmci.c | 3 ++- > 1 file changed, 2 insertions(+), 1 deletion(-) > > diff --git a/drivers/mmc/host/mmci.c b/drivers/mmc/host/mmci.c > index f2b2e8b0574e..14d639872952 100644 > --- a/drivers/mmc/host/mmci.c > +++ b/drivers/mmc/host/mmci.c > @@ -1238,7 +1238,8 @@ mmci_start_command(struct mmci_host *host, struct mmc_command *cmd, u32 c) > c |= host->variant->cmdreg_srsp; > } > > - if (host->variant->busy_timeout && cmd->flags & MMC_RSP_BUSY) { > + host->busy_status = 0; > + if ((cmd->flags & MMC_RSP_BUSY) && (host->variant->busy_timeout)) { Why are you changing this line? There is no need to add the extra parentheses, right? > if (!cmd->busy_timeout) > cmd->busy_timeout = 10 * MSEC_PER_SEC; > > Kind regards Uffe
diff --git a/drivers/mmc/host/mmci.c b/drivers/mmc/host/mmci.c index f2b2e8b0574e..14d639872952 100644 --- a/drivers/mmc/host/mmci.c +++ b/drivers/mmc/host/mmci.c @@ -1238,7 +1238,8 @@ mmci_start_command(struct mmci_host *host, struct mmc_command *cmd, u32 c) c |= host->variant->cmdreg_srsp; } - if (host->variant->busy_timeout && cmd->flags & MMC_RSP_BUSY) { + host->busy_status = 0; + if ((cmd->flags & MMC_RSP_BUSY) && (host->variant->busy_timeout)) { if (!cmd->busy_timeout) cmd->busy_timeout = 10 * MSEC_PER_SEC;
If we are starting a command which can generate a busy response, then clear the variable host->busy_status if the variant is using a ->busy_complete callback. We are lucky that the member is zero by default and hopefully always gets cleared in the ->busy_complete callback even on errors, but it's just fragile so make sure it is always initialized to zero. Signed-off-by: Linus Walleij <linus.walleij@linaro.org> --- ChangeLog v2->v3: - Clear host->busy_status no matter if the MMC_RSP_BUSY flag is set or not. - Now we have an if inside an if left, so combine these into one singel conditional. - Resulting re-flow the if-clause. ChangeLog v1->v2: - Unconditionally clear host->busy_status if we get a busy response. --- drivers/mmc/host/mmci.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-)