All of lore.kernel.org
 help / color / mirror / Atom feed
* mmc: dw_mmc: release hardware lock error
@ 2012-02-28  5:32 Dongjin Kim
  2012-02-28  6:42 ` Jaehoon Chung
  0 siblings, 1 reply; 5+ messages in thread
From: Dongjin Kim @ 2012-02-28  5:32 UTC (permalink / raw)
  To: linux-mmc

Hello,

I encountered the problem that my hardware is frozen while switching clock from 
400kHz to others. This is caused that hardware locked error was triggered when 
CMD register was written and interrupt was pended. Tested IP version is 2.10a

Cheers,
Dongjin.

diff --git a/drivers/mmc/host/dw_mmc.c b/drivers/mmc/host/dw_mmc.c
index 2f7f5ee..05ccee8 100644
--- a/drivers/mmc/host/dw_mmc.c
+++ b/drivers/mmc/host/dw_mmc.c
@@ -520,15 +520,33 @@ static void mci_send_cmd(struct dw_mci_slot *slot, u32 
cmd, u32 arg)
 	struct dw_mci *host = slot->host;
 	unsigned long timeout = jiffies + msecs_to_jiffies(500);
 	unsigned int cmd_status = 0;
+	u32 ctrl;
 
+resend:
 	mci_writel(host, CMDARG, arg);
 	wmb();
 	mci_writel(host, CMD, SDMMC_CMD_START | cmd);
+
 	while (time_before(jiffies, timeout)) {
 		cmd_status = mci_readl(host, CMD);
 		if (!(cmd_status & SDMMC_CMD_START))
 			return;
+
+		if (host->cmd_status & SDMMC_INT_HLE) {
+			dev_err(&slot->mmc->class_dev,
+				"Hardware locked error (cmd %#x arg %#x)\n",
+				cmd, arg);
+
+			ctrl = mci_readl(host, CTRL);
+			ctrl |= SDMMC_CTRL_RESET;
+			mci_writel(host, CTRL, ctrl);
+
+			host->cmd_status &= ~SDMMC_INT_HLE;
+
+			goto resend;
+		}
 	}
+
 	dev_err(&slot->mmc->class_dev,
 		"Timeout sending command (cmd %#x arg %#x status %#x)\n",
 		cmd, arg, cmd_status);
@@ -1429,6 +1447,12 @@ static irqreturn_t dw_mci_interrupt(int irq, void 
*dev_id)
 		if (!pending)
 			break;
 
+		if (pending & SDMMC_INT_HLE) {
+			mci_writel(host, RINTSTS, SDMMC_INT_HLE);
+			host->cmd_status = status;
+			smp_wmb();
+		}
+
 		if (pending & DW_MCI_CMD_ERROR_FLAGS) {
 			mci_writel(host, RINTSTS, DW_MCI_CMD_ERROR_FLAGS);
 			host->cmd_status = status;


^ permalink raw reply related	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2012-02-28 10:09 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2012-02-28  5:32 mmc: dw_mmc: release hardware lock error Dongjin Kim
2012-02-28  6:42 ` Jaehoon Chung
2012-02-28  7:31   ` Dongjin Kim
2012-02-28  7:44     ` Jaehoon Chung
2012-02-28 10:09       ` Dongjin Kim

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.