[U-Boot] [PATCH] mmc: correct the HS400 initialization process

Marek Vasut marek.vasut at gmail.com
Mon Mar 25 11:16:53 UTC 2019


On 3/25/19 11:24 AM, BOUGH CHEN wrote:
> 
>> -----Original Message-----
>> From: Marek Vasut [mailto:marek.vasut at gmail.com]
>> Sent: 2019年3月18日 19:53
>> To: BOUGH CHEN <haibo.chen at nxp.com>; jh80.chung at samsung.com;
>> trini at konsulko.com
>> Cc: marek.vasut+renesas at gmail.com; Ye Li <ye.li at nxp.com>; dl-uboot-imx
>> <uboot-imx at nxp.com>; u-boot at lists.denx.de
>> Subject: Re: [PATCH] mmc: correct the HS400 initialization process
>>
>> On 3/18/19 9:23 AM, BOUGH CHEN wrote:
>>> After the commit b9a2a0e2e9c0 ("mmc: Add support for downgrading
>>> HS200/HS400 to HS mode"), it add a parameter in mmc_set_card_speed()
>>> which indicates that the HS200/HS400 to HS downgrade is happening.
>>>
>>> During the HS400 initialization, first select to HS200, and config the
>>> related clock rate, then downgrade to HS mode. So here also need to
>>> config the downgrade value to be true, make sure in the function
>>> mmc_set_card_speed(), after switch to HS mode, first config the clock
>>> rate, then read the EXT_CSD. Otherwise read EXT_CSD in HS mode at
>>> wrong clock rate, e.g. 200MHz, may lead to uncertain result.
>>
>> I think the fix is right, but the reasoning for it is not.
>>
>> If you call mmc_set_card_speed() with hsdowngrade=true, it will result in
>> calling __mmc_switch() with send_status=false , which in turn means that
>> after issuing the MMC_CMD_SWITCH command, the code won't poll the card
>> using MMC_CMD_SEND_STATUS, but just wait a bit and then switch the bus
>> properties. This is indeed required when switching bus properties.
>> And that's what I think was making your card unstable.
>>
>> Is that the case ?
> 
> Sorry for the tardy reply, I miss the email last week.
> No, if without this patch, even I add the dealy after the switch command, eMMC still stuck after the CMD8.
> The main issue is that, in mmc_set_card_speed, if the bus mode the HS mode, it will send CMD8 to get the EXT_CSD, but the clock is still 200MHz at that time.
> It is wrong that EMMC output data in HS mode at 200MHz. 

OK, that makes sense.

-- 
Best regards,
Marek Vasut


More information about the U-Boot mailing list