diff options
author | Russell King <rmk@dyn-67.arm.linux.org.uk> | 2007-01-08 16:42:51 +0000 |
---|---|---|
committer | Russell King <rmk+kernel@arm.linux.org.uk> | 2007-01-08 19:49:51 +0000 |
commit | e47c222b22cd53c317a5573e1dc5f9e0cbd46380 (patch) | |
tree | e9c4563c7cc425a99a52931f591a8357273ed20c /drivers/mmc | |
parent | db6ccbb61c1291c8aaefadcc8304444f27eeb88d (diff) | |
download | op-kernel-dev-e47c222b22cd53c317a5573e1dc5f9e0cbd46380.zip op-kernel-dev-e47c222b22cd53c317a5573e1dc5f9e0cbd46380.tar.gz |
[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>
Diffstat (limited to 'drivers/mmc')
-rw-r--r-- | drivers/mmc/mmci.c | 4 |
1 files changed, 4 insertions, 0 deletions
diff --git a/drivers/mmc/mmci.c b/drivers/mmc/mmci.c index e9b80e9..ccfe656 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); |