[<prev] [next>] [day] [month] [year] [list]
Message-Id: <c9ab2448700a1ad83ed5288fd36d13a35f393850.1627186831.git.mirq-linux@rere.qmqm.pl>
Date: Sun, 25 Jul 2021 06:25:16 +0200
From: Michał Mirosław <mirq-linux@...e.qmqm.pl>
To: Kevin Liu <kliu5@...vell.com>,
Suneel Garapati <suneel.garapati@...inx.com>,
Ulf Hansson <ulf.hansson@...aro.org>
Cc: Adrian Hunter <adrian.hunter@...el.com>,
Chris Ball <cjb@...top.org>,
linux-arm-kernel@...ts.infradead.org, linux-kernel@...r.kernel.org,
linux-mmc@...r.kernel.org, Michal Simek <michal.simek@...inx.com>
Subject: [PATCH v3 2/5] mmc: sdhci: always obey programmable clock config in
preset value
When host controller uses programmable clock presets but doesn't
advertise programmable clock support, we can only guess what frequency
it generates. Let's at least return correct SDHCI_PROG_CLOCK_MODE bit
value in this case.
Fixes: 52983382c74f ("mmc: sdhci: enhance preset value function")
Signed-off-by: Michał Mirosław <mirq-linux@...e.qmqm.pl>
---
v3: added a comment for this case
v2: no changes
---
drivers/mmc/host/sdhci.c | 7 +++++--
1 file changed, 5 insertions(+), 2 deletions(-)
diff --git a/drivers/mmc/host/sdhci.c b/drivers/mmc/host/sdhci.c
index c7438dd13e3e..3ab60e7f936b 100644
--- a/drivers/mmc/host/sdhci.c
+++ b/drivers/mmc/host/sdhci.c
@@ -1859,11 +1859,14 @@ u16 sdhci_calc_clk(struct sdhci_host *host, unsigned int clock,
pre_val = sdhci_get_preset_value(host);
div = FIELD_GET(SDHCI_PRESET_SDCLK_FREQ_MASK, pre_val);
- if (host->clk_mul &&
- (pre_val & SDHCI_PRESET_CLKGEN_SEL)) {
+ if (pre_val & SDHCI_PRESET_CLKGEN_SEL) {
clk = SDHCI_PROG_CLOCK_MODE;
real_div = div + 1;
clk_mul = host->clk_mul;
+ if (!clk_mul) {
+ /* The clock frequency is unknown. Assume undivided base. */
+ clk_mul = 1;
+ }
} else {
real_div = max_t(int, 1, div << 1);
}
--
2.30.2
Powered by blists - more mailing lists