]> git.dujemihanovic.xyz Git - u-boot.git/commitdiff
mmc: sdhci: programmable clock calculation needs multiplier +1
authorcmachida <curtis.machida@intel.com>
Fri, 12 Apr 2024 19:26:40 +0000 (12:26 -0700)
committerJaehoon Chung <jh80.chung@samsung.com>
Fri, 26 Apr 2024 06:31:57 +0000 (15:31 +0900)
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>
Reviewed-by: Sean Anderson <sean.anderson@seco.com>
drivers/mmc/sdhci.c

index ceeac32882fb17c11ce370e926bb5c540c959c64..af654ea8d13c26d62abc05d860802998de4f8ba3 100644 (file)
@@ -930,6 +930,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) {