public inbox for u-boot@lists.denx.de
 help / color / mirror / Atom feed
From: Jaehoon Chung <jh80.chung@samsung.com>
To: u-boot@lists.denx.de
Subject: [U-Boot] [PATCH v2 1/3] mmc: sdhci: fix the wrong operation when response type is R1b
Date: Fri, 30 Mar 2012 13:36:01 +0900	[thread overview]
Message-ID: <4F753831.1020707@samsung.com> (raw)
In-Reply-To: <CALZhoSSd0DDeTE_PsaGPJEsJeTQW70RpdqGjjT3RhecNmcT1jQ@mail.gmail.com>

Hi Lei.

First, thanks for implemented the generic sdhci controller.

On 03/30/2012 12:33 PM, Lei Wen wrote:

> Hi Jaehoon,
> 
> On Fri, Mar 30, 2012 at 10:39 AM, Jaehoon Chung <jh80.chung@samsung.com> wrote:
>> When response type is R1b, mask value is added the SDHCI_INT_DAT_END.
>> but in while(), didn't check that flag.
>> So sdhci controller didn't work fine.
>> CMD6 didn't always complete.
> 
> Could you elaborate it more in details?
>         do {
>                 stat = sdhci_readl(host, SDHCI_INT_STATUS);
>                 if (stat & SDHCI_INT_ERROR)
>                         break;
>         } while ((stat & mask) != mask);
> Here in the while condition, if the status read out don't contain all mask,
> then the looping would continue.
> Do you mean you just need a retry max time set here?

I found that didn't initialize the eMMC card.
Because when send CMD6, running infinite loop in there.
CMD6's mask is set to SDHCI_INT_RESPONSE and SDHCI_INT_DATA_END.
(Because response type is R1B).
Then mask value maybe is 0x3...
stat = sdhci_readl(host, SDHCI_INT_STATUS);
stat is 0x1.(cmd is done response).
but in while(), stat & mask is 0x1, and mask is 0x3.
...doing while().
If just add the timeout, then always produced the timeout error.

How did you test? Is initialize the eMMC card?
(I tested with eMMC4.41 (exynos4).)

> 
> 
>>
>> Signed-off-by: Jaehoon Chung <jh80.chung@samsung.com>
>> Signed-off-by: Kyungmin Park <kyungmin.park@samsung.com>
>> ---
>>  drivers/mmc/sdhci.c |   33 +++++++++++++++++++++++----------
>>  1 files changed, 23 insertions(+), 10 deletions(-)
>>
>> diff --git a/drivers/mmc/sdhci.c b/drivers/mmc/sdhci.c
>> index fc904b5..0dd08b9 100644
>> --- a/drivers/mmc/sdhci.c
>> +++ b/drivers/mmc/sdhci.c
>> @@ -124,10 +124,11 @@ int sdhci_send_command(struct mmc *mmc, struct mmc_cmd *cmd,
>>  {
>>        struct sdhci_host *host = (struct sdhci_host *)mmc->priv;
>>        unsigned int stat = 0;
>> -       int ret = 0;
>> +       int i, ret = 0;
>>        int trans_bytes = 0, is_aligned = 1;
>>        u32 mask, flags, mode;
>>        unsigned int timeout, start_addr = 0;
>> +       unsigned int retry = 10000;
>>
>>        /* Wait max 10 ms */
>>        timeout = 10;
>> @@ -206,19 +207,31 @@ int sdhci_send_command(struct mmc *mmc, struct mmc_cmd *cmd,
>>        flush_cache(start_addr, trans_bytes);
>>  #endif
>>        sdhci_writew(host, SDHCI_MAKE_CMD(cmd->cmdidx, flags), SDHCI_COMMAND);
>> -       do {
>> +
>> +       for (i = 0; i < retry; i++) {
>>                stat = sdhci_readl(host, SDHCI_INT_STATUS);
>> -               if (stat & SDHCI_INT_ERROR)
>> +               if (stat & (SDHCI_INT_RESPONSE | SDHCI_INT_DATA_END)) {
>> +                       sdhci_cmd_done(host, cmd);
>> +                       sdhci_writel(host, mask, SDHCI_INT_STATUS);
>> +                       if (!data) {
>> +                               sdhci_writel(host, stat,  SDHCI_INT_STATUS);
> 
> Why do two write?

We can remove the sdhci_writel(host, mask SDHCI_INT_STATUS).
It's my mistake..i will fix that.

Best Regards,
Jaehoon Chung

  reply	other threads:[~2012-03-30  4:36 UTC|newest]

Thread overview: 8+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2012-03-30  2:39 [U-Boot] [PATCH v2 1/3] mmc: sdhci: fix the wrong operation when response type is R1b Jaehoon Chung
2012-03-30  3:33 ` Lei Wen
2012-03-30  4:36   ` Jaehoon Chung [this message]
2012-03-30  5:24     ` Lei Wen
2012-03-30  6:23       ` Jaehoon Chung
2012-03-30 15:54         ` Lei Wen
2012-03-31  6:55           ` Jae hoon Chung
2012-03-31 12:39             ` Lei Wen

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=4F753831.1020707@samsung.com \
    --to=jh80.chung@samsung.com \
    --cc=u-boot@lists.denx.de \
    /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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox