[<prev] [next>] [<thread-prev] [day] [month] [year] [list]
Message-ID: <CAPDyKFqK7CwGF2CitFtHUE_8hRxMr92KmWQzdO4kWRa7kYqHuQ@mail.gmail.com>
Date: Thu, 1 Aug 2024 13:01:11 +0200
From: Ulf Hansson <ulf.hansson@...aro.org>
To: Mengqi Zhang <mengqi.zhang@...iatek.com>
Cc: chaotian.jing@...iatek.com, matthias.bgg@...il.com,
angelogioacchino.delregno@...labora.com, wenbin.mei@...iatek.com,
linux-mmc@...r.kernel.org, linux-arm-kernel@...ts.infradead.org,
linux-mediatek@...ts.infradead.org, linux-kernel@...r.kernel.org,
stable@...r.stable.com
Subject: Re: [v1, 1/1] mmc: mtk-sd: receive cmd8 data when hs400 tuning fail
On Tue, 16 Jul 2024 at 03:37, Mengqi Zhang <mengqi.zhang@...iatek.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@...iatek.com>
> Fixes: c4ac38c6539b ("mmc: mtk-sd: Add HS400 online tuning support")
> Cc: stable@...r.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
>
Powered by blists - more mailing lists