git: d5b20eaafc0b - main - sdhci_fsl_fdt: specify base clk divisor per SoC
Marcin Wojtas
mw at FreeBSD.org
Fri May 7 01:49:32 UTC 2021
The branch main has been updated by mw:
URL: https://cgit.FreeBSD.org/src/commit/?id=d5b20eaafc0bd8668e5deb8d2b4043c25df4134b
commit d5b20eaafc0bd8668e5deb8d2b4043c25df4134b
Author: Marcin Wojtas <mw at FreeBSD.org>
AuthorDate: 2021-05-07 01:45:22 +0000
Commit: Marcin Wojtas <mw at FreeBSD.org>
CommitDate: 2021-05-07 01:48:54 +0000
sdhci_fsl_fdt: specify base clk divisor per SoC
Only LS1046A and LS1028A require the base clk to be divided by 2.
Implement that by moving the divider to a SoC specific data.
This commit fixes base clk setup for the entire SoC family,
including the already suported LS2160A.
Submitted by: Lukasz Hajec <lha at semihalf.com>
Reviewed by: manu
Obtained from: Semihalf
Sponsored by: Alstom Group
Differential Revision: https://reviews.freebsd.org/D30120
---
sys/dev/sdhci/sdhci_fsl_fdt.c | 12 ++++++++----
1 file changed, 8 insertions(+), 4 deletions(-)
diff --git a/sys/dev/sdhci/sdhci_fsl_fdt.c b/sys/dev/sdhci/sdhci_fsl_fdt.c
index d9b7d1954a1d..167c28b60ca0 100644
--- a/sys/dev/sdhci/sdhci_fsl_fdt.c
+++ b/sys/dev/sdhci/sdhci_fsl_fdt.c
@@ -108,14 +108,17 @@ struct sdhci_fsl_fdt_softc {
struct sdhci_fsl_fdt_soc_data {
int quirks;
+ int baseclk_div;
};
static const struct sdhci_fsl_fdt_soc_data sdhci_fsl_fdt_ls1046a_soc_data = {
- .quirks = SDHCI_QUIRK_DONT_SET_HISPD_BIT | SDHCI_QUIRK_BROKEN_AUTO_STOP
+ .quirks = SDHCI_QUIRK_DONT_SET_HISPD_BIT | SDHCI_QUIRK_BROKEN_AUTO_STOP,
+ .baseclk_div = 2,
};
static const struct sdhci_fsl_fdt_soc_data sdhci_fsl_fdt_gen_data = {
.quirks = 0,
+ .baseclk_div = 1,
};
static const struct ofw_compat_data sdhci_fsl_fdt_compat_data[] = {
@@ -511,7 +514,7 @@ sdhci_fsl_fdt_attach(device_t dev)
goto err_free_irq;
}
- sc->baseclk_hz = clk_hz / 2;
+ sc->baseclk_hz = clk_hz / sc->soc_data->baseclk_div;
/* Figure out eSDHC block endianness before we touch any HW regs. */
if (OF_hasprop(node, "little-endian")) {
@@ -537,8 +540,9 @@ sdhci_fsl_fdt_attach(device_t dev)
WR4(sc, SDHCI_FSL_PROT_CTRL, val | buf_order);
/*
- * Gate the SD clock and set its source to peripheral clock / 2.
- * The frequency in baseclk_hz is set to match this.
+ * Gate the SD clock and set its source to
+ * peripheral clock / baseclk_div. The frequency in baseclk_hz is set
+ * to match this.
*/
val = RD4(sc, SDHCI_CLOCK_CONTROL);
WR4(sc, SDHCI_CLOCK_CONTROL, val & ~SDHCI_FSL_CLK_SDCLKEN);
More information about the dev-commits-src-main
mailing list