| From 59b6d2a57379a0e8f1ce1428a7674b8ef3cbc7e8 Mon Sep 17 00:00:00 2001 |
| From: Yinbo Zhu <yinbo.zhu@nxp.com> |
| Date: Mon, 11 Mar 2019 02:16:44 +0000 |
| Subject: mmc: sdhci-of-esdhc: add erratum A-009204 support |
| |
| [ Upstream commit 5dd195522562542bc6ebe6e7bd47890d8b7ca93c ] |
| |
| In the event of that any data error (like, IRQSTAT[DCE]) occurs |
| during an eSDHC data transaction where DMA is used for data |
| transfer to/from the system memory, setting the SYSCTL[RSTD] |
| register may cause a system hang. If software sets the register |
| SYSCTL[RSTD] to 1 for error recovery while DMA transferring is |
| not complete, eSDHC may hang the system bus. This happens because |
| the software register SYSCTL[RSTD] resets the DMA engine without |
| waiting for the completion of pending system transactions. This |
| erratum is to fix this issue. |
| |
| Signed-off-by: Yinbo Zhu <yinbo.zhu@nxp.com> |
| Acked-by: Adrian Hunter <adrian.hunter@intel.com> |
| Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org> |
| Signed-off-by: Sasha Levin <sashal@kernel.org> |
| --- |
| drivers/mmc/host/sdhci-of-esdhc.c | 3 +++ |
| 1 file changed, 3 insertions(+) |
| |
| diff --git a/drivers/mmc/host/sdhci-of-esdhc.c b/drivers/mmc/host/sdhci-of-esdhc.c |
| index 9da53e548691b..4fc4d2c7643c5 100644 |
| --- a/drivers/mmc/host/sdhci-of-esdhc.c |
| +++ b/drivers/mmc/host/sdhci-of-esdhc.c |
| @@ -694,6 +694,9 @@ static void esdhc_reset(struct sdhci_host *host, u8 mask) |
| sdhci_writel(host, host->ier, SDHCI_INT_ENABLE); |
| sdhci_writel(host, host->ier, SDHCI_SIGNAL_ENABLE); |
| |
| + if (of_find_compatible_node(NULL, NULL, "fsl,p2020-esdhc")) |
| + mdelay(5); |
| + |
| if (mask & SDHCI_RESET_ALL) { |
| val = sdhci_readl(host, ESDHC_TBCTL); |
| val &= ~ESDHC_TB_EN; |
| -- |
| 2.20.1 |
| |