* [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
* [PATCH] MMC Core: Drop initialization frequency floor to 50kHz
@ 2009-07-01 23:49 Ben Nizette
2009-07-02 11:58 ` Haavard Skinnemoen
0 siblings, 1 reply; 5+ messages in thread
From: Ben Nizette @ 2009-07-01 23:49 UTC (permalink / raw)
To: pierre; +Cc: s.hauer, linux-kernel, kernel, Ben Nizette
Patch
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
Was recently merged. This is too fast for at least one setup
permutation - the one on my desk which through trial and error won't
initialise at anything above ~350kHz (older Sandisk 256MB SD on
atmel-mci).
To avoid a string of "just found card X which requires clock
(current_clock - epsilon)" this patch drops the floor right down to
50kHz. This is about the slowest rate before which the discovery
process takes a noticeable slowdown.
Signed-off-by: Ben Nizette <bn@niasdigital.com>
---
diff --git a/drivers/mmc/core/core.c b/drivers/mmc/core/core.c
index d84c880..6ee1931 100644
--- a/drivers/mmc/core/core.c
+++ b/drivers/mmc/core/core.c
@@ -708,12 +708,13 @@ 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 "
- "identification mode\n", mmc_hostname(host));
- host->ios.clock = host->f_min;
- } else
- host->ios.clock = 400000;
+ /*
+ * Card discovery is typically done at the controller's minimum
+ * allowable frequency but for some controllers this is minimum
+ * is unreasonably slow. In that case we limit slow clock rate
+ * to 50KHz.
+ */
+ host->ios.clock = max(host->f_min, 50000);
host->ios.power_mode = MMC_POWER_ON;
mmc_set_ios(host);
^ permalink raw reply related [flat|nested] 5+ messages in thread* Re: [PATCH] MMC Core: Drop initialization frequency floor to 50kHz
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
0 siblings, 1 reply; 5+ messages in thread
From: Haavard Skinnemoen @ 2009-07-02 11:58 UTC (permalink / raw)
To: Ben Nizette; +Cc: pierre, s.hauer, kernel, linux-kernel
Ben Nizette wrote:
> Was recently merged. This is too fast for at least one setup
> permutation - the one on my desk which through trial and error won't
> initialise at anything above ~350kHz (older Sandisk 256MB SD on
> atmel-mci).
What kind of board is this? It sounds a bit like the CMD or DATA0
pull-up is too weak...
Haavard
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [PATCH] MMC Core: Drop initialization frequency floor to 50kHz
2009-07-02 11:58 ` Haavard Skinnemoen
@ 2009-07-02 12:17 ` Ben Nizette
[not found] ` <4B3E570C.2060602@yahoo.es>
0 siblings, 1 reply; 5+ messages in thread
From: Ben Nizette @ 2009-07-02 12:17 UTC (permalink / raw)
To: Haavard Skinnemoen; +Cc: pierre, s.hauer, kernel, linux-kernel
On Thu, 2009-07-02 at 13:58 +0200, Haavard Skinnemoen wrote:
> Ben Nizette wrote:
> > Was recently merged. This is too fast for at least one setup
> > permutation - the one on my desk which through trial and error won't
> > initialise at anything above ~350kHz (older Sandisk 256MB SD on
> > atmel-mci).
>
> What kind of board is this? It sounds a bit like the CMD or DATA0
> pull-up is too weak...
It is a custom board (you'll see the board support soon) but those
pullups are 47k same as NGW100 and STK1000.
'scope confirms all the waveforms are crisp and correct.
>
> Haavard
^ 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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.