[PATCH v2] mmc: fsl_esdhc: Do not set UHS_CAPS based on CONFIG_MMC_UHS_SUPPORT

Peng Fan peng.fan at oss.nxp.com
Wed Apr 12 10:55:24 CEST 2023


Hi Fabio,

On 4/11/2023 9:41 PM, Fabio Estevam wrote:
> From: Fabio Estevam <festevam at denx.de>
> 
> Since commit 1a7904fdfa7d ("mmc: fsl_esdhc_imx: Use esdhc_soc_data flags
> to set host caps") the following SD card error is observed on an imx7d-sdb
> board:

What kind card do you see the issue? Have you tried the other card?

> 
> U-Boot 2023.04-00652-g487e42f7bc5e (Apr 05 2023 - 22:14:21 -0300)
> 
> CPU:   Freescale i.MX7D rev1.0 1000 MHz (running at 792 MHz)
> CPU:   Commercial temperature grade (0C to 95C) at 35C
> Reset cause: POR
> Model: Freescale i.MX7 SabreSD Board
> Board: i.MX7D SABRESD in non-secure mode
> DRAM:  1 GiB
> Core:  100 devices, 19 uclasses, devicetree: separate
> PMIC: PFUZE3000 DEV_ID=0x30 REV_ID=0x10
> MMC:   FSL_SDHC: 0, FSL_SDHC: 1, FSL_SDHC: 2
> Loading Environment from MMC... Card did not respond to voltage select! : -110
> *** Warning - No block device, using default environment
> 
> Setting UHS_CAPS only based on the CONFIG_MMC_UHS_SUPPORT config
> option is not correct because UHS_CAPS has the following definition:
> 
>   #define UHS_CAPS (MMC_CAP(UHS_SDR12) | MMC_CAP(UHS_SDR25) | \
> 		   MMC_CAP(UHS_SDR50) | MMC_CAP(UHS_SDR104) | \
> 		   MMC_CAP(UHS_DDR50))
> 
> and the SD card may not necessarily support all these modes.
> 
> Remove the UHS_CAPS setting to fix the SD card regression.
> 
> Fixes: 1a7904fdfa7d ("mmc: fsl_esdhc_imx: Use esdhc_soc_data flags to set host caps")
> Signed-off-by: Fabio Estevam <festevam at denx.de>
> ---
> Changes since v1:
> - Remove setting UHS_CAPS completely.
> 
>   drivers/mmc/fsl_esdhc_imx.c | 7 -------
>   1 file changed, 7 deletions(-)
> 
> diff --git a/drivers/mmc/fsl_esdhc_imx.c b/drivers/mmc/fsl_esdhc_imx.c
> index 66caf683f7..5e7d9f41b6 100644
> --- a/drivers/mmc/fsl_esdhc_imx.c
> +++ b/drivers/mmc/fsl_esdhc_imx.c
> @@ -1258,13 +1258,6 @@ static int fsl_esdhc_init(struct fsl_esdhc_priv *priv,
>   			esdhc_write32(&regs->tuning_ctrl, val);
>   		}
>   
> -		/*
> -		 * UHS doesn't have explicit ESDHC flags, so if it's
> -		 * not supported, disable it in config.
> -		 */
> -		if (CONFIG_IS_ENABLED(MMC_UHS_SUPPORT))
> -			cfg->host_caps |= UHS_CAPS;

I am afraid this just workaround the issue you met. Actually
in drivers/mmc/mmc, if your card not support UHS_CAPS, the caps will 
remove the UHS_CAPS.

1762         /* Restrict card's capabilities by what the host can do */
1763         caps = card_caps & mmc->host_caps;
1764
1765         if (!uhs_en)
1766                 caps &= ~UHS_CAPS;

So would you please dump the card_caps, then we find a proper fix?

Thanks,
Peng.

> -
>   		if (CONFIG_IS_ENABLED(MMC_HS200_SUPPORT)) {
>   			if (priv->flags & ESDHC_FLAG_HS200)
>   				cfg->host_caps |= MMC_CAP(MMC_HS_200);


More information about the U-Boot mailing list