| From 3b6e3c73851a9a4b0e6ed9d378206341dd65e8a5 Mon Sep 17 00:00:00 2001 |
| From: Ulf Hansson <ulf.hansson@stericsson.com> |
| Date: Tue, 13 Dec 2011 16:58:43 +0100 |
| Subject: ARM: 7220/1: mmc: mmci: Fixup error handling for dma |
| |
| From: Ulf Hansson <ulf.hansson@stericsson.com> |
| |
| commit 3b6e3c73851a9a4b0e6ed9d378206341dd65e8a5 upstream. |
| |
| When getting a cmd irq during an ongoing data transfer |
| with dma, the dma job were never terminated. This is now |
| corrected. |
| |
| Tested-by: Linus Walleij <linus.walleij@linaro.org> |
| Signed-off-by: Per Forlin <per.forlin@stericsson.com> |
| Signed-off-by: Ulf Hansson <ulf.hansson@stericsson.com> |
| Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> |
| |
| --- |
| drivers/mmc/host/mmci.c | 6 +++++- |
| 1 file changed, 5 insertions(+), 1 deletion(-) |
| |
| --- a/drivers/mmc/host/mmci.c |
| +++ b/drivers/mmc/host/mmci.c |
| @@ -232,8 +232,12 @@ mmci_cmd_irq(struct mmci_host *host, str |
| } |
| |
| if (!cmd->data || cmd->error) { |
| - if (host->data) |
| + if (host->data) { |
| + /* Terminate the DMA transfer */ |
| + if (dma_inprogress(host)) |
| + mmci_dma_data_error(host); |
| mmci_stop_data(host); |
| + } |
| mmci_request_end(host, cmd->mrq); |
| } else if (!(cmd->data->flags & MMC_DATA_READ)) { |
| mmci_start_data(host, cmd->data); |