[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