From: Ulf Hansson <ulf.hansson@linaro.org>
To: linux-mmc@vger.kernel.org, Ulf Hansson <ulf.hansson@linaro.org>
Cc: Jaehoon Chung <jh80.chung@samsung.com>,
Adrian Hunter <adrian.hunter@intel.com>,
Linus Walleij <linus.walleij@linaro.org>,
Chaotian Jing <chaotian.jing@mediatek.com>,
Stephen Boyd <sboyd@codeaurora.org>,
Michael Walle <michael@walle.cc>,
Yong Mao <yong.mao@mediatek.com>,
Shawn Lin <shawn.lin@rock-chips.com>
Subject: [PATCH 1/9] mmc: core: Retry instead of ignore at CRC errors when polling for busy
Date: Wed, 16 Nov 2016 11:51:13 +0100 [thread overview]
Message-ID: <1479293481-20186-2-git-send-email-ulf.hansson@linaro.org> (raw)
In-Reply-To: <1479293481-20186-1-git-send-email-ulf.hansson@linaro.org>
After a CMD6 command has been sent, the __mmc_switch() function might be
advised to poll the card for busy by using CMD13 and also by ignoring CRC
errors.
In the case of ignoring CRC errors, the mmc core tells the mmc host to also
ignore these errors via masking the MMC_RSP_CRC response flag. This seems
wrong, as it leads to that the mmc host could propagate an unreliable
response, instead of a proper error code.
What we really want, is not to ignore CRC errors but instead retry the
polling attempt. So, let's change this by treating a CRC error as the card
is still being busy and thus continue to run the polling loop.
Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org>
---
drivers/mmc/core/mmc_ops.c | 9 ++++++---
1 file changed, 6 insertions(+), 3 deletions(-)
diff --git a/drivers/mmc/core/mmc_ops.c b/drivers/mmc/core/mmc_ops.c
index 481bbdb..4773c56 100644
--- a/drivers/mmc/core/mmc_ops.c
+++ b/drivers/mmc/core/mmc_ops.c
@@ -503,10 +503,13 @@ static int mmc_poll_for_busy(struct mmc_card *card, unsigned int timeout_ms,
if (host->ops->card_busy) {
busy = host->ops->card_busy(host);
} else {
- err = __mmc_send_status(card, &status, ignore_crc);
- if (err)
+ err = mmc_send_status(card, &status);
+ if (ignore_crc && err == -EILSEQ)
+ busy = true;
+ else if (err)
return err;
- busy = R1_CURRENT_STATE(status) == R1_STATE_PRG;
+ else
+ busy = R1_CURRENT_STATE(status) == R1_STATE_PRG;
}
/* Timeout if the device still remains busy. */
--
1.9.1
next prev parent reply other threads:[~2016-11-16 10:51 UTC|newest]
Thread overview: 25+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-11-16 10:51 [PATCH 0/9] mmc: core: Re-work CMD13 polling method for CMD6 for mmc Ulf Hansson
2016-11-16 10:51 ` Ulf Hansson [this message]
2016-11-16 10:51 ` [PATCH 2/9] mmc: core: Remove redundant __mmc_send_status() Ulf Hansson
2016-11-16 10:51 ` [PATCH 3/9] mmc: core: Rename ignore_crc to retry_crc_err to reflect its purpose Ulf Hansson
2016-11-16 10:51 ` [PATCH 4/9] mmc: core: Enable __mmc_switch() to change bus speed timing for the host Ulf Hansson
2016-11-16 10:51 ` [PATCH 5/9] mmc: core: Allow CMD13 polling when switching to HS mode for mmc Ulf Hansson
2016-11-16 10:51 ` [PATCH 6/9] mmc: core: Update CMD13 polling policy when switch to HS DDR mode Ulf Hansson
2016-11-16 10:51 ` [PATCH 7/9] mmc: core: Allow CMD13 polling when switch to HS200 mode Ulf Hansson
2016-11-17 10:23 ` Adrian Hunter
2016-11-17 15:02 ` Ulf Hansson
2016-11-18 9:30 ` Adrian Hunter
2016-11-18 12:20 ` Ulf Hansson
2016-11-18 12:32 ` Adrian Hunter
2016-11-18 13:16 ` Ulf Hansson
2016-11-18 8:05 ` Shawn Lin
2016-11-18 11:45 ` Ulf Hansson
2016-11-23 1:24 ` Shawn Lin
2016-11-16 10:51 ` [PATCH 8/9] mmc: core: Allow CMD13 polling when switch to HS400 mode Ulf Hansson
2016-11-18 12:02 ` Adrian Hunter
2016-11-18 12:59 ` Ulf Hansson
2016-11-16 10:51 ` [PATCH 9/9] mmc: core: Allow CMD13 polling when switch to HS400ES mode Ulf Hansson
2016-11-18 13:35 ` Adrian Hunter
2016-11-18 14:37 ` Ulf Hansson
2016-11-18 14:43 ` Adrian Hunter
2016-11-17 9:06 ` [PATCH 0/9] mmc: core: Re-work CMD13 polling method for CMD6 for mmc Linus Walleij
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1479293481-20186-2-git-send-email-ulf.hansson@linaro.org \
--to=ulf.hansson@linaro.org \
--cc=adrian.hunter@intel.com \
--cc=chaotian.jing@mediatek.com \
--cc=jh80.chung@samsung.com \
--cc=linus.walleij@linaro.org \
--cc=linux-mmc@vger.kernel.org \
--cc=michael@walle.cc \
--cc=sboyd@codeaurora.org \
--cc=shawn.lin@rock-chips.com \
--cc=yong.mao@mediatek.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).