Skip to content

Commit

Permalink
mxcmmc : Reset the SDHC hardware if software timeout occurs.
Browse files Browse the repository at this point in the history
When a software timeout occurs in polling mode hardware was left in
an indeterminate state causing subsequent operations to block.

Signed-off-by: Martin Fuzzey <mfuzzey@gmail.com>
  • Loading branch information
Martin Fuzzey authored and Pierre Ossman committed Jun 3, 2009
1 parent 85b8432 commit 18489fa
Showing 1 changed file with 6 additions and 1 deletion.
7 changes: 6 additions & 1 deletion drivers/mmc/host/mxcmmc.c
Original file line number Diff line number Diff line change
Expand Up @@ -140,6 +140,8 @@ struct mxcmci_host {
struct work_struct datawork;
};

static void mxcmci_set_clk_rate(struct mxcmci_host *host, unsigned int clk_ios);

static inline int mxcmci_use_dma(struct mxcmci_host *host)
{
return host->do_dma;
Expand Down Expand Up @@ -345,8 +347,11 @@ static int mxcmci_poll_status(struct mxcmci_host *host, u32 mask)
stat = readl(host->base + MMC_REG_STATUS);
if (stat & STATUS_ERR_MASK)
return stat;
if (time_after(jiffies, timeout))
if (time_after(jiffies, timeout)) {
mxcmci_softreset(host);
mxcmci_set_clk_rate(host, host->clock);
return STATUS_TIME_OUT_READ;
}
if (stat & mask)
return 0;
cpu_relax();
Expand Down

0 comments on commit 18489fa

Please sign in to comment.