mmc: sdhci: restore the enabled dma when do reset all
authorShaohui Xie <Shaohui.Xie@freescale.com>
Thu, 29 Dec 2011 08:33:00 +0000 (16:33 +0800)
committerChris Ball <cjb@laptop.org>
Thu, 12 Jan 2012 20:17:17 +0000 (15:17 -0500)
If dma is enabled, it'll be cleared when reset all is performed, this can
be observed on some platforms, such as P2041 which has a version 2.3
controller, but platform like P4080 which has a version 2.2 controller,
does not suffer this, so we will check if the dma is enabled, we should
restore it after reset all.

Signed-off-by: Shaohui Xie <Shaohui.Xie@freescale.com>
Signed-off-by: Chris Ball <cjb@laptop.org>
drivers/mmc/host/sdhci.c

index 96f4e54..8d66706 100644 (file)
@@ -212,6 +212,11 @@ static void sdhci_reset(struct sdhci_host *host, u8 mask)
 
        if (host->quirks & SDHCI_QUIRK_RESTORE_IRQS_AFTER_RESET)
                sdhci_clear_set_irqs(host, SDHCI_INT_ALL_MASK, ier);
+
+       if (host->flags & (SDHCI_USE_SDMA | SDHCI_USE_ADMA)) {
+               if ((host->ops->enable_dma) && (mask & SDHCI_RESET_ALL))
+                       host->ops->enable_dma(host);
+       }
 }
 
 static void sdhci_set_ios(struct mmc_host *mmc, struct mmc_ios *ios);