summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRussell King <rmk@dyn-67.arm.linux.org.uk>2007-01-08 16:42:51 +0000
committerRussell King <rmk+kernel@arm.linux.org.uk>2007-01-08 19:49:51 +0000
commite47c222b22cd53c317a5573e1dc5f9e0cbd46380 (patch)
treee9c4563c7cc425a99a52931f591a8357273ed20c
parentdb6ccbb61c1291c8aaefadcc8304444f27eeb88d (diff)
downloadtalos-obmc-linux-e47c222b22cd53c317a5573e1dc5f9e0cbd46380.tar.gz
talos-obmc-linux-e47c222b22cd53c317a5573e1dc5f9e0cbd46380.zip
[ARM] Fix potential MMCI bug
The MMCI driver might end up aborting the initial command and leaving the data part of the command sequence still in place. Avoid this problem by ensuring that any data sequence is properly cleared out when a command completes. Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
-rw-r--r--drivers/mmc/mmci.c4
1 files changed, 4 insertions, 0 deletions
diff --git a/drivers/mmc/mmci.c b/drivers/mmc/mmci.c
index e9b80e920266..ccfe6561be24 100644
--- a/drivers/mmc/mmci.c
+++ b/drivers/mmc/mmci.c
@@ -42,6 +42,8 @@ mmci_request_end(struct mmci_host *host, struct mmc_request *mrq)
{
writel(0, host->base + MMCICOMMAND);
+ BUG_ON(host->data);
+
host->mrq = NULL;
host->cmd = NULL;
@@ -198,6 +200,8 @@ mmci_cmd_irq(struct mmci_host *host, struct mmc_command *cmd,
}
if (!cmd->data || cmd->error != MMC_ERR_NONE) {
+ if (host->data)
+ mmci_stop_data(host);
mmci_request_end(host, cmd->mrq);
} else if (!(cmd->data->flags & MMC_DATA_READ)) {
mmci_start_data(host, cmd->data);
OpenPOWER on IntegriCloud