From: Dongjin Kim <dongjin.kim@agreeyamobility.net>
To: linux-mmc@vger.kernel.org
Subject: Re: mmc: dw_mmc: release hardware lock error
Date: Tue, 28 Feb 2012 10:09:38 +0000 (UTC) [thread overview]
Message-ID: <jii951$qg3$1@dough.gmane.org> (raw)
In-Reply-To: 4F4C85C8.8000808@samsung.com
Hi Jaehoon,
Sorry for the inconvenience, here is the patch line-wrapping fixed.
-------------------->8-------------------->8--------------------
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,
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
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;
-------------------->8-------------------->8--------------------
On Tue, 28 Feb 2012 16:44:08 +0900, Jaehoon Chung wrote:
> Hi Dongjin.
>
> This patch is corrupt due to line-wrapping.
>
> Best Regards,
> Jaehoon Chung
>
> On 02/28/2012 04:31 PM, Dongjin Kim wrote:
>
>> Jaehoon Chung <jh80.chung <at> samsung.com> writes:
>>
>>
>>> On 02/28/2012 02:32 PM, Dongjin Kim wrote:
>>>
>>>> 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
>>>>
>>>>
>>> Hi Dongjin.
>>>
>>> It seems like this problem. Can you check this patch?
>>> http://www.spinics.net/lists/linux-mmc/msg09895.html
>>>
>>> Best Regards,
>>> Jaehoon Chung
>>>
>> Hi Jaehoon,
>>
>> Thank you for your feedback.
>> I had tested the patch from the link but the result is same on my
>> hardware.
>>
>> This is the log message what I had before, the hardware hanged after
>> this log when mmc card is inserted.
>>
>> [ 62.450000] end_request: I/O error, dev mmcblk0, sector 7585 [
>> 62.460000] mmcblk0: error -123 sending read/write command, response
>> 0x0, card status 0x0
>> [ 62.470000] end_request: I/O error, dev mmcblk0, sector 7586 [
>> 62.470000] mmcblk0: error -123 sending read/write command, response
>> 0x0, card status 0x0
>> [ 62.480000] end_request: I/O error, dev mmcblk0, sector 7587 [
>> 62.490000] mmcblk0: error -123 sending read/write command, response
>> 0x0, card status 0x0
>> [ 62.490000] end_request: I/O error, dev mmcblk0, sector 7588 [
>> 62.500000] mmcblk0: error -123 sending read/write command, response
>> 0x0, card status 0x0
>> [ 62.510000] end_request: I/O error, dev mmcblk0, sector 7589 [
>> 62.510000] Buffer I/O error on device mmcblk0p1, logical block 940 [
>> 63.770000] mmc_host mmc1: Bus speed (slot 0) = 50000000Hz (slot req
>> 400000Hz, actual 403225HZ div = 62)
>> [ 64.270000] mmc_host mmc1: Timeout sending command (cmd 0x202000 arg
>> 0x0 status 0x80202000)
>>
>> In normal case, the log message have to go through as below and usually
>> it is, except on certain case.
>>
>> [ 80.620000] mmcblk0: error -123 sending read/write command, response
>> 0x0, card status 0x0
>> [ 80.620000] mmcblk0: error -123 requesting status [ 80.620000]
>> end_request: I/O error, dev mmcblk0, sector 7614 [ 82.930000]
>> mmc_host mmc1: Bus speed (slot 0) = 50000000Hz (slot req 400000Hz,
>> actual 403225HZ div = 62)
>> [ 83.730000] mmc_host mmc1: Bus speed (slot 0) = 50000000Hz (slot req
>> 50000000Hz, actual 25000000HZ div = 1) [ 83.750000] mmc1: new high
>> speed SD card at address 0007 [ 83.760000] mmcblk0: mmc1:0007 SD02G
>> 1.84 GiB [ 83.780000] mmcblk0: p1
>>
>> Below is the log message with my change to reset the bit, Hardware
>> Locked Error. This error is not happening always, I was testing the
>> driver removing mmc card without unmount.
>>
>> [ 118.310000] end_request: I/O error, dev mmcblk1, sector 1108 [
>> 118.310000] mmcblk1: error -123 sending read/write command, response
>> 0x0, card status 0x0
>> [ 118.310000] end_request: I/O error, dev mmcblk1, sector 1109 [
>> 124.190000] mmc_host mmc1: Bus speed (slot 0) = 50000000Hz (slot req
>> 400000Hz, actual 403225HZ div = 62)
>> [ 124.690000] mmc_host mmc1: Timeout sending command (cmd 0x202000 arg
>> 0x0 status 0x80202000)
>> [ 124.690000] mmc_host mmc1: Hardware locked error (cmd 0x202000 arg
>> 0x0) [ 125.550000] mmc_host mmc1: Bus speed (slot 0) = 50000000Hz
>> (slot req 50000000Hz, actual 25000000HZ div = 1) [ 125.560000] mmc1:
>> new high speed SD card at address 0007 [ 125.560000] mmcblk0:
>> mmc1:0007 SD02G 1.84 GiB [ 125.570000] mmcblk0: p1
>>
>> Cheers,
>> Dongjin.
>>
>>>> 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;
>>>>
>>>> --
>>>> To unsubscribe from this list: send the line "unsubscribe linux-mmc"
>>>> in the body of a message to majordomo <at> vger.kernel.org More
>>>> majordomo info at http://vger.kernel.org/majordomo-info.html
>>>>
>>>>
>>> --
>>> To unsubscribe from this list: send the line "unsubscribe linux-mmc"
>>> in the body of a message to majordomo <at> vger.kernel.org More
>>> majordomo info at http://vger.kernel.org/majordomo-info.html
>>>
>>>
>>>
>>
>>
>>
>> --
>> To unsubscribe from this list: send the line "unsubscribe linux-mmc" in
>> the body of a message to majordomo@vger.kernel.org More majordomo info
>> at http://vger.kernel.org/majordomo-info.html
>>
prev parent reply other threads:[~2012-02-28 10:09 UTC|newest]
Thread overview: 5+ messages / expand[flat|nested] mbox.gz Atom feed top
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 message]
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to='jii951$qg3$1@dough.gmane.org' \
--to=dongjin.kim@agreeyamobility.net \
--cc=linux-mmc@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
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.