diff options
author | Seungwon Jeon <tgih.jun@samsung.com> | 2013-08-30 11:14:38 -0400 |
---|---|---|
committer | Chris Ball <cjb@laptop.org> | 2013-09-25 21:36:34 -0400 |
commit | aa50f259d65603f40a82ef0d256a6a954a3db283 (patch) | |
tree | 01d5aceba3be7d6ffcc50f3f52cb6071b3809c2d | |
parent | 5ce9d96177908e288bf64449a3b7b7159940050b (diff) |
mmc: dw_mmc: fix the transfer termination in IDMAC mode
In IDMAC mode EVENT_XFER_COMPLETE is set when RI/TI of last descriptor
is done. So if errors are happened in the middle of data transfers,
'dw_mci_stop_dma' during error handing can be called and eventually
prevents this flag to be set. This results in permanent wait for
EVENT_XFER_COMPLETE in 'dw_mci_tasklet_func'. Therefore, if dma
running is stopped forcibly, EVENT_XFER_COMPLETE should be set.
Reported-by: Bing Zhao <bzhao@marvell.com>
Signed-off-by: Doug Anderson <dianders@chromium.org>
Signed-off-by: Seungwon Jeon <tgih.jun@samsung.com>
Tested-by: Alim Akhtar <alim.akhtar@samsung.com>
Acked-by: Jaehoon Chung <jh80.chung@samsung.com>
Signed-off-by: Chris Ball <cjb@laptop.org>
-rw-r--r-- | drivers/mmc/host/dw_mmc.c | 6 |
1 files changed, 3 insertions, 3 deletions
diff --git a/drivers/mmc/host/dw_mmc.c b/drivers/mmc/host/dw_mmc.c index 05c239f96079..0a6a51238b7f 100644 --- a/drivers/mmc/host/dw_mmc.c +++ b/drivers/mmc/host/dw_mmc.c | |||
@@ -345,10 +345,10 @@ static void dw_mci_stop_dma(struct dw_mci *host) | |||
345 | if (host->using_dma) { | 345 | if (host->using_dma) { |
346 | host->dma_ops->stop(host); | 346 | host->dma_ops->stop(host); |
347 | host->dma_ops->cleanup(host); | 347 | host->dma_ops->cleanup(host); |
348 | } else { | ||
349 | /* Data transfer was stopped by the interrupt handler */ | ||
350 | set_bit(EVENT_XFER_COMPLETE, &host->pending_events); | ||
351 | } | 348 | } |
349 | |||
350 | /* Data transfer was stopped by the interrupt handler */ | ||
351 | set_bit(EVENT_XFER_COMPLETE, &host->pending_events); | ||
352 | } | 352 | } |
353 | 353 | ||
354 | static int dw_mci_get_dma_dir(struct mmc_data *data) | 354 | static int dw_mci_get_dma_dir(struct mmc_data *data) |