* [PATCH for 5.10.y 1/2] mmc: sdhci: Introduce max_timeout_count variable in sdhci_host
@ 2026-02-16 4:48 Nobuhiro Iwamatsu
2026-02-17 12:42 ` Greg KH
0 siblings, 1 reply; 2+ messages in thread
From: Nobuhiro Iwamatsu @ 2026-02-16 4:48 UTC (permalink / raw)
To: stable; +Cc: gregkh, sashal, Sarthak Garg, Ulf Hansson, Nobuhiro Iwamatsu
From: Sarthak Garg <sartgarg@codeaurora.org>
commit e30314f255117f37412d41e918f941a9ae0835f3 upstream.
Introduce max_timeout_count variable in the sdhci_host structure
and use in timeout calculation. By default its set to 0xE
(max timeout register value as per SDHC spec). But at the same time
vendors drivers can update it if they support different max timeout
register value than 0xE.
Signed-off-by: Sarthak Garg <sartgarg@codeaurora.org>
Acked-by: Adrian Hunter <adrian.hunter@intel.com>
Link: https://lore.kernel.org/r/1628232901-30897-2-git-send-email-sartgarg@codeaurora.org
Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org>
Signed-off-by: Nobuhiro Iwamatsu <nobuhiro.iwamatsu.x90@mail.toshiba>
---
drivers/mmc/host/sdhci.c | 16 +++++++++-------
drivers/mmc/host/sdhci.h | 1 +
2 files changed, 10 insertions(+), 7 deletions(-)
diff --git a/drivers/mmc/host/sdhci.c b/drivers/mmc/host/sdhci.c
index 9091930f58591..435df5ccaba62 100644
--- a/drivers/mmc/host/sdhci.c
+++ b/drivers/mmc/host/sdhci.c
@@ -948,21 +948,21 @@ static u8 sdhci_calc_timeout(struct sdhci_host *host, struct mmc_command *cmd,
/*
* If the host controller provides us with an incorrect timeout
- * value, just skip the check and use 0xE. The hardware may take
+ * value, just skip the check and use the maximum. The hardware may take
* longer to time out, but that's much better than having a too-short
* timeout value.
*/
if (host->quirks & SDHCI_QUIRK_BROKEN_TIMEOUT_VAL)
- return 0xE;
+ return host->max_timeout_count;
/* Unspecified command, asume max */
if (cmd == NULL)
- return 0xE;
+ return host->max_timeout_count;
data = cmd->data;
/* Unspecified timeout, assume max */
if (!data && !cmd->busy_timeout)
- return 0xE;
+ return host->max_timeout_count;
/* timeout in us */
target_timeout = sdhci_target_timeout(host, cmd, data);
@@ -982,15 +982,15 @@ static u8 sdhci_calc_timeout(struct sdhci_host *host, struct mmc_command *cmd,
while (current_timeout < target_timeout) {
count++;
current_timeout <<= 1;
- if (count >= 0xF)
+ if (count > host->max_timeout_count)
break;
}
- if (count >= 0xF) {
+ if (count > host->max_timeout_count) {
if (!(host->quirks2 & SDHCI_QUIRK2_DISABLE_HW_TIMEOUT))
DBG("Too large timeout 0x%x requested for CMD%d!\n",
count, cmd->opcode);
- count = 0xE;
+ count = host->max_timeout_count;
} else {
*too_big = false;
}
@@ -4012,6 +4012,8 @@ struct sdhci_host *sdhci_alloc_host(struct device *dev,
host->adma_table_cnt = SDHCI_MAX_SEGS * 2 + 1;
host->max_adma = 65536;
+ host->max_timeout_count = 0xE;
+
return host;
}
diff --git a/drivers/mmc/host/sdhci.h b/drivers/mmc/host/sdhci.h
index a188bf241a117..9947098ff1ef5 100644
--- a/drivers/mmc/host/sdhci.h
+++ b/drivers/mmc/host/sdhci.h
@@ -516,6 +516,7 @@ struct sdhci_host {
unsigned int max_clk; /* Max possible freq (MHz) */
unsigned int timeout_clk; /* Timeout freq (KHz) */
+ u8 max_timeout_count; /* Vendor specific max timeout count */
unsigned int clk_mul; /* Clock Muliplier value */
unsigned int clock; /* Current clock (MHz) */
--
2.51.0
^ permalink raw reply related [flat|nested] 2+ messages in thread* Re: [PATCH for 5.10.y 1/2] mmc: sdhci: Introduce max_timeout_count variable in sdhci_host
2026-02-16 4:48 [PATCH for 5.10.y 1/2] mmc: sdhci: Introduce max_timeout_count variable in sdhci_host Nobuhiro Iwamatsu
@ 2026-02-17 12:42 ` Greg KH
0 siblings, 0 replies; 2+ messages in thread
From: Greg KH @ 2026-02-17 12:42 UTC (permalink / raw)
To: Nobuhiro Iwamatsu; +Cc: stable, sashal, Sarthak Garg, Ulf Hansson
On Mon, Feb 16, 2026 at 01:48:41PM +0900, Nobuhiro Iwamatsu wrote:
> From: Sarthak Garg <sartgarg@codeaurora.org>
>
> commit e30314f255117f37412d41e918f941a9ae0835f3 upstream.
>
> Introduce max_timeout_count variable in the sdhci_host structure
> and use in timeout calculation. By default its set to 0xE
> (max timeout register value as per SDHC spec). But at the same time
> vendors drivers can update it if they support different max timeout
> register value than 0xE.
>
> Signed-off-by: Sarthak Garg <sartgarg@codeaurora.org>
> Acked-by: Adrian Hunter <adrian.hunter@intel.com>
> Link: https://lore.kernel.org/r/1628232901-30897-2-git-send-email-sartgarg@codeaurora.org
> Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org>
> Signed-off-by: Nobuhiro Iwamatsu <nobuhiro.iwamatsu.x90@mail.toshiba>
> ---
> drivers/mmc/host/sdhci.c | 16 +++++++++-------
> drivers/mmc/host/sdhci.h | 1 +
> 2 files changed, 10 insertions(+), 7 deletions(-)
Why is this needed in 5.10.y at all?
thanks,
greg k-h
^ permalink raw reply [flat|nested] 2+ messages in thread
end of thread, other threads:[~2026-02-17 12:42 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-02-16 4:48 [PATCH for 5.10.y 1/2] mmc: sdhci: Introduce max_timeout_count variable in sdhci_host Nobuhiro Iwamatsu
2026-02-17 12:42 ` Greg KH
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox