2022-06-03 05:35:25

by Sarthak Garg

[permalink] [raw]
Subject: [PATCH V1 0/2] Introduce new flag to force hardware reset

Introduce new flag cqe_recovery_reset_always in mmc_host to allow vendors
to force hardware reset during cqe recovery as per their needs.

Sarthak Garg (2):
mmc: core: Introduce new flag to force hardware reset
mmc: sdhci-msm: Enable force hw reset during cqe recovery

drivers/mmc/core/block.c | 2 +-
drivers/mmc/host/sdhci-msm.c | 3 +++
include/linux/mmc/host.h | 1 +
3 files changed, 5 insertions(+), 1 deletion(-)

--
2.17.1



2022-06-03 17:49:21

by Sarthak Garg

[permalink] [raw]
Subject: [PATCH V1 2/2] mmc: sdhci-msm: Enable force hw reset during cqe recovery

Enable force hw reset during cqe recovery to make recovery more robust.

Signed-off-by: Sarthak Garg <[email protected]>
---
drivers/mmc/host/sdhci-msm.c | 3 +++
1 file changed, 3 insertions(+)

diff --git a/drivers/mmc/host/sdhci-msm.c b/drivers/mmc/host/sdhci-msm.c
index e395411fb6fd..7fc40bd16031 100644
--- a/drivers/mmc/host/sdhci-msm.c
+++ b/drivers/mmc/host/sdhci-msm.c
@@ -2781,6 +2781,9 @@ static int sdhci_msm_probe(struct platform_device *pdev)

msm_host->mmc->caps |= MMC_CAP_WAIT_WHILE_BUSY | MMC_CAP_NEED_RSP_BUSY;

+ /* Enable force hw reset during cqe recovery */
+ msm_host->mmc->cqe_recovery_reset_always = true;
+
/* Set the timeout value to max possible */
host->max_timeout_count = 0xF;

--
2.17.1

2022-06-05 07:26:57

by Sarthak Garg

[permalink] [raw]
Subject: [PATCH V1 1/2] mmc: core: Introduce new flag to force hardware reset

Introduce new flag cqe_recovery_reset_always to allow vendors to force
hardware reset during cqe recovery.

Signed-off-by: Sarthak Garg <[email protected]>
---
drivers/mmc/core/block.c | 2 +-
include/linux/mmc/host.h | 1 +
2 files changed, 2 insertions(+), 1 deletion(-)

diff --git a/drivers/mmc/core/block.c b/drivers/mmc/core/block.c
index 1259ca22d625..496cdd8a2999 100644
--- a/drivers/mmc/core/block.c
+++ b/drivers/mmc/core/block.c
@@ -1497,7 +1497,7 @@ void mmc_blk_cqe_recovery(struct mmc_queue *mq)
pr_debug("%s: CQE recovery start\n", mmc_hostname(host));

err = mmc_cqe_recovery(host);
- if (err)
+ if (err || host->cqe_recovery_reset_always)
mmc_blk_reset(mq->blkdata, host, MMC_BLK_CQE_RECOVERY);
else
mmc_blk_reset_success(mq->blkdata, MMC_BLK_CQE_RECOVERY);
diff --git a/include/linux/mmc/host.h b/include/linux/mmc/host.h
index c193c50ccd78..3e2fe950b4ec 100644
--- a/include/linux/mmc/host.h
+++ b/include/linux/mmc/host.h
@@ -492,6 +492,7 @@ struct mmc_host {
int cqe_qdepth;
bool cqe_enabled;
bool cqe_on;
+ bool cqe_recovery_reset_always;

/* Inline encryption support */
#ifdef CONFIG_MMC_CRYPTO
--
2.17.1