Commit fd2208d7 authored by Pierre Ossman's avatar Pierre Ossman Committed by Russell King

[MMC] sdhci: check only relevant inhibit bits

Conform to the sdhci specification as to which inhibit bits should be checked
at different times.
Signed-off-by: default avatarPierre Ossman <drzeus@drzeus.cx>
Signed-off-by: default avatarAndrew Morton <akpm@osdl.org>
Signed-off-by: default avatarRussell King <rmk+kernel@arm.linux.org.uk>
parent 1d676e02
...@@ -465,6 +465,7 @@ static void sdhci_finish_data(struct sdhci_host *host) ...@@ -465,6 +465,7 @@ static void sdhci_finish_data(struct sdhci_host *host)
static void sdhci_send_command(struct sdhci_host *host, struct mmc_command *cmd) static void sdhci_send_command(struct sdhci_host *host, struct mmc_command *cmd)
{ {
int flags; int flags;
u32 mask;
unsigned long timeout; unsigned long timeout;
WARN_ON(host->cmd); WARN_ON(host->cmd);
...@@ -473,11 +474,20 @@ static void sdhci_send_command(struct sdhci_host *host, struct mmc_command *cmd) ...@@ -473,11 +474,20 @@ static void sdhci_send_command(struct sdhci_host *host, struct mmc_command *cmd)
/* Wait max 10 ms */ /* Wait max 10 ms */
timeout = 10; timeout = 10;
while (readl(host->ioaddr + SDHCI_PRESENT_STATE) &
(SDHCI_CMD_INHIBIT | SDHCI_DATA_INHIBIT)) { mask = SDHCI_CMD_INHIBIT;
if ((cmd->data != NULL) || (cmd->flags & MMC_RSP_BUSY))
mask |= SDHCI_DATA_INHIBIT;
/* We shouldn't wait for data inihibit for stop commands, even
though they might use busy signaling */
if (host->mrq->data && (cmd == host->mrq->data->stop))
mask &= ~SDHCI_DATA_INHIBIT;
while (readl(host->ioaddr + SDHCI_PRESENT_STATE) & mask) {
if (timeout == 0) { if (timeout == 0) {
printk(KERN_ERR "%s: Controller never released " printk(KERN_ERR "%s: Controller never released "
"inhibit bits. Please report this to " "inhibit bit(s). Please report this to "
BUGMAIL ".\n", mmc_hostname(host->mmc)); BUGMAIL ".\n", mmc_hostname(host->mmc));
sdhci_dumpregs(host); sdhci_dumpregs(host);
cmd->error = MMC_ERR_FAILED; cmd->error = MMC_ERR_FAILED;
......
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