Commit e47c222b authored by Russell King's avatar Russell King Committed by Russell King

[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: default avatarRussell King <rmk+kernel@arm.linux.org.uk>
parent db6ccbb6
...@@ -42,6 +42,8 @@ mmci_request_end(struct mmci_host *host, struct mmc_request *mrq) ...@@ -42,6 +42,8 @@ mmci_request_end(struct mmci_host *host, struct mmc_request *mrq)
{ {
writel(0, host->base + MMCICOMMAND); writel(0, host->base + MMCICOMMAND);
BUG_ON(host->data);
host->mrq = NULL; host->mrq = NULL;
host->cmd = NULL; host->cmd = NULL;
...@@ -198,6 +200,8 @@ mmci_cmd_irq(struct mmci_host *host, struct mmc_command *cmd, ...@@ -198,6 +200,8 @@ mmci_cmd_irq(struct mmci_host *host, struct mmc_command *cmd,
} }
if (!cmd->data || cmd->error != MMC_ERR_NONE) { if (!cmd->data || cmd->error != MMC_ERR_NONE) {
if (host->data)
mmci_stop_data(host);
mmci_request_end(host, cmd->mrq); mmci_request_end(host, cmd->mrq);
} else if (!(cmd->data->flags & MMC_DATA_READ)) { } else if (!(cmd->data->flags & MMC_DATA_READ)) {
mmci_start_data(host, cmd->data); mmci_start_data(host, cmd->data);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment