diff options
author | ian <ian@FreeBSD.org> | 2016-01-24 19:36:49 +0000 |
---|---|---|
committer | ian <ian@FreeBSD.org> | 2016-01-24 19:36:49 +0000 |
commit | bbe1a22899c8196b0c7c656f13e9561670f447ee (patch) | |
tree | 6888f64e2a4444796fd6adf66ba6c83a16887466 /sys/arm | |
parent | d712f850e62ac7192f336961e719ce41ed1ea4b9 (diff) | |
download | FreeBSD-src-bbe1a22899c8196b0c7c656f13e9561670f447ee.zip FreeBSD-src-bbe1a22899c8196b0c7c656f13e9561670f447ee.tar.gz |
MFC r292419, r294237:
Fix the clock divisor calc for imx6 sdcard bus speed.
Quick exit after setting the clock control register.
Diffstat (limited to 'sys/arm')
-rw-r--r-- | sys/arm/freescale/imx/imx_sdhci.c | 12 |
1 files changed, 10 insertions, 2 deletions
diff --git a/sys/arm/freescale/imx/imx_sdhci.c b/sys/arm/freescale/imx/imx_sdhci.c index 7d982c5..98d5e23 100644 --- a/sys/arm/freescale/imx/imx_sdhci.c +++ b/sys/arm/freescale/imx/imx_sdhci.c @@ -429,6 +429,7 @@ imx_sdhci_write_2(device_t dev, struct sdhci_slot *slot, bus_size_t off, uint16_ } else { imx_sdhc_set_clock(sc, false); } + return; } /* @@ -522,12 +523,19 @@ imx_sdhc_set_clock(struct imx_sdhci_softc *sc, int enable) else freq = sc->baseclk_hz / (2 * divisor); - for (prescale = 2; prescale < freq / prescale / 16;) + for (prescale = 2; freq < sc->baseclk_hz / (prescale * 16);) prescale <<= 1; - for (divisor = 1; freq < freq / prescale / divisor;) + for (divisor = 1; freq < sc->baseclk_hz / (prescale * divisor);) ++divisor; +#ifdef DEBUG + device_printf(sc->dev, + "desired SD freq: %d, actual: %d; base %d prescale %d divisor %d\n", + freq, sc->baseclk_hz / (prescale * divisor), sc->baseclk_hz, + prescale, divisor); +#endif + prescale >>= 1; divisor -= 1; |