linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH v2] mmc: lower init clock frequency to 300kHz
@ 2010-01-01 23:11 Ben Nizette
  2010-01-06  7:01 ` Pavel Machek
  0 siblings, 1 reply; 5+ messages in thread
From: Ben Nizette @ 2010-01-01 23:11 UTC (permalink / raw)
  To: Pierre Ossman
  Cc: Adrian Hunter, linux-mmc, linux-kernel, Matt Fleming,
	Hein_Tibosch, Sascha Hauer


A good few months ago, commit

commit 8dfd0374be84793360db7fff2e635d2cd3bbcb21
Author: Sascha Hauer <s.hauer@pengutronix.de>
Date:   Thu Apr 9 08:32:02 2009 +0200

    MMC core: limit minimum initialization frequency to 400kHz

broke a few setups with cards which don't quite adhere to the MMC spec - 400kHz is just too fast for them.  In my testing, all of the cards which fail at 400kHz are OK by about 350Khz but this patch drops the floor to 300 to be on the safe side.

Dropping the floor also means that the warning will trigger on some valid setups, albeit ones which won't run particularly crappy cards.  This patch then slightly softens the language of said warning to make it clear it isn't always a problem.

V1 of this patch dropped the floor all the way to 50kHz on the basis that it was only for a few 100 bytes so that very low speed shouldn't matter.  After some discussion [1] the consensus was that 50 was too slow after all so this patch is a bit more sensible.

Signed-off-by: Ben Nizette <bn@niasdigital.com>

[1] http://lkml.org/lkml/2009/7/1/529

---
diff --git a/drivers/mmc/core/core.c b/drivers/mmc/core/core.c
index 7dab2e5..49f0eae 100644
--- a/drivers/mmc/core/core.c
+++ b/drivers/mmc/core/core.c
@@ -891,12 +891,12 @@ static void mmc_power_up(struct mmc_host *host)
 	 */
 	mmc_delay(10);
 
-	if (host->f_min > 400000) {
-		pr_warning("%s: Minimum clock frequency too high for "
+	if (host->f_min > 300000) {
+		pr_warning("%s: Minimum clock frequency may be too high for "
 				"identification mode\n", mmc_hostname(host));
 		host->ios.clock = host->f_min;
 	} else
-		host->ios.clock = 400000;
+		host->ios.clock = 300000;
 
 	host->ios.power_mode = MMC_POWER_ON;
 	mmc_set_ios(host);


^ permalink raw reply related	[flat|nested] 5+ messages in thread

* Re: [PATCH v2] mmc: lower init clock frequency to 300kHz
  2010-01-01 23:11 [PATCH v2] mmc: lower init clock frequency to 300kHz Ben Nizette
@ 2010-01-06  7:01 ` Pavel Machek
  2010-01-06  9:01   ` Hein_Tibosch
  0 siblings, 1 reply; 5+ messages in thread
From: Pavel Machek @ 2010-01-06  7:01 UTC (permalink / raw)
  To: Ben Nizette
  Cc: Pierre Ossman, Adrian Hunter, linux-mmc, linux-kernel,
	Matt Fleming, Hein_Tibosch, Sascha Hauer

On Sat 2010-01-02 10:11:10, Ben Nizette wrote:
> 
> A good few months ago, commit
> 
> commit 8dfd0374be84793360db7fff2e635d2cd3bbcb21
> Author: Sascha Hauer <s.hauer@pengutronix.de>
> Date:   Thu Apr 9 08:32:02 2009 +0200
> 
>     MMC core: limit minimum initialization frequency to 400kHz
> 
> broke a few setups with cards which don't quite adhere to the MMC spec - 400kHz is just too fast for them.  In my testing, all of the cards which fail at 400kHz are OK by about 350Khz but this patch drops the floor to 300 to be on the safe side.
> 
> Dropping the floor also means that the warning will trigger on some valid setups, albeit ones which won't run particularly crappy cards.  This patch then slightly softens the language of said warning to make it clear it isn't always a problem.
> 
> V1 of this patch dropped the floor all the way to 50kHz on the basis that it was only for a few 100 bytes so that very low speed shouldn't matter.  After some discussion [1] the consensus was that 50 was too slow after all so this patch is a bit more sensible.
> 

(please wrap).

> @@ -891,12 +891,12 @@ static void mmc_power_up(struct mmc_host *host)
>  	 */
>  	mmc_delay(10);
>  
> -	if (host->f_min > 400000) {
> -		pr_warning("%s: Minimum clock frequency too high for "
> +	if (host->f_min > 300000) {
> +		pr_warning("%s: Minimum clock frequency may be too high for "
>  				"identification mode\n", mmc_hostname(host));
>  		host->ios.clock = host->f_min;
>  	} else
> -		host->ios.clock = 400000;
> +		host->ios.clock = 300000;
>  
>  	host->ios.power_mode = MMC_POWER_ON;
>  	mmc_set_ios(host);

Machine with minimum clock of 1MHz is clearly broken, yet you issue
"soft" warning.

What about:

     if (f_min > 400k)
     	print existing warning
     else if (f_min > 300k)
        print warning 'if your card does not work, its broken,  but
	      	           	your host is unhelpful'
     clock = f_min
     if (clock < 3o0)
     	 clock = 300

?
								Pavel

-- 
(english) http://www.livejournal.com/~pavelmachek
(cesky, pictures) http://atrey.karlin.mff.cuni.cz/~pavel/picture/horses/blog.html

^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [PATCH v2] mmc: lower init clock frequency to 300kHz
  2010-01-06  7:01 ` Pavel Machek
