2009-07-01 23:51:02

by Ben Nizette

[permalink] [raw]
Subject: [PATCH] MMC Core: Drop initialization frequency floor to 50kHz

Patch

commit 8dfd0374be84793360db7fff2e635d2cd3bbcb21
Author: Sascha Hauer <[email protected]>
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 <[email protected]>
---
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);


2009-07-02 07:18:27

by Pierre Ossman

[permalink] [raw]
Subject: Re: [PATCH] MMC Core: Drop initialization frequency floor to 50kHz

On Thu, 02 Jul 2009 09:49:56 +1000
Ben Nizette <[email protected]> wrote:

> Patch
>
> commit 8dfd0374be84793360db7fff2e635d2cd3bbcb21
> Author: Sascha Hauer <[email protected]>
> 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 <[email protected]>
> ---

50 kHz seems very low. I'd be more comfortable if we deviate from
specified behaviour as little as possible, say 300 kHz. Has anyone
checked what USB readers use?

And have you confirmed that the card is actually getting 350 kHz when
it fails? Perhaps there is a bug that is causing it to actually run at
a higher frequency.

> 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);
>

I like getting that warning for too fast controllers. It makes it
easier to spot possible problems.

Rgds
--
-- Pierre Ossman

WARNING: This correspondence is being monitored by the
Swedish government. Make sure your server uses encryption
for SMTP traffic and consider using PGP for end-to-end
encryption.


Attachments:
signature.asc (198.00 B)

2009-07-02 11:11:56

by Ben Nizette

[permalink] [raw]
Subject: Re: [PATCH] MMC Core: Drop initialization frequency floor to 50kHz

On Thu, 2009-07-02 at 09:18 +0200, Pierre Ossman wrote:

>
> 50 kHz seems very low. I'd be more comfortable if we deviate from
> specified behaviour as little as possible, say 300 kHz. Has anyone
> checked what USB readers use?

Before this patch my controller used ~135kHz, I was just basing the
floor off that. If the spec says 400 and this is just to work around
broken cards then sure, 300kHz sounds a good plan.

>
> And have you confirmed that the card is actually getting 350 kHz when
> it fails? Perhaps there is a bug that is causing it to actually run at
> a higher frequency.

'scope confirmed that when 400kHz is requested my controller is giving
the card ~397kHz.

>
> > 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);
> >
>
> I like getting that warning for too fast controllers. It makes it
> easier to spot possible problems.

For sure, it's just that if the floor is 50kHz then pretty much /every/
controller is a 'fast' controller and the warning's redundant. If you
just drop the 400k to 300k, I agree the warning's a good thing to have.

Cheers,
--Ben.

>
> Rgds

2009-07-02 11:59:30

by Haavard Skinnemoen

[permalink] [raw]
Subject: Re: [PATCH] MMC Core: Drop initialization frequency floor to 50kHz

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

2009-07-02 12:18:41

by Ben Nizette

[permalink] [raw]
Subject: Re: [PATCH] MMC Core: Drop initialization frequency floor to 50kHz

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