Commit 9374ae91 authored by Mengqi Zhang's avatar Mengqi Zhang Committed by Ulf Hansson

mmc: mtk-sd: receive cmd8 data when hs400 tuning fail

When we use cmd8 as the tuning command in hs400 mode, the command
response sent back by some eMMC devices cannot be correctly sampled
by MTK eMMC controller at some weak sample timing. In this case,
command timeout error may occur. So we must receive the following
data to make sure the next cmd8 send correctly.
Signed-off-by: default avatarMengqi Zhang <mengqi.zhang@mediatek.com>
Fixes: c4ac38c6 ("mmc: mtk-sd: Add HS400 online tuning support")
Cc: stable@vger.stable.com
Link: https://lore.kernel.org/r/20240716013704.10578-1-mengqi.zhang@mediatek.comSigned-off-by: default avatarUlf Hansson <ulf.hansson@linaro.org>
parent 8400291e
...@@ -1230,7 +1230,7 @@ static bool msdc_cmd_done(struct msdc_host *host, int events, ...@@ -1230,7 +1230,7 @@ static bool msdc_cmd_done(struct msdc_host *host, int events,
} }
if (!sbc_error && !(events & MSDC_INT_CMDRDY)) { if (!sbc_error && !(events & MSDC_INT_CMDRDY)) {
if (events & MSDC_INT_CMDTMO || if ((events & MSDC_INT_CMDTMO && !host->hs400_tuning) ||
(!mmc_op_tuning(cmd->opcode) && !host->hs400_tuning)) (!mmc_op_tuning(cmd->opcode) && !host->hs400_tuning))
/* /*
* should not clear fifo/interrupt as the tune data * should not clear fifo/interrupt as the tune data
...@@ -1323,9 +1323,9 @@ static void msdc_start_command(struct msdc_host *host, ...@@ -1323,9 +1323,9 @@ static void msdc_start_command(struct msdc_host *host,
static void msdc_cmd_next(struct msdc_host *host, static void msdc_cmd_next(struct msdc_host *host,
struct mmc_request *mrq, struct mmc_command *cmd) struct mmc_request *mrq, struct mmc_command *cmd)
{ {
if ((cmd->error && if ((cmd->error && !host->hs400_tuning &&
!(cmd->error == -EILSEQ && !(cmd->error == -EILSEQ &&
(mmc_op_tuning(cmd->opcode) || host->hs400_tuning))) || mmc_op_tuning(cmd->opcode))) ||
(mrq->sbc && mrq->sbc->error)) (mrq->sbc && mrq->sbc->error))
msdc_request_done(host, mrq); msdc_request_done(host, mrq);
else if (cmd == mrq->sbc) else if (cmd == mrq->sbc)
......
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