On Thu, Nov 17, 2011 at 3:31 AM, Macpaul Lin <macp...@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 <macp...@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 > > _______________________________________________ U-Boot mailing list U-Boot@lists.denx.de http://lists.denx.de/mailman/listinfo/u-boot