Re: [U-Boot] [PATCH] mmc: add host_caps checking avoid switch card improperly

2011-11-27 Thread Macpaul Lin
Hi Andy,

2011/11/26 Andy Fleming 

> On Thu, Nov 17, 2011 at 3:31 AM, Macpaul Lin 
> 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.
> > +   if (!((mmc->host_caps & MMC_MODE_HS_52MHz) ||
> > +   (mmc->host_caps & MMC_MODE_HS)))
> > +   return 0;
> > +
>

I wrote this is because I've thought that SD cards usually work at 50MHz
when they under
high speed mode (MMC_MODE_HS), and MMC cards usually work at 52MHz when
they are under high speed mode.
I'm not sure if one controller support HS_52MHz for MMC cards will
definitely
support SD cards under 50MHz.
If I'm wrong for the above please correct me.

Hence I wrote this to force them working under low speed to avoid problem
occur.

But I think you're correct, we should use "&&" logic here until there is
really a problem for
the unbelievable situation I mentioned above that happened. :-p


>  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;
>
> ?
>
>
I'll send patch v2 by using your logic later.
Thanks!


-- 
Best regards,
Macpaul Lin
___
U-Boot mailing list
U-Boot@lists.denx.de
http://lists.denx.de/mailman/listinfo/u-boot


Re: [U-Boot] [PATCH] mmc: add host_caps checking avoid switch card improperly

2011-11-25 Thread Andy Fleming
On Thu, Nov 17, 2011 at 3:31 AM, Macpaul Lin  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 
> ---
>  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


[U-Boot] [PATCH] mmc: add host_caps checking avoid switch card improperly

2011-11-17 Thread Macpaul Lin
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 
---
 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;
+
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