Patch "mmc: mtk-sd: receive cmd8 data when hs400 tuning fail" has been added to the 6.1-stable tree

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



This is a note to let you know that I've just added the patch titled

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

to the 6.1-stable tree which can be found at:
    http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary

The filename of the patch is:
     mmc-mtk-sd-receive-cmd8-data-when-hs400-tuning-fail.patch
and it can be found in the queue-6.1 subdirectory.

If you, or anyone else, feels it should not be added to the stable tree,
please let <stable@xxxxxxxxxxxxxxx> know about it.



commit 06c238db53c5a3e926c248c7817c3041e7cf36a0
Author: Mengqi Zhang <mengqi.zhang@xxxxxxxxxxxx>
Date:   Tue Jul 16 09:37:04 2024 +0800

    mmc: mtk-sd: receive cmd8 data when hs400 tuning fail
    
    [ Upstream commit 9374ae912dbb1eed8139ed75fd2c0f1b30ca454d ]
    
    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@xxxxxxxxxxxx>
    Fixes: c4ac38c6539b ("mmc: mtk-sd: Add HS400 online tuning support")
    Cc: stable@xxxxxxxxxxxxxxx
    Link: https://lore.kernel.org/r/20240716013704.10578-1-mengqi.zhang@xxxxxxxxxxxx
    Signed-off-by: Ulf Hansson <ulf.hansson@xxxxxxxxxx>
    Signed-off-by: Sasha Levin <sashal@xxxxxxxxxx>

diff --git a/drivers/mmc/host/mtk-sd.c b/drivers/mmc/host/mtk-sd.c
index efd2af2d36862..ba18e9fa64b15 100644
--- a/drivers/mmc/host/mtk-sd.c
+++ b/drivers/mmc/host/mtk-sd.c
@@ -1206,7 +1206,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
@@ -1299,9 +1299,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)




[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux