[U-Boot] [PATCH] mmc: add host_caps checking avoid switch card improperly
Andy Fleming
afleming at gmail.com
Sat Nov 26 00:36:58 CET 2011
On Thu, Nov 17, 2011 at 3:31 AM, Macpaul Lin <macpaul at andestech.com> wrote:
> Add a host capability checking to avoid the mmc stack
> switch the card to HIGHSPEED mode when the card supports
> HIGHSPEED while the host doesn't.
>
> This patch avoid furthur transaction problem when the
> mmc/sd card runs different mode to the host.
>
> Signed-off-by: Macpaul Lin <macpaul at andestech.com>
> ---
> drivers/mmc/mmc.c | 10 ++++++++++
> 1 files changed, 10 insertions(+), 0 deletions(-)
>
> diff --git a/drivers/mmc/mmc.c b/drivers/mmc/mmc.c
> index 21665ec..ce34d05 100644
> --- a/drivers/mmc/mmc.c
> +++ b/drivers/mmc/mmc.c
> @@ -785,6 +785,16 @@ retry_scr:
> if (!(__be32_to_cpu(switch_status[3]) & SD_HIGHSPEED_SUPPORTED))
> return 0;
>
> + /*
> + * If the host doesn't support SD_HIGHSPEED, do not switch card to
> + * HIGHSPEED mode even if the card support SD_HIGHSPPED.
> + * This can avoid furthur problem when the card runs in different
> + * mode between the host.
> + */
> + if (!((mmc->host_caps & MMC_MODE_HS_52MHz) ||
> + (mmc->host_caps & MMC_MODE_HS)))
> + return 0;
> +
Isn't this the wrong logic? It seems like you don't want to switch
unless both support high speed. But this logic says to switch if
either one does.
Shouldn't it be:
if (!((mmc->host_caps & MMC_MODE_HS_52MHz) &&
(mmc->host_caps & MMC_MODE_HS)))
return 0;
?
Andy
> err = sd_switch(mmc, SD_SWITCH_SWITCH, 0, 1, (u8 *)switch_status);
>
> if (err)
> --
> 1.7.3.5
>
>
More information about the U-Boot
mailing list