[U-Boot] [RFC 2/3][v2] mmc: SEND_OP_COND considers card capabilities (voltage)
Lei Wen
adrian.wenl at gmail.com
Fri Mar 11 04:14:31 CET 2011
On Fri, Mar 11, 2011 at 12:59 AM, Raffaele Recalcati
<lamiaposta71 at gmail.com> wrote:
> On Thu, Mar 10, 2011 at 5:29 PM, Lei Wen <adrian.wenl at gmail.com> wrote:
>> Hi Raffaele,
>>
>> On Thu, Mar 10, 2011 at 11:43 PM, Raffaele Recalcati
>> <lamiaposta71 at gmail.com> wrote:
>>> From: Raffaele Recalcati <raffaele.recalcati at bticino.it>
>>>
>>> The first SEND_OP_COND (CMD1) is used only to ask card capabilities, waiting
>>> that the card is not busy.
>>> After it, an AND operation is done between card capabilities and host
>>> capabilities, (at the moment only for the voltage field).
>>> Finally the correct value is sent to the MMC.
>>>
>>> Signed-off-by: Raffaele Recalcati <raffaele.recalcati at bticino.it>
>>> ---
>>> drivers/mmc/mmc.c | 21 +++++++++++++++++++--
>>> include/mmc.h | 2 ++
>>> 2 files changed, 21 insertions(+), 2 deletions(-)
>>>
>>> diff --git a/drivers/mmc/mmc.c b/drivers/mmc/mmc.c
>>> index 042653f..ded630b 100644
>>> --- a/drivers/mmc/mmc.c
>>> +++ b/drivers/mmc/mmc.c
>>> @@ -347,17 +347,34 @@ sd_send_op_cond(struct mmc *mmc)
>>>
>>> int mmc_send_op_cond(struct mmc *mmc)
>>> {
>>> - int timeout = 1000;
>>> + int timeout = 10000;
>>> struct mmc_cmd cmd;
>>> int err;
>>>
>>> /* Some cards seem to need this */
>>> mmc_go_idle(mmc);
>>>
>>> + /* Asking to the card its capabilities */
>>> + do {
>>> + cmd.cmdidx = MMC_CMD_SEND_OP_COND;
>>> + cmd.resp_type = MMC_RSP_R3;
>>> + cmd.cmdarg = 0;
>>> + cmd.flags = 0;
>>> +
>>> + err = mmc_send_cmd(mmc, &cmd, NULL);
>>> +
>>> + if (err)
>>> + return err;
>>> +
>>> + udelay(1000);
>>> + } while (!(cmd.response[0] & OCR_BUSY) && timeout--);
>>
>> I think you should not put the first probe a multi-time. In linux framework,
>> it would skip the first probing.
>>
>> I test with this patch and fail to detect my emmc card...
>> While just let the first probe once, it works fine.
>>
>> Best regards,
>> Lei
>>
>
> Look at JEDEC Standard No. 84-A441 document at page 190.
> It is normal to ask the card capabilities before setting.
> But I understand also that in your case there is some issue.
> I'm sorry, what does "multi-time" mean?
>
I mean on my board I cannot get (!(cmd.response[0] & OCR_BUSY) to be
true for the first
MMC_CMD_SEND_OP_COND until its timeout, which lead to card init fail.
Best regards,
Lei
More information about the U-Boot
mailing list