Skip to contentSkip to conversation

mmc: change initial clock setting

PATCH In review Jaehoon Chung 2 participants 4 messages Jun 18, 2010 – Jun 26, 2010 MMC, SD and SDIO

lore
Share & tools
lore
#0 lore raw

PATCH 1/1 mmc: change initial clock setting

This patch is bug fixed..
I think that host->ios.clock(initial clock) will be set lower than 400KHz.
But in this code, if host->f_min is higher than 400KHz, print warning message and set higher than 400KHz. And We use SDHCI_QUIRK_NONSTANDARD_CLOCK..so using get_min_clock function.
but didn't effect nothing through used get_min_clock function.

---
 drivers/mmc/core/core.c |    4 ++--
 1 files changed, 2 insertions(+), 2 deletions(-)
drivers/mmc/core/core.c +2 -2
index 569e94d..9cd5767 100644
@@ -910,9 +910,9 @@ static void mmc_power_up(struct mmc_host *host)
 	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;
+	} else
+		host->ios.clock = host->f_min;
 
 	host->ios.power_mode = MMC_POWER_ON;
 	mmc_set_ios(host);

-- 1.6.0.4

#1 lore raw
Quoted 5 lines · Jaehoon Chung

This patch is bug fixed..
I think that host->ios.clock(initial clock) will be set lower than 400KHz.
But in this code, if host->f_min is higher than 400KHz, print warning message and set higher than 400KHz. And We use SDHCI_QUIRK_NONSTANDARD_CLOCK..so using get_min_clock function.
but didn't effect nothing through used get_min_clock function.

I'm a little confused. What problem are you fixing with this patch? What issue are you seeing? SDHCI_QUIRK_NONSTANDARD_CLOCK is only for sdhci. If this is the old "my card won't initialise at 400kHz" chestnut I don't think a solution has ever been agreed upon. The problem was that while some cards won't initialise at 400kHz, some controllers will try to initialise at too low a frequency which causes other problems.

Sascha Hauer explains the reason for setting ios.clock to 400kHz here,

       http://lkml.org/lkml/2010/1/5/120

So I think your patch will cause problems.

Which driver are you using? The driver should have set the f_min value to be <= 400kHz. Maybe it is a good idea to set the value of ios.clock to 400kHz if the driver has set a bogus f_min value, we will at least have a fighting chance of initialising the card (though I would say that the driver was broken, but at least core.c will print a warning).

#2 lore raw
Quoted 18 lines · Matt Fleming
Quoted 5 lines · Jaehoon Chung

This patch is bug fixed..
I think that host->ios.clock(initial clock) will be set lower than 400KHz.
But in this code, if host->f_min is higher than 400KHz, print warning message and set higher than 400KHz. And We use SDHCI_QUIRK_NONSTANDARD_CLOCK..so using get_min_clock function.
but didn't effect nothing through used get_min_clock function.

I'm a little confused. What problem are you fixing with this patch? What issue are you seeing? SDHCI_QUIRK_NONSTANDARD_CLOCK is only for sdhci. If this is the old "my card won't initialise at 400kHz" chestnut I don't think a solution has ever been agreed upon. The problem was that while some cards won't initialise at 400kHz, some controllers will try to initialise at too low a frequency which causes other problems.

Sascha Hauer explains the reason for setting ios.clock to 400kHz here,

       http://lkml.org/lkml/2010/1/5/120
Quoted 8 lines

So I think your patch will cause problems.

Which driver are you using? The driver should have set the f_min value to be <= 400kHz. Maybe it is a good idea to set the value of ios.clock to 400kHz if the driver has set a bogus f_min value, we will at least have a fighting chance of initialising the card (though I would say that the driver was broken, but at least core.c will print a warning).

when ios.clock is higher than 400KHz, why not change 400KHz?(if 400KHz seemed like good value) if clock value is higher than 400KHz, i think card can't initialize...maybe

when sdhci controller set f_min value(ie, 300KHz), clock changed 400KHz in core.c. just this code purpose to print warning message?

#3 lore raw
Quoted 28 lines · Jaehoon Chung
Quoted 18 lines · Matt Fleming
Quoted 5 lines · Jaehoon Chung

This patch is bug fixed..
I think that host->ios.clock(initial clock) will be set lower than 400KHz.
But in this code, if host->f_min is higher than 400KHz, print warning message and set higher than 400KHz. And We use SDHCI_QUIRK_NONSTANDARD_CLOCK..so using get_min_clock function.
but didn't effect nothing through used get_min_clock function.

I'm a little confused. What problem are you fixing with this patch? What issue are you seeing? SDHCI_QUIRK_NONSTANDARD_CLOCK is only for sdhci. If this is the old "my card won't initialise at 400kHz" chestnut I don't think a solution has ever been agreed upon. The problem was that while some cards won't initialise at 400kHz, some controllers will try to initialise at too low a frequency which causes other problems.

Sascha Hauer explains the reason for setting ios.clock to 400kHz here,

       http://lkml.org/lkml/2010/1/5/120
Quoted 8 lines

So I think your patch will cause problems.

Which driver are you using? The driver should have set the f_min value to be <= 400kHz. Maybe it is a good idea to set the value of ios.clock to 400kHz if the driver has set a bogus f_min value, we will at least have a fighting chance of initialising the card (though I would say that the driver was broken, but at least core.c will print a warning).

Quoted 2 lines

when ios.clock is higher than 400KHz, why not change 400KHz?(if 400KHz seemed like good value) if clock value is higher than 400KHz, i think card can't initialize...maybe

I think this part of your patch is OK.

Quoted 2 lines

when sdhci controller set f_min value(ie, 300KHz), clock changed 400KHz in core.c. just this code purpose to print warning message?

Well, the purpose of the code is to set the clock to 400kHz if the value of f_min is too low, as having a low value can cause some controllers to break.