diff mbox series

mmc: sdhci: programmable clock calculation needs multiplier +1

Message ID 20240412192641.2912914-1-curtis.machida@intel.com
State Accepted
Delegated to: Jaehoon Chung
Headers show
Series mmc: sdhci: programmable clock calculation needs multiplier +1 | expand

Commit Message

curtis.machida@intel.com April 12, 2024, 7:26 p.m. UTC
From: cmachida <curtis.machida@intel.com>

According to the SD Host Controller Simplified Specification v4.20,
the multiplier value M is one more than the Clock Multiplier field.

Copied code from Linux project.  drivers/mmc/host/sdhci.c line 4405

Signed-off-by: cmachida <curtis.machida@intel.com>
---

 drivers/mmc/sdhci.c | 9 +++++++++
 1 file changed, 9 insertions(+)

Comments

Jaehoon Chung April 15, 2024, 9:59 a.m. UTC | #1
> -----Original Message-----
> From: curtis.machida@intel.com <curtis.machida@intel.com>
> Sent: Saturday, April 13, 2024 4:27 AM
> To: u-boot@lists.denx.de; Peng Fan <peng.fan@nxp.com>; Jaehoon Chung <jh80.chung@samsung.com>
> Cc: cmachida <curtis.machida@intel.com>; Jonas Karlman <jonas@kwiboo.se>; Kever Yang <kever.yang@rock-
> chips.com>; Peter Geis <pgwipeout@gmail.com>; Sean Anderson <sean.anderson@seco.com>; Simon Glass
> <sjg@chromium.org>; Tom Rini <trini@konsulko.com>
> Subject: [PATCH] mmc: sdhci: programmable clock calculation needs multiplier +1
> 
> From: cmachida <curtis.machida@intel.com>
> 
> According to the SD Host Controller Simplified Specification v4.20,
> the multiplier value M is one more than the Clock Multiplier field.
> 
> Copied code from Linux project.  drivers/mmc/host/sdhci.c line 4405
> 
> Signed-off-by: cmachida <curtis.machida@intel.com>

Reviewed-by: Jaehoon Chung <jh80.chung@samsung.com>

Best Regards,
Jaehoon Chung

> ---
> 
>  drivers/mmc/sdhci.c | 9 +++++++++
>  1 file changed, 9 insertions(+)
> 
> diff --git a/drivers/mmc/sdhci.c b/drivers/mmc/sdhci.c
> index 0178ed8a11..a8476ec4e9 100644
> --- a/drivers/mmc/sdhci.c
> +++ b/drivers/mmc/sdhci.c
> @@ -929,6 +929,15 @@ int sdhci_setup_cfg(struct mmc_config *cfg, struct sdhci_host *host,
>  		debug("%s, caps_1: 0x%x\n", __func__, caps_1);
>  		host->clk_mul = (caps_1 & SDHCI_CLOCK_MUL_MASK) >>
>  				SDHCI_CLOCK_MUL_SHIFT;
> +
> +		/*
> +		 * In case the value in Clock Multiplier is 0, then programmable
> +		 * clock mode is not supported, otherwise the actual clock
> +		 * multiplier is one more than the value of Clock Multiplier
> +		 * in the Capabilities Register.
> +		 */
> +		if (host->clk_mul)
> +			host->clk_mul += 1;
>  	}
> 
>  	if (host->max_clk == 0) {
> --
> 2.43.2
Sean Anderson April 15, 2024, 2:47 p.m. UTC | #2
On 4/12/24 15:26, curtis.machida@intel.com wrote:
> [You don't often get email from curtis.machida@intel.com. Learn why this is important at https://cas5-0-urlprotect.trendmicro.com:443/wis/clicktime/v1/query?url=https%3a%2f%2faka.ms%2fLearnAboutSenderIdentification&umid=4f25273f-b33b-4eb3-8643-c1f6eff8842b&auth=d807158c60b7d2502abde8a2fc01f40662980862-c95c2e418b830130ad99c91e42b2732e3f7e44ee ]
> 
> From: cmachida <curtis.machida@intel.com>
> 
> According to the SD Host Controller Simplified Specification v4.20,
> the multiplier value M is one more than the Clock Multiplier field.
> 
> Copied code from Linux project.  drivers/mmc/host/sdhci.c line 4405
> 
> Signed-off-by: cmachida <curtis.machida@intel.com>
> ---
> 
>  drivers/mmc/sdhci.c | 9 +++++++++
>  1 file changed, 9 insertions(+)
> 
> diff --git a/drivers/mmc/sdhci.c b/drivers/mmc/sdhci.c
> index 0178ed8a11..a8476ec4e9 100644
> --- a/drivers/mmc/sdhci.c
> +++ b/drivers/mmc/sdhci.c
> @@ -929,6 +929,15 @@ int sdhci_setup_cfg(struct mmc_config *cfg, struct sdhci_host *host,
>                 debug("%s, caps_1: 0x%x\n", __func__, caps_1);
>                 host->clk_mul = (caps_1 & SDHCI_CLOCK_MUL_MASK) >>
>                                 SDHCI_CLOCK_MUL_SHIFT;
> +
> +               /*
> +                * In case the value in Clock Multiplier is 0, then programmable
> +                * clock mode is not supported, otherwise the actual clock
> +                * multiplier is one more than the value of Clock Multiplier
> +                * in the Capabilities Register.
> +                */
> +               if (host->clk_mul)
> +                       host->clk_mul += 1;
>         }
> 
>         if (host->max_clk == 0) {
> --
> 2.43.2
> 

Reviewed-by: Sean Anderson <sean.anderson@seco.com>
diff mbox series

Patch

diff --git a/drivers/mmc/sdhci.c b/drivers/mmc/sdhci.c
index 0178ed8a11..a8476ec4e9 100644
--- a/drivers/mmc/sdhci.c
+++ b/drivers/mmc/sdhci.c
@@ -929,6 +929,15 @@  int sdhci_setup_cfg(struct mmc_config *cfg, struct sdhci_host *host,
 		debug("%s, caps_1: 0x%x\n", __func__, caps_1);
 		host->clk_mul = (caps_1 & SDHCI_CLOCK_MUL_MASK) >>
 				SDHCI_CLOCK_MUL_SHIFT;
+
+		/*
+		 * In case the value in Clock Multiplier is 0, then programmable
+		 * clock mode is not supported, otherwise the actual clock
+		 * multiplier is one more than the value of Clock Multiplier
+		 * in the Capabilities Register.
+		 */
+		if (host->clk_mul)
+			host->clk_mul += 1;
 	}
 
 	if (host->max_clk == 0) {