@ 2010-01-06  9:01   ` Hein_Tibosch
  0 siblings, 0 replies; 5+ messages in thread
From: Hein_Tibosch @ 2010-01-06  9:01 UTC (permalink / raw)
  To: Pavel Machek
  Cc: Ben Nizette, Pierre Ossman, Adrian Hunter, linux-mmc,
	linux-kernel, Matt Fleming, Sascha Hauer

On 6-1-2010 15:01, Pavel Machek wrote:
> Machine with minimum clock of 1MHz is clearly broken, yet you issue
> "soft" warning.
>
> What about:
>
>      if (f_min > 400k)
>      	print existing warning
>      else if (f_min > 300k)
>         print warning 'if your card does not work, its broken,  but
> 	      	           	your host is unhelpful'
>      clock = f_min
>      if (clock < 3o0)
>      	 clock = 300
>
> ?
>   
Later in this thread I mentioned that initialization at 300 Khz is
too fast for some platforms/cards (avr32 AP7000/main-stream cards).
They will report CRC-errors so the above won't work.

I have looked at the time it will take to exchange the initial data (about
85 bytes), using different busses and frequencies:
	
        Intface:  8-bits  4-bits  SPI
Bus-freq:
400000 (Hz)       0.213   0.425    1.700 (ms)
300000            0.283   0.567    2.267
200000            0.425   0.850    3.400
100000            0.850   1.700    6.800
50000             1.700   3.400   13.600
100               850     1700    6800

These are netto times, without the msleep's for power-up and without
overhead.

Looking at this table, I would use a fixed bottom of 100 Khz:

	if (f_min > 400k)
		print existing warning
	clock = max (100k, host->f_min);

Regards, Hein








^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [PATCH v2] mmc: lower init clock frequency to 300kHz
  2010-01-02  9:07           ` [PATCH v2] mmc: lower init clock frequency to 300kHz Ben Nizette
