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

Marek Vasut marek.vasut at gmail.com
Tue Mar 26 16:49:06 UTC 2019


On 3/26/19 7:24 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 for two reasons. First,
> make sure in the function mmc_set_card_speed(), after switch to HS
> mode, first config the clock rate, then read the EXT_CSD, avoid
> receiving data of EXT_CSD in HS mode at 200MHz. Second, after issue
> the MMC_CMD_SWITCH command, it need to wait a bit then switch bus
> properties.
> 
> Test on i.MX8QM MEK board, some Micron eMMC will stuck in transfer
> mode in this case, and USDHC will never get data transfer complete
> status, cause the uboot hang.
> 
> Signed-off-by: Haibo Chen <haibo.chen at nxp.com>

Acked-by: Marek Vasut <marek.vasut at gmail.com>

> ---
>  drivers/mmc/mmc.c | 3 +--
>  1 file changed, 1 insertion(+), 2 deletions(-)
> 
> diff --git a/drivers/mmc/mmc.c b/drivers/mmc/mmc.c
> index 89b255daf4..456c1b4cc9 100644
> --- a/drivers/mmc/mmc.c
> +++ b/drivers/mmc/mmc.c
> @@ -1892,8 +1892,7 @@ static int mmc_select_hs400(struct mmc *mmc)
>  	}
>  
>  	/* Set back to HS */
> -	mmc_set_card_speed(mmc, MMC_HS, false);
> -	mmc_set_clock(mmc, mmc_mode2freq(mmc, MMC_HS), false);
> +	mmc_set_card_speed(mmc, MMC_HS, true);
>  
>  	err = mmc_switch(mmc, EXT_CSD_CMD_SET_NORMAL, EXT_CSD_BUS_WIDTH,
>  			 EXT_CSD_BUS_WIDTH_8 | EXT_CSD_DDR_FLAG);
> 


-- 
Best regards,
Marek Vasut


More information about the U-Boot mailing list