Skip to contentSkip to conversation

Patch "mmc: mmc: Use 500ms as the default generic CMD6 timeout" has been added to the 4.8-stable tree

PATCH [email protected] 1 participant 1 message Nov 15, 2016

Subsystems (2)
lore
Share & tools
lore

[email protected]

author maintainer Applied
#0 lore raw

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

mmc: mmc: Use 500ms as the default generic CMD6 timeout

to the 4.8-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-mmc-use-500ms-as-the-default-generic-cmd6-timeout.patch
and it can be found in the queue-4.8 subdirectory.

If you, or anyone else, feels it should not be added to the stable tree, please let <[email protected]> know about it.

Quoted 1 line

From fe1b5700c70faac6e027982d59667bc6020de5a8 Mon Sep 17 00:00:00 2001

From: Ulf Hansson <[email protected]>
Date: Fri, 4 Nov 2016 18:32:33 +0100
Subject: mmc: mmc: Use 500ms as the default generic CMD6 timeout

From: Ulf Hansson <[email protected]>

commit fe1b5700c70faac6e027982d59667bc6020de5a8 upstream.

In the eMMC 4.51 version of the spec, an EXT_CSD field called GENERIC_CMD6_TIME[248] was added. This allows cards to specify the maximum time it may need to move out from its busy state, when a CMD6 command has been sent.

In cases when the card is compliant to versions < 4.51 of the eMMC spec, obviously the core needs to use a fall-back value for this timeout, which currently is set to 10 minutes. This value is completely in the wrong range and importantly in some cases it causes a card initialization to take more than 10 minute to complete.

Earlier this scenario was avoided as the mmc core used CMD13 to poll the card, to find out when it stopped signaling busy. Commit 08573eaf1a70 ("mmc: mmc: do not use CMD13 to get status after speed mode switch") changed this behavior.

Instead of reverting that commit, which would cause other issues, let's instead start by picking a simple solution for the problem, by using a 500ms default generic CMD6 timeout.

The reason for using exactly 500ms, comes from observations that shows it's quite common for cards to specify 250ms. 500ms is two times that value so likely it should be enough for most cards.

Fixes 08573eaf1a70 ("mmc: mmc: do not use CMD13 to get status after speed

mode switch")

---
 drivers/mmc/core/mmc.c |    3 +++
 1 file changed, 3 insertions(+)
drivers/mmc/core/mmc.c +3 -0
@@ -26,6 +26,8 @@
 #include "mmc_ops.h"
 #include "sd_ops.h"
 
+#define DEFAULT_CMD6_TIMEOUT_MS	500
+
 static const unsigned int tran_exp[] = {
 	10000,		100000,		1000000,	10000000,
 	0,		0,		0,		0
@@ -571,6 +573,7 @@ static int mmc_decode_ext_csd(struct mmc
 		card->erased_byte = 0x0;
 
 	/* eMMC v4.5 or later */
+	card->ext_csd.generic_cmd6_time = DEFAULT_CMD6_TIMEOUT_MS;
 	if (card->ext_csd.rev >= 6) {
 		card->ext_csd.feature_support |= MMC_DISCARD_FEATURE;
 

Patches currently in stable-queue which might be from [email protected] are

queue-4.8/mmc-mmc-use-500ms-as-the-default-generic-cmd6-timeout.patch queue-4.8/mmc-sdhci-fix-cmd-line-reset-interfering-with-ongoing-data-transfer.patch queue-4.8/mmc-sdhci-fix-unexpected-data-interrupt-handling.patch