@ 2010-01-02 12:08             ` Pierre Ossman
  0 siblings, 0 replies; 5+ messages in thread
From: Pierre Ossman @ 2010-01-02 12:08 UTC (permalink / raw)
  To: Ben Nizette
  Cc: Hein_Tibosch, Sascha Hauer, Adrian Hunter, linux-mmc,
	linux-kernel, Matt Fleming

[-- Attachment #1: Type: text/plain, Size: 980 bytes --]

On Sat, 2 Jan 2010 20:07:01 +1100
Ben Nizette <bn@niasdigital.com> wrote:

> 
> Pierre, thoughts?  All my cards were borderline spec but Hein's got a mainstream, common card which seems to completely ignore the spec.  Can we just take the few-hundred-uS hit and allow initialization down at the bottom end, say 100kHz?
> 

Broken cards seem to be all over the spectrum, so I wouldn't be
suprised if you find ones that break if you go too low as well.

Basically you'll just have to try something and watch the bug reports.
Perhaps doing the bisect approach and choosing the intermediate value
each time? I.e. halvway between 400 and 100 for now (250). If that is
too fast, then halway between that and 100 (175), and so on.

Rgds
-- 
     -- Pierre Ossman

  WARNING: This correspondence is being monitored by FRA, a
  Swedish intelligence agency. Make sure your server uses
  encryption for SMTP traffic and consider using PGP for
  end-to-end encryption.

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 198 bytes --]

^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [PATCH v2] mmc: lower init clock frequency to 300kHz
       [not found]         ` <4B3F019F.6010306@yahoo.es>
@ 2010-01-02  9:07           ` Ben Nizette
  2010-01-02 12:08             ` Pierre Ossman
  0 siblings, 1 reply; 5+ messages in thread
From: Ben Nizette @ 2010-01-02  9:07 UTC (permalink / raw)
  To: Hein_Tibosch
  Cc: Pierre Ossman, Sascha Hauer, Adrian Hunter, linux-mmc,
	linux-kernel, Matt Fleming


(Adding linux CCs)

On 02/01/2010, at 7:19 PM, Hein_Tibosch wrote:

> Almost good: on my Kingston Elite Pro (50x) SD-card, initialization will
> only succeed if F <= 282258 Hz.

...

> 
> I checked some datasheets of several makes:
> 
> Delkin microSD min 0 max 400
> Swissbit min 0 max 400
> Sandisk 100 - 400
> Toshiba 100 - 400
> ST electronics 0 400
> SD-specification: Issue continues clock in frequency range of 100KHz-400KHz
>  If the Average frequency of the SDCLK is less than 100KHz then the card
>  may not be able to respond within the 1-second limit
> 
> So what about 100 or 150 Khz?

Ah geez, yeah this something else I was hoping to avoid with the V1 patch - an endless stream of "oh shit, this card's even /moore/ broken!  Patch it, patch it good"

Pierre, thoughts?  All my cards were borderline spec but Hein's got a mainstream, common card which seems to completely ignore the spec.  Can we just take the few-hundred-uS hit and allow initialization down at the bottom end, say 100kHz?

<overkill> Or a KConfig option? </overkill>

	--Ben.


^ permalink raw reply	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2010-01-06  9:11 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2010-01-01 23:11 [PATCH v2] mmc: lower init clock frequency to 300kHz Ben Nizette
2010-01-06  7:01 ` Pavel Machek
2010-01-06  9:01   ` Hein_Tibosch
  -- strict thread matches above, loose matches on Subject: below --
2009-07-01 23:49 [PATCH] MMC Core: Drop initialization frequency floor to 50kHz Ben Nizette
2009-07-02 11:58 ` Haavard Skinnemoen
2009-07-02 12:17   ` Ben Nizette
     [not found]     ` <4B3E570C.2060602@yahoo.es>
     [not found]       ` <63809451-ED1D-487A-AE63-F72B23D136D8@niasdigital.com>
     [not found]         ` <4B3F019F.6010306@yahoo.es>
2010-01-02  9:07           ` [PATCH v2] mmc: lower init clock frequency to 300kHz Ben Nizette
2010-01-02 12:08             ` Pierre Ossman

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).