Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 18489fa2 authored by Martin Fuzzey's avatar Martin Fuzzey Committed by Pierre Ossman
Browse files

mxcmmc : Reset the SDHC hardware if software timeout occurs.



When a software timeout occurs in polling mode hardware was left in
an indeterminate state causing subsequent operations to block.

Signed-off-by: default avatarMartin Fuzzey <mfuzzey@gmail.com>
parent 85b84322
Loading
Loading
Loading
Loading
+6 −1
Original line number Diff line number Diff line
@@ -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;
@@ -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();