[v1, 1/1] mmc: mtk-sd: receive cmd8 data when hs400 tuning fail
Ulf Hansson
ulf.hansson at linaro.org
Thu Aug 1 04:01:11 PDT 2024
On Tue, 16 Jul 2024 at 03:37, Mengqi Zhang <mengqi.zhang at mediatek.com> wrote:
>
> 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: Mengqi Zhang <mengqi.zhang at mediatek.com>
> Fixes: c4ac38c6539b ("mmc: mtk-sd: Add HS400 online tuning support")
> Cc: stable at vger.stable.com
Applied for fixes, thanks!
Kind regards
Uffe
> ---
> drivers/mmc/host/mtk-sd.c | 8 ++++----
> 1 file changed, 4 insertions(+), 4 deletions(-)
>
> diff --git a/drivers/mmc/host/mtk-sd.c b/drivers/mmc/host/mtk-sd.c
> index a94835b8ab93..e386f78e3267 100644
> --- a/drivers/mmc/host/mtk-sd.c
> +++ b/drivers/mmc/host/mtk-sd.c
> @@ -1230,7 +1230,7 @@ static bool msdc_cmd_done(struct msdc_host *host, int events,
> }
>
> 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))
> /*
> * should not clear fifo/interrupt as the tune data
> @@ -1323,9 +1323,9 @@ static void msdc_start_command(struct msdc_host *host,
> static void msdc_cmd_next(struct msdc_host *host,
> struct mmc_request *mrq, struct mmc_command *cmd)
> {
> - if ((cmd->error &&
> - !(cmd->error == -EILSEQ &&
> - (mmc_op_tuning(cmd->opcode) || host->hs400_tuning))) ||
> + if ((cmd->error && !host->hs400_tuning &&
> + !(cmd->error == -EILSEQ &&
> + mmc_op_tuning(cmd->opcode))) ||
> (mrq->sbc && mrq->sbc->error))
> msdc_request_done(host, mrq);
> else if (cmd == mrq->sbc)
> --
> 2.25.1
>
More information about the Linux-mediatek
mailing list