diff mbox series

mmc: core: increase the number of retries of the ACMD41

Message ID 20240416145912.114409-1-xiaokeqinhealth@126.com (mailing list archive)
State New
Headers show
Series mmc: core: increase the number of retries of the ACMD41 | expand

Commit Message

Felix Qin April 16, 2024, 2:59 p.m. UTC
Extensive testing has shown that a few specific SD cards require
an increase in the number of command retries to successfully
initialize.

Signed-off-by: Felix Qin <xiaokeqinhealth@126.com>
---
 drivers/mmc/core/sd_ops.c | 4 ++--
 drivers/mmc/core/sd_ops.h | 8 ++++++++
 2 files changed, 10 insertions(+), 2 deletions(-)

Comments

Dragan Simic April 16, 2024, 4:59 p.m. UTC | #1
Hello Felix,

On 2024-04-16 16:59, Felix Qin wrote:
> Extensive testing has shown that a few specific SD cards require
> an increase in the number of command retries to successfully
> initialize.

Any chances, please, to include the models of the affected  SD cards
in the patch description, together with the model of the used host
hardware?  That might be helpful to the people wanting to replicate
(or debug further) such card initialization issues.

> Signed-off-by: Felix Qin <xiaokeqinhealth@126.com>
> ---
>  drivers/mmc/core/sd_ops.c | 4 ++--
>  drivers/mmc/core/sd_ops.h | 8 ++++++++
>  2 files changed, 10 insertions(+), 2 deletions(-)
> 
> diff --git a/drivers/mmc/core/sd_ops.c b/drivers/mmc/core/sd_ops.c
> index a59cd592f06e..b3b6e8725b80 100644
> --- a/drivers/mmc/core/sd_ops.c
> +++ b/drivers/mmc/core/sd_ops.c
> @@ -127,7 +127,7 @@ int mmc_send_app_op_cond(struct mmc_host *host,
> u32 ocr, u32 *rocr)
>  		cmd.arg = ocr;
>  	cmd.flags = MMC_RSP_SPI_R1 | MMC_RSP_R3 | MMC_CMD_BCR;
> 
> -	for (i = 100; i; i--) {
> +	for (i = SD_APP_OP_COND_RETRIES; i; i--) {
>  		err = mmc_wait_for_app_cmd(host, NULL, &cmd);
>  		if (err)
>  			break;
> @@ -147,7 +147,7 @@ int mmc_send_app_op_cond(struct mmc_host *host,
> u32 ocr, u32 *rocr)
> 
>  		err = -ETIMEDOUT;
> 
> -		mmc_delay(10);
> +		mmc_delay(SD_APP_OP_COND_INTERVAL);
>  	}
> 
>  	if (!i)
> diff --git a/drivers/mmc/core/sd_ops.h b/drivers/mmc/core/sd_ops.h
> index 7667fc223b74..80c5c836ccd1 100644
> --- a/drivers/mmc/core/sd_ops.h
> +++ b/drivers/mmc/core/sd_ops.h
> @@ -10,6 +10,14 @@
> 
>  #include <linux/types.h>
> 
> +/*
> + * Extensive testing has shown that a few specific SD cards require
> + * an increase in the number of command retries to successfully
> + * initialize.
> + */
> +#define SD_APP_OP_COND_RETRIES  200
> +#define SD_APP_OP_COND_INTERVAL 10	/* millisecond */
> +
>  struct mmc_card;
>  struct mmc_host;
Avri Altman April 17, 2024, 6:32 a.m. UTC | #2
> On 2024-04-16 16:59, Felix Qin wrote:
> > Extensive testing has shown that a few specific SD cards require an
> > increase in the number of command retries to successfully initialize.
Acked-by: Avri Altman <avri.altman@wdc.com>
diff mbox series

Patch

diff --git a/drivers/mmc/core/sd_ops.c b/drivers/mmc/core/sd_ops.c
index a59cd592f06e..b3b6e8725b80 100644
--- a/drivers/mmc/core/sd_ops.c
+++ b/drivers/mmc/core/sd_ops.c
@@ -127,7 +127,7 @@  int mmc_send_app_op_cond(struct mmc_host *host, u32 ocr, u32 *rocr)
 		cmd.arg = ocr;
 	cmd.flags = MMC_RSP_SPI_R1 | MMC_RSP_R3 | MMC_CMD_BCR;
 
-	for (i = 100; i; i--) {
+	for (i = SD_APP_OP_COND_RETRIES; i; i--) {
 		err = mmc_wait_for_app_cmd(host, NULL, &cmd);
 		if (err)
 			break;
@@ -147,7 +147,7 @@  int mmc_send_app_op_cond(struct mmc_host *host, u32 ocr, u32 *rocr)
 
 		err = -ETIMEDOUT;
 
-		mmc_delay(10);
+		mmc_delay(SD_APP_OP_COND_INTERVAL);
 	}
 
 	if (!i)
diff --git a/drivers/mmc/core/sd_ops.h b/drivers/mmc/core/sd_ops.h
index 7667fc223b74..80c5c836ccd1 100644
--- a/drivers/mmc/core/sd_ops.h
+++ b/drivers/mmc/core/sd_ops.h
@@ -10,6 +10,14 @@ 
 
 #include <linux/types.h>
 
+/*
+ * Extensive testing has shown that a few specific SD cards require
+ * an increase in the number of command retries to successfully
+ * initialize.
+ */
+#define SD_APP_OP_COND_RETRIES  200
+#define SD_APP_OP_COND_INTERVAL 10	/* millisecond */
+
 struct mmc_card;
 struct mmc_host;