git: a974a7bcdf44 - main - sdhci_fsl_fdt: Fix pulse width errata application
- Go to: [ bottom of page ] [ top of archives ] [ this month ]
Date: Tue, 22 Feb 2022 08:58:48 UTC
The branch main has been updated by wma:
URL: https://cgit.FreeBSD.org/src/commit/?id=a974a7bcdf44a83e344b19778dbd910298fa0421
commit a974a7bcdf44a83e344b19778dbd910298fa0421
Author: Kornel Duleba <mindal@semihalf.com>
AuthorDate: 2022-01-14 11:21:51 +0000
Commit: Wojciech Macek <wma@FreeBSD.org>
CommitDate: 2022-02-22 08:58:24 +0000
sdhci_fsl_fdt: Fix pulse width errata application
The errata has to be applied every time after SDHCI_RESET_ALL is done.
Move it from attach to the custom reset routine.
Reviewed by: wma, mmel
Obtained from: Semihalf
Sponsored by: Alstom Group
Differential Revision: https://reviews.freebsd.org/D33981
---
sys/dev/sdhci/sdhci_fsl_fdt.c | 20 ++++++++++----------
1 file changed, 10 insertions(+), 10 deletions(-)
diff --git a/sys/dev/sdhci/sdhci_fsl_fdt.c b/sys/dev/sdhci/sdhci_fsl_fdt.c
index 41804f6c1a11..5d4052a12a2e 100644
--- a/sys/dev/sdhci/sdhci_fsl_fdt.c
+++ b/sys/dev/sdhci/sdhci_fsl_fdt.c
@@ -885,16 +885,6 @@ sdhci_fsl_fdt_attach(device_t dev)
sc->slot.max_clk = sc->maxclk_hz;
sc->gpio = sdhci_fdt_gpio_setup(dev, &sc->slot);
- /*
- * Pulse width detection is not reliable on some boards. Perform
- * workaround by clearing register's bit according to errata.
- */
- if (sc->soc_data->errata & SDHCI_FSL_UNRELIABLE_PULSE_DET) {
- val = RD4(sc, SDHCI_FSL_DLLCFG1);
- val &= ~SDHCI_FSL_DLLCFG1_PULSE_STRETCH;
- WR4(sc, SDHCI_FSL_DLLCFG1, val);
- }
-
/*
* Set the buffer watermark level to 128 words (512 bytes) for both
* read and write. The hardware has a restriction that when the read or
@@ -1028,6 +1018,16 @@ sdhci_fsl_fdt_reset(device_t dev, struct sdhci_slot *slot, uint8_t mask)
WR4(sc, SDHCI_FSL_TBCTL, val);
}
+ /*
+ * Pulse width detection is not reliable on some boards. Perform
+ * workaround by clearing register's bit according to errata.
+ */
+ if (sc->soc_data->errata & SDHCI_FSL_UNRELIABLE_PULSE_DET) {
+ val = RD4(sc, SDHCI_FSL_DLLCFG1);
+ val &= ~SDHCI_FSL_DLLCFG1_PULSE_STRETCH;
+ WR4(sc, SDHCI_FSL_DLLCFG1, val);
+ }
+
sc->flags &= ~SDHCI_FSL_HS400_DONE;
}