[PATCH v2 05/11] mci: imx-esdhc: mark the uSDHC ADMA2 descriptor quirks
Johannes Schneider <[email protected]> Sat, 4 Jul 2026 12:26:22 +0000
| Newsgroups | org.infradead.lists.barebox |
|---|---|
| Message-ID | <[email protected]> |
The i.MX uSDHC ADMA2 engine cannot handle a length-0 (64 KiB) descriptor and ignores the END attribute in a trailing NOP descriptor; large ADMA transfers hang otherwise. Set SDHCI_QUIRK_BROKEN_ADMA_ZEROLEN_DESC and SDHCI_QUIRK_NO_ENDATTR_IN_NOPDESC so the shared table builder emits a safe descriptor shape, matching Linux sdhci-esdhc-imx. esdhc_populate_sdhci() runs for both the PBL and the proper driver, so this covers every uSDHC ADMA path. Assisted-by: Claude Opus 4.8 (1M context) Signed-off-by: Johannes Schneider <[email protected]> --- Notes: v2: - No functional change; rebased on next. drivers/mci/imx-esdhc-common.c | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/drivers/mci/imx-esdhc-common.c b/drivers/mci/imx-esdhc-common.c index eb6a71915f..d31a2ad779 100644 --- a/drivers/mci/imx-esdhc-common.c +++ b/drivers/mci/imx-esdhc-common.c @@ -285,6 +285,14 @@ void esdhc_populate_sdhci(struct fsl_esdhc_host *host) host->sdhci.read16 = esdhc_op_read16_le_tuning; host->sdhci.write16 = esdhc_op_write16_le_tuning; } + + /* + * The uSDHC ADMA2 engine mishandles a length-0 (64 KiB) descriptor and + * the END attribute in a trailing NOP descriptor. + */ + if (esdhc_is_usdhc(host)) + host->sdhci.quirks |= SDHCI_QUIRK_BROKEN_ADMA_ZEROLEN_DESC | + SDHCI_QUIRK_NO_ENDATTR_IN_NOPDESC; } static bool esdhc_use_pio_mode(void) -- 2.43.0