summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSeungwon Jeon <tgih.jun@samsung.com>2012-04-10 00:53:32 (GMT)
committerChris Ball <cjb@laptop.org>2012-04-21 00:30:37 (GMT)
commita99aa9b9b4f4f3e496d17a1b4e0ff63fb0c9f31d (patch)
treed3d7bb12cbabce20789671d07055e305b8138c1a
parent32d317c60e56c2a34463b51fc0336cc96b3e1735 (diff)
downloadlinux-fsl-qoriq-a99aa9b9b4f4f3e496d17a1b4e0ff63fb0c9f31d.tar.xz
mmc: dw_mmc: Fix switch from DMA to PIO
When dw_mci_pre_dma_transfer returns failure in some reasons, dw_mci_submit_data will prepare to switch the PIO mode from DMA. After switching to PIO mode, DMA(IDMAC in particular) is still enabled. This makes the corruption in handling interrupt and the driver lock-up. Signed-off-by: Seungwon Jeon <tgih.jun@samsung.com> Acked-by: Will Newton <will.newton@imgtec.com> Signed-off-by: Chris Ball <cjb@laptop.org>
-rw-r--r--drivers/mmc/host/dw_mmc.c4
1 files changed, 3 insertions, 1 deletions
diff --git a/drivers/mmc/host/dw_mmc.c b/drivers/mmc/host/dw_mmc.c
index bf3c9b4..f3b0fcd 100644
--- a/drivers/mmc/host/dw_mmc.c
+++ b/drivers/mmc/host/dw_mmc.c
@@ -526,8 +526,10 @@ static int dw_mci_submit_data_dma(struct dw_mci *host, struct mmc_data *data)
return -ENODEV;
sg_len = dw_mci_pre_dma_transfer(host, data, 0);
- if (sg_len < 0)
+ if (sg_len < 0) {
+ host->dma_ops->stop(host);
return sg_len;
+ }
host->using_dma = 1;