* eSDHC controller driver on MPC8308rdb
@ 2010-10-14 14:42 Maria Johansen
2010-10-18 8:27 ` Tonyliu
0 siblings, 1 reply; 6+ messages in thread
From: Maria Johansen @ 2010-10-14 14:42 UTC (permalink / raw)
To: linuxppc-dev
SGVsbG8sDQooYXBvbG9naWVzIGZvciB3cml0aW5nIHN1Y2ggYSBsb25nIGUtbWFpbCwgaG9wZSB5
b3UgY2FuIGJvdGhlciB0byByZWFkIGl0IGFsbCDimLogKQ0KSSBoYXZlIHNvbWUgZGlmZmljdWx0
aWVzIHdpdGggdGhlIGVTREhDIGNvbnRyb2xsZXIgZHJpdmVyIHVzZWQgb24gYSBNUEM4MzA4IGV2
YWx1YXRpb24gYm9hcmQgd2l0aCBrZXJuZWwgMi42LjM2LXJjNywgYW5kIGhvcGUgdGhhdCBzb21l
IG9mIHlvdSBtYXkgYmUgYWJsZSB0byBoZWxwIG1lIHdpdGggdGhlIGRlYnVnZ2luZy4gDQoNClRo
ZSBkcml2ZXIgaXMgbG9hZGVkIHByb3Blcmx5LCBhbmQgYmluZHMgdG8gdGhlIGVTREhDIGNvbnRy
b2xsZXIgd2l0aG91dCBwcm9ibGVtcy4gV2hlbiBpbnNlcnRpbmcgYSBzZC1jYXJkIGl0IGlzIGJv
dW5kIHRvIHRoZSAgbW1jYmxrLWRyaXZlciwgc28gbm8gcHJvYmxlbXMgdGhlcmUgZWl0aGVyLiAg
DQoNCkhvd2V2ZXIsIEkgYW0gbm90IGFibGUgdG8gcmVhZCBub3Igd3JpdGUgdG8gdGhlIGNhcmQs
IEkgaGF2ZSBhdHRhY2hlZCBvdXRwdXQgd2l0aCBlcnJvciBtZXNzYWdlcyBiZWxvdzoNCg0KKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0K
bW1jMDogbmV3IFNESEMgY2FyZCBhdCBhZGRyZXNzIDkxNTUNCm1tY2JsazA6IG1tYzA6OTE1NSBT
RDA0RyAzLjY5IEdpQg0KbW1jMDogVG9vIGxhcmdlIHRpbWVvdXQgcmVxdWVzdGVkIQ0KbW1jYmxr
MDogcmV0cnlpbmcgdXNpbmcgc2luZ2xlIGJsb2NrIHJlYWQNCm1tYzA6IFRvbyBsYXJnZSB0aW1l
b3V0IHJlcXVlc3RlZCENCm1tY2JsazA6IGVycm9yIC04NCBzZW5kaW5nIHN0YXR1cyBjb21hbmQN
Cm1tY2JsazA6IGVycm9yIC0xMTAgc2VuZGluZyByZWFkL3dyaXRlIGNvbW1hbmQsIHJlc3BvbnNl
IDB4MCwgY2FyZCBzdGF0dXMgMHgwDQplbmRfcmVxdWVzdDogSS9PIGVycm9yLCBkZXYgbW1jYmxr
MCwgc2VjdG9yIDANCm1tYzA6IFRvbyBsYXJnZSB0aW1lb3V0IHJlcXVlc3RlZCENCm1tY2JsazA6
IGVycm9yIC04NCBzZW5kaW5nIHN0YXR1cyBjb21hbmQNCm1tY2JsazA6IGVycm9yIC0xMTAgc2Vu
ZGluZyByZWFkL3dyaXRlIGNvbW1hbmQsIHJlc3BvbnNlIDB4MCwgY2FyZCBzdGF0dXMgMHgwDQpl
bmRfcmVxdWVzdDogSS9PIGVycm9yLCBkZXYgbW1jYmxrMCwgc2VjdG9yIDENCuKApi4uPHRoaXMg
Y29udGludWVzIHVwIHRvIHNlY3RvciA3IGJlZm9yZSBzdGFydGluZyBhbmV3Pg0KDQpEZWJ1ZyBv
dXRwdXQgd2l0aCBubyBTRC1jYXJkOg0KKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKg0KbW1jMDogY2xvY2sgMEh6IGJ1c21vZGUgMSBwb3dl
cm1vZGUgMSBjcyAwIFZkZCAyMCB3aWR0aCAwIHRpbWluZyAwDQptbWMwOiBjbG9jayA0MDAwMDBI
eiBidXNtb2RlIDEgcG93ZXJtb2RlIDIgY3MgMCBWZGQgMjAgd2lkdGggMCB0aW1pbmcgMA0Kb2Y6
c2RoY2ktb2YgZTAwMmUwMDAuc2RoY2k6IGRlc2lyZWQgU0QgY2xvY2s6IDQwMDAwMCwgYWN0dWFs
OiAwDQptbWMwOiBzdGFydGluZyBDTUQ1MiBhcmcgMDAwMDBjMDAgZmxhZ3MgMDAwMDAxOTUNCnNk
aGNpIFtzZGhjaV9pcnEoKV06ICoqKiBtbWMwIGdvdCBpbnRlcnJ1cHQ6IDB4MDAwMTAwMDENCm1t
YzA6IHJlcSBkb25lIChDTUQ1Mik6IC0xMTA6IDAwMDAwMDAwIDAwMDAwMDAwIDAwMDAwMDAwIDAw
MDAwMDAwDQptbWMwOiBzdGFydGluZyBDTUQ1MiBhcmcgODAwMDBjMDggZmxhZ3MgMDAwMDAxOTUN
CnNkaGNpIFtzZGhjaV9pcnEoKV06ICoqKiBtbWMwIGdvdCBpbnRlcnJ1cHQ6IDB4MDAwMTAwMDEN
Cm1tYzA6IHJlcSBkb25lIChDTUQ1Mik6IC0xMTA6IDAwMDAwMDAwIDAwMDAwMDAwIDAwMDAwMDAw
IDAwMDAwMDAwDQptbWMwOiBjbG9jayA0MDAwMDBIeiBidXNtb2RlIDEgcG93ZXJtb2RlIDIgY3Mg
MSBWZGQgMjAgd2lkdGggMCB0aW1pbmcgMA0KbW1jMDogc3RhcnRpbmcgQ01EMCBhcmcgMDAwMDAw
MDAgZmxhZ3MgMDAwMDAwYzANCnNkaGNpIFtzZGhjaV9pcnEoKV06ICoqKiBtbWMwIGdvdCBpbnRl
cnJ1cHQ6IDB4MDAwMDAwMDENCm1tYzA6IHJlcSBkb25lIChDTUQwKTogMDogMDAwMDAwMDAgMDAw
MDAwMDAgMDAwMDAwMDAgMDAwMDAwMDANCm1tYzA6IGNsb2NrIDQwMDAwMEh6IGJ1c21vZGUgMSBw
b3dlcm1vZGUgMiBjcyAwIFZkZCAyMCB3aWR0aCAwIHRpbWluZyAwDQptbWMwOiBzdGFydGluZyBD
TUQ4IGFyZyAwMDAwMDFhYSBmbGFncyAwMDAwMDJmNQ0Kc2RoY2kgW3NkaGNpX2lycSgpXTogKioq
IG1tYzAgZ290IGludGVycnVwdDogMHgwMDAxMDAwMQ0KbW1jMDogcmVxIGRvbmUgKENNRDgpOiAt
MTEwOiAwMDAwMDAwMCAwMDAwMDAwMCAwMDAwMDAwMCAwMDAwMDAwMA0KbW1jMDogc3RhcnRpbmcg
Q01ENSBhcmcgMDAwMDAwMDAgZmxhZ3MgMDAwMDAyZTENCnNkaGNpIFtzZGhjaV9pcnEoKV06ICoq
KiBtbWMwIGdvdCBpbnRlcnJ1cHQ6IDB4MDAwMTAwMDENCm1tYzA6IHJlcSBmYWlsZWQgKENNRDUp
OiAtMTEwLCByZXRyeWluZy4uLg0Kc2RoY2kgW3NkaGNpX2lycSgpXTogKioqIG1tYzAgZ290IGlu
dGVycnVwdDogMHgwMDAxMDAwMQ0KbW1jMDogcmVxIGZhaWxlZCAoQ01ENSk6IC0xMTAsIHJldHJ5
aW5nLi4uDQpzZGhjaSBbc2RoY2lfaXJxKCldOiAqKiogbW1jMCBnb3QgaW50ZXJydXB0OiAweDAw
MDEwMDAxDQptbWMwOiByZXEgZmFpbGVkIChDTUQ1KTogLTExMCwgcmV0cnlpbmcuLi4NCuKApg0K
DQpJIGhhdmUgdGhlIGZvbGxvd2luZyBpbiBteSBkdHM6DQogICAgICAgc2RoY2lAMmUwMDAgew0K
CQljb21wYXRpYmxlID0gImZzbCxtcGM4MzA4LWVzZGhjIiwgImZzbCxlc2RoYyI7DQoJCXJlZyA9
IDwweDJlMDAwIDB4MTAwMD47DQoJCWludGVycnVwdHMgPSA8NDIgMHg4PjsNCgkJaW50ZXJydXB0
LXBhcmVudCA9IDwmaXBpYz47DQoJCWNsb2NrLWZyZXF1ZW5jeSA9IDwwPjsNCgl9Ow0KDQoNCkNv
dWxkIHRoaXMgYmUgYSBwcm9ibGVtIHJlbGF0ZWQgdGhlIGVTREhDIGNvbnRyb2xsZXIgKG9yIHRo
ZSBkcml2ZXIpLCBvciBpcyBpdCB0aGUgbWVtb3J5IGNhcmQ/IChhIDRHQiBTYW5EaXNrIEV4dHJl
bWUgU0RIQyBjYXJkLCB3aGljaCB1bmZvcnR1bmF0ZWx5IGlzIHRoZSBvbmx5IGNhcmQgSSBoYXZl
IGF2YWlsYWJsZSBhdCB0aGUgbW9tZW50LikNCkkgd2lsbCBrZWVwIGRpZ2dpbmcgaW50byBkcml2
ZXJzL21tYy9ob3N0L3NkaGNpLmMgaW4gc2VhcmNoIG9mIGEgc29sdXRpb24sIGFuZCBhbnkgdGlw
cyB0byBob3cgSSBzaG91bGQgcHJvY2VlZCB3b3VsZCBiZSBncmVhdGx5IGFwcHJlY2lhdGVkIQ0K
DQotLQ0KTWFyaWEgDQo=
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: eSDHC controller driver on MPC8308rdb
2010-10-14 14:42 eSDHC controller driver on MPC8308rdb Maria Johansen
@ 2010-10-18 8:27 ` Tonyliu
2010-10-19 7:26 ` Maria Johansen
0 siblings, 1 reply; 6+ messages in thread
From: Tonyliu @ 2010-10-18 8:27 UTC (permalink / raw)
To: Maria Johansen; +Cc: linuxppc-dev
[-- Attachment #1: Type: text/plain, Size: 4088 bytes --]
Maria Johansen wrote:
> Hello,
> (apologies for writing such a long e-mail, hope you can bother to read it all ☺ )
> I have some difficulties with the eSDHC controller driver used on a MPC8308 evaluation board with kernel 2.6.36-rc7, and hope that some of you may be able to help me with the debugging.
>
> The driver is loaded properly, and binds to the eSDHC controller without problems. When inserting a sd-card it is bound to the mmcblk-driver, so no problems there either.
>
> However, I am not able to read nor write to the card, I have attached output with error messages below:
>
> **********************************************************
> mmc0: new SDHC card at address 9155
> mmcblk0: mmc0:9155 SD04G 3.69 GiB
> mmc0: Too large timeout requested!
> mmcblk0: retrying using single block read
> mmc0: Too large timeout requested!
> mmcblk0: error -84 sending status comand
> mmcblk0: error -110 sending read/write command, response 0x0, card status 0x0
> end_request: I/O error, dev mmcblk0, sector 0
> mmc0: Too large timeout requested!
> mmcblk0: error -84 sending status comand
> mmcblk0: error -110 sending read/write command, response 0x0, card status 0x0
> end_request: I/O error, dev mmcblk0, sector 1
> …..<this continues up to sector 7 before starting anew>
>
> Debug output with no SD-card:
> **********************************************************
> mmc0: clock 0Hz busmode 1 powermode 1 cs 0 Vdd 20 width 0 timing 0
> mmc0: clock 400000Hz busmode 1 powermode 2 cs 0 Vdd 20 width 0 timing 0
> of:sdhci-of e002e000.sdhci: desired SD clock: 400000, actual: 0
> mmc0: starting CMD52 arg 00000c00 flags 00000195
> sdhci [sdhci_irq()]: *** mmc0 got interrupt: 0x00010001
> mmc0: req done (CMD52): -110: 00000000 00000000 00000000 00000000
> mmc0: starting CMD52 arg 80000c08 flags 00000195
> sdhci [sdhci_irq()]: *** mmc0 got interrupt: 0x00010001
> mmc0: req done (CMD52): -110: 00000000 00000000 00000000 00000000
> mmc0: clock 400000Hz busmode 1 powermode 2 cs 1 Vdd 20 width 0 timing 0
> mmc0: starting CMD0 arg 00000000 flags 000000c0
> sdhci [sdhci_irq()]: *** mmc0 got interrupt: 0x00000001
> mmc0: req done (CMD0): 0: 00000000 00000000 00000000 00000000
> mmc0: clock 400000Hz busmode 1 powermode 2 cs 0 Vdd 20 width 0 timing 0
> mmc0: starting CMD8 arg 000001aa flags 000002f5
> sdhci [sdhci_irq()]: *** mmc0 got interrupt: 0x00010001
> mmc0: req done (CMD8): -110: 00000000 00000000 00000000 00000000
> mmc0: starting CMD5 arg 00000000 flags 000002e1
> sdhci [sdhci_irq()]: *** mmc0 got interrupt: 0x00010001
> mmc0: req failed (CMD5): -110, retrying...
> sdhci [sdhci_irq()]: *** mmc0 got interrupt: 0x00010001
> mmc0: req failed (CMD5): -110, retrying...
> sdhci [sdhci_irq()]: *** mmc0 got interrupt: 0x00010001
> mmc0: req failed (CMD5): -110, retrying...
> …
>
> I have the following in my dts:
> sdhci@2e000 {
> compatible = "fsl,mpc8308-esdhc", "fsl,esdhc";
> reg = <0x2e000 0x1000>;
> interrupts = <42 0x8>;
> interrupt-parent = <&ipic>;
> clock-frequency = <0>;
> };
>
>
> Could this be a problem related the eSDHC controller (or the driver), or is it the memory card? (a 4GB SanDisk Extreme SDHC card, which unfortunately is the only card I have available at the moment.)
> I will keep digging into drivers/mmc/host/sdhci.c in search of a solution, and any tips to how I should proceed would be greatly appreciated!
>
Hi,
Try the patch in attatchment. By default, on some e300 platforms such as
mpc8308_rdb, the entry "clock-frequency" of section sdchi in DTB is not
fixed by u-boot, so has to caculate the input clock for sdhci controller
explicitly in driver.
Tony
> --
> Maria
> _______________________________________________
> Linuxppc-dev mailing list
> Linuxppc-dev@lists.ozlabs.org
> https://lists.ozlabs.org/listinfo/linuxppc-dev
--
Tony Liu | Liu Bo
-------------------------------------------------------------
WIND RIVER | China Development Center
Tel: 86-10-8477-8542 ext: 8542 | Fax: 86-10-64790367
(M): 86-136-7117-3612
Address: 15/F, Wangjing TowerB, Chaoyang District, Beijing, P.R.China
[-- Attachment #2: 0001-esdhci-fix-clock-frequency-for-e300.patch --]
[-- Type: text/x-patch, Size: 2123 bytes --]
>From 02dcd667389aa5143a43d245ac5ecc1559a956ed Mon Sep 17 00:00:00 2001
From: Tonyliu <Bo.Liu@windriver.com>
Date: Mon, 18 Oct 2010 16:24:21 +0800
Subject: [PATCH] esdhci: fix clock-frequency for e300
The DTB clock-frequency property of esdhci is not fixed in u-boot by default for most
e300 platforms.So has to caculate the input clock frequency explicitly from CPU's
bus-frequency property.
Signed-off-by: Tonyliu <Bo.Liu@windriver.com>
---
drivers/mmc/host/sdhci-of-core.c | 43 ++++++++++++++++++++++++++++++++++++++
1 files changed, 43 insertions(+), 0 deletions(-)
diff --git a/drivers/mmc/host/sdhci-of-core.c b/drivers/mmc/host/sdhci-of-core.c
index c51b711..2a1ef0b 100644
--- a/drivers/mmc/host/sdhci-of-core.c
+++ b/drivers/mmc/host/sdhci-of-core.c
@@ -167,6 +167,49 @@ static int __devinit sdhci_of_probe(struct platform_device *ofdev,
clk = of_get_property(np, "clock-frequency", &size);
if (clk && size == sizeof(*clk) && *clk)
of_host->clock = *clk;
+ else {
+ /* clock frequency of peripherals maybe not fixed by u-boot
+ * on some platforms, then need to find proper clock of
+ * SDHCI controller by CPU's bus frequency.*/
+ struct device_node *cpu;
+
+ cpu = of_find_node_by_type(NULL, "cpu");
+ if (cpu) {
+ unsigned int size;
+ const u32 *prop = of_get_property(cpu, "bus-frequency", &size);
+ of_host->clock = *prop;
+ of_node_put(cpu);
+ } else {
+ ret = -EINVAL;
+ goto err_bad_freq;
+ }
+
+ /*
+ * SDHCI input clock can be scaled against platform bus frequency.
+ */
+ if (of_get_property(np, "sdhci,clk-scale", NULL)) {
+ void __iomem *immap = NULL;
+ unsigned int sdhccm;
+
+ immap = ioremap(get_immrbase(), 0x1000);
+ if (!immap) {
+ ret = -ENOMEM;
+ goto err_bad_freq;
+ }
+
+ sdhccm = (in_be32(immap + SDHCI_SCCR_OFFS) & SDHCI_SDHCCM_MASK)
+ >> SDHCI_SDHCCM_SHIFT;
+
+ iounmap(immap);
+
+ if (sdhccm == 0) {
+ printk(KERN_ERR "The eSDHC clock was disable!\n");
+ ret = -EBADSLT;
+ goto err_bad_freq;
+ } else
+ of_host->clock /= sdhccm;
+ }
+ }
ret = sdhci_add_host(host);
if (ret)
--
1.6.0.4
^ permalink raw reply related [flat|nested] 6+ messages in thread
* RE: eSDHC controller driver on MPC8308rdb
2010-10-18 8:27 ` Tonyliu
@ 2010-10-19 7:26 ` Maria Johansen
2010-10-19 7:55 ` Tonyliu
0 siblings, 1 reply; 6+ messages in thread
From: Maria Johansen @ 2010-10-19 7:26 UTC (permalink / raw)
To: Bo.Liu; +Cc: linuxppc-dev
DQoNCj4tLS0tLU9yaWdpbmFsIE1lc3NhZ2UtLS0tLQ0KPkZyb206IFRvbnlsaXUgW21haWx0bzpC
by5MaXVAd2luZHJpdmVyLmNvbV0gDQo+PHNuaXA+DQo+PiBDb3VsZCB0aGlzIGJlIGEgcHJvYmxl
bSByZWxhdGVkIHRoZSBlU0RIQyBjb250cm9sbGVyIChvciB0aGUgZHJpdmVyKSwgDQo+PiBvciBp
cyBpdCB0aGUgbWVtb3J5IGNhcmQ/IChhIDRHQiBTYW5EaXNrIEV4dHJlbWUgU0RIQyBjYXJkLCB3
aGljaCB1bmZvcnR1bmF0ZWx5IGlzIHRoZSBvbmx5IGNhcmQgSSBoYXZlIGF2YWlsYWJsZSBhdCB0
aGUgbW9tZW50LikgSSB3aWxsIGtlZXAgZGlnZ2luZyBpbnRvIGRyaXZlcnMvbW1jL2hvc3Qvc2Ro
Y2kuYyBpbiBzZWFyY2ggb2YgYSBzb2x1dGlvbiwgYW5kIGFueSB0aXBzIHRvIGhvdyBJIHNob3Vs
ZCBwcm9jZWVkIHdvdWxkIGJlIGdyZWF0bHkgYXBwcmVjaWF0ZWQhDQo+PiAgIA0KPkhpLA0KPlRy
eSB0aGUgcGF0Y2ggaW4gYXR0YXRjaG1lbnQuIEJ5IGRlZmF1bHQsIG9uIHNvbWUgZTMwMCBwbGF0
Zm9ybXMgc3VjaCBhcyBtcGM4MzA4X3JkYiwgdGhlIGVudHJ5ICJjbG9jay1mcmVxdWVuY3kiIG9m
IHNlY3Rpb24gc2RjaGkgaW4gRFRCIGlzIG5vdCBmaXhlZCBieSB1LWJvb3QsIHNvIGhhcyB0byA+
Y2FjdWxhdGUgdGhlIGlucHV0IGNsb2NrIGZvciBzZGhjaSBjb250cm9sbGVyIGV4cGxpY2l0bHkg
aW4gZHJpdmVyLg0KPg0KPlRvbnkNCg0KVGhhbmtzLCB0aGUgbWlzc2luZyBjbG9jay1mcmVxdWVu
Y3kgd2FzIHBhcnQgb2YgbXkgcHJvYmxlbS4gVGhlIHJlc3Qgd2FzIHNvbHZlZCBieSBhZGRpbmcg
c29tZSBtb3JlIHF1aXJrcyB0byB0aGUgZXNkaGMtZHJpdmVyIChTREhDSV9RVUlSS19GT1JDRV8x
X0JJVF9EQVRBIGFuZCBTREhDSV9RVUlSS19SRVNFVF9BRlRFUl9SRVFVRVNUKS4gV2h5IGl0IGlz
IG5lY2Vzc2FyeSB0byBmb3JjZSAxLWJpdCBkYXRhIHRyYW5zZmVycyBJIGFtIGEgYml0IHVuc3Vy
ZSBhYm91dCwgc2luY2UgdGhlIG1wYzgzMDggcmVmZXJlbmNlIG1hbnVhbCBjbGVhcmx5IHN0YXRl
cyB0aGF0IDQtYml0IHRyYW5zZmVycyBhcmUgc3VwcG9ydGVkLg0KDQpUaGFua3MgZm9yIHlvdXIg
aGVscCA6KQ0KDQotLQ0KTWFyaWENCg0KDQoNCg0K
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: eSDHC controller driver on MPC8308rdb
2010-10-19 7:26 ` Maria Johansen
@ 2010-10-19 7:55 ` Tonyliu
2010-10-19 8:09 ` Zang Roy-R61911
2010-10-19 8:49 ` Maria Johansen
0 siblings, 2 replies; 6+ messages in thread
From: Tonyliu @ 2010-10-19 7:55 UTC (permalink / raw)
To: Maria Johansen; +Cc: linuxppc-dev
Maria Johansen wrote:
>
>> -----Original Message-----
>> From: Tonyliu [mailto:Bo.Liu@windriver.com]
>> <snip>
>>
>>> Could this be a problem related the eSDHC controller (or the driver),
>>> or is it the memory card? (a 4GB SanDisk Extreme SDHC card, which unfortunately is the only card I have available at the moment.) I will keep digging into drivers/mmc/host/sdhci.c in search of a solution, and any tips to how I should proceed would be greatly appreciated!
>>>
>>>
>> Hi,
>> Try the patch in attatchment. By default, on some e300 platforms such as mpc8308_rdb, the entry "clock-frequency" of section sdchi in DTB is not fixed by u-boot, so has to >caculate the input clock for sdhci controller explicitly in driver.
>>
>> Tony
>>
>
> Thanks, the missing clock-frequency was part of my problem. The rest was solved by adding some more quirks to the esdhc-driver (SDHCI_QUIRK_FORCE_1_BIT_DATA and SDHCI_QUIRK_RESET_AFTER_REQUEST). Why it is necessary to force 1-bit data transfers I am a bit unsure about, since the mpc8308 reference manual clearly states that 4-bit transfers are supported.
>
Actually, I did use 4-bit mode. You can try another 2 quicks:
+ if (of_get_property(np, "sdhci,auto-cmd12", NULL))
+ host->quirks |= SDHCI_QUIRK_MULTIBLOCK_READ_ACMD12;
+
+ if (of_get_property(np, "sdhci,broken-timeout", NULL))
+ host->quirks |= SDHCI_QUIRK_BROKEN_TIMEOUT_VAL;
+
===================================================
diff --git a/drivers/mmc/host/sdhci.c b/drivers/mmc/host/sdhci.c
index 9d4fdfa..b7a1ce4 100644
--- a/drivers/mmc/host/sdhci.c
+++ b/drivers/mmc/host/sdhci.c
@@ -807,8 +807,12 @@ static void sdhci_set_transfer_mode(struct
sdhci_host *host,
WARN_ON(!host->data);
mode = SDHCI_TRNS_BLK_CNT_EN;
- if (data->blocks > 1)
+ if (data->blocks > 1) {
+ if (host->quirks & SDHCI_QUIRK_MULTIBLOCK_READ_ACMD12)
+ mode |= SDHCI_TRNS_MULTI | SDHCI_TRNS_ACMD12;
+ else
mode |= SDHCI_TRNS_MULTI;
+ }
if (data->flags & MMC_DATA_READ)
mode |= SDHCI_TRNS_READ;
if (host->flags & SDHCI_REQ_USE_DMA)
@@ -1099,6 +1103,13 @@ static void sdhci_request(struct mmc_host *mmc,
struct mmc_request *mrq)
sdhci_activate_led(host);
#endif
+ if (host->quirks & SDHCI_QUIRK_MULTIBLOCK_READ_ACMD12) {
+ if (mrq->stop) {
+ mrq->data->stop = NULL;
+ mrq->stop = NULL;
+ }
+ }
+
host->mrq = mrq;
I don't have patch for upstream, you can add them manually.
Tony
> Thanks for your help :)
>
> --
> Maria
>
>
>
>
>
^ permalink raw reply related [flat|nested] 6+ messages in thread
* RE: eSDHC controller driver on MPC8308rdb
2010-10-19 7:55 ` Tonyliu
@ 2010-10-19 8:09 ` Zang Roy-R61911
2010-10-19 8:49 ` Maria Johansen
1 sibling, 0 replies; 6+ messages in thread
From: Zang Roy-R61911 @ 2010-10-19 8:09 UTC (permalink / raw)
To: Bo.Liu, Maria Johansen; +Cc: linuxppc-dev
> -----Original Message-----
> From: =
linuxppc-dev-bounces+tie-fei.zang=3Dfreescale.com@lists.ozlabs.org
>
[mailto:linuxppc-dev-bounces+tie-fei.zang=3Dfreescale.com@lists.ozlabs.or=
g
] On
> Behalf Of Tonyliu
> Sent: Tuesday, October 19, 2010 15:56 PM
> To: Maria Johansen
> Cc: linuxppc-dev@lists.ozlabs.org
> Subject: Re: eSDHC controller driver on MPC8308rdb
>=20
> Maria Johansen wrote:
> >
> >> -----Original Message-----
> >> From: Tonyliu [mailto:Bo.Liu@windriver.com]
> >> <snip>
> >>
> >>> Could this be a problem related the eSDHC controller (or the
driver),
> >>> or is it the memory card? (a 4GB SanDisk Extreme SDHC card, which
> unfortunately is the only card I have available at the moment.) I will
keep
> digging into drivers/mmc/host/sdhci.c in search of a solution, and any
tips to
> how I should proceed would be greatly appreciated!
> >>>
> >>>
> >> Hi,
> >> Try the patch in attatchment. By default, on some e300 platforms
such as
> mpc8308_rdb, the entry "clock-frequency" of section sdchi in DTB is
not fixed
> by u-boot, so has to >caculate the input clock for sdhci controller
explicitly
> in driver.
> >>
> >> Tony
> >>
> >
> > Thanks, the missing clock-frequency was part of my problem. The rest
was
> solved by adding some more quirks to the esdhc-driver
> (SDHCI_QUIRK_FORCE_1_BIT_DATA and SDHCI_QUIRK_RESET_AFTER_REQUEST).
Why it is
> necessary to force 1-bit data transfers I am a bit unsure about, since
the
> mpc8308 reference manual clearly states that 4-bit transfers are
supported.
> >
> Actually, I did use 4-bit mode. You can try another 2 quicks:
>=20
> + if (of_get_property(np, "sdhci,auto-cmd12", NULL))
> + host->quirks |=3D SDHCI_QUIRK_MULTIBLOCK_READ_ACMD12;
> +
> + if (of_get_property(np, "sdhci,broken-timeout", NULL))
> + host->quirks |=3D SDHCI_QUIRK_BROKEN_TIMEOUT_VAL;
> +
>=20
> =
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D
> diff --git a/drivers/mmc/host/sdhci.c b/drivers/mmc/host/sdhci.c
> index 9d4fdfa..b7a1ce4 100644
> --- a/drivers/mmc/host/sdhci.c
> +++ b/drivers/mmc/host/sdhci.c
> @@ -807,8 +807,12 @@ static void sdhci_set_transfer_mode(struct
> sdhci_host *host,
> WARN_ON(!host->data);
>=20
> mode =3D SDHCI_TRNS_BLK_CNT_EN;
> - if (data->blocks > 1)
> + if (data->blocks > 1) {
> + if (host->quirks & SDHCI_QUIRK_MULTIBLOCK_READ_ACMD12)
> + mode |=3D SDHCI_TRNS_MULTI | SDHCI_TRNS_ACMD12;
> + else
> mode |=3D SDHCI_TRNS_MULTI;
> + }
> if (data->flags & MMC_DATA_READ)
> mode |=3D SDHCI_TRNS_READ;
> if (host->flags & SDHCI_REQ_USE_DMA)
> @@ -1099,6 +1103,13 @@ static void sdhci_request(struct mmc_host *mmc,
> struct mmc_request *mrq)
> sdhci_activate_led(host);
> #endif
>=20
> + if (host->quirks & SDHCI_QUIRK_MULTIBLOCK_READ_ACMD12) {
> + if (mrq->stop) {
> + mrq->data->stop =3D NULL;
> + mrq->stop =3D NULL;
> + }
> + }
> +
> host->mrq =3D mrq;
>=20
>=20
> I don't have patch for upstream, you can add them manually.
https://patchwork.kernel.org/patch/176752/
Roy
^ permalink raw reply [flat|nested] 6+ messages in thread
* RE: eSDHC controller driver on MPC8308rdb
2010-10-19 7:55 ` Tonyliu
2010-10-19 8:09 ` Zang Roy-R61911
@ 2010-10-19 8:49 ` Maria Johansen
1 sibling, 0 replies; 6+ messages in thread
From: Maria Johansen @ 2010-10-19 8:49 UTC (permalink / raw)
To: Bo.Liu; +Cc: linuxppc-dev
Pi0tLS0tT3JpZ2luYWwgTWVzc2FnZS0tLS0tDQo+RnJvbTogVG9ueWxpdSBbbWFpbHRvOkJvLkxp
dUB3aW5kcml2ZXIuY29tXSANCj48c25pcD4NCj4+IFRoYW5rcywgdGhlIG1pc3NpbmcgY2xvY2st
ZnJlcXVlbmN5IHdhcyBwYXJ0IG9mIG15IHByb2JsZW0uIFRoZSByZXN0IHdhcyBzb2x2ZWQgYnkg
YWRkaW5nIHNvbWUgbW9yZSBxdWlya3MgdG8gdGhlIGVzZGhjLWRyaXZlciAoU0RIQ0lfUVVJUktf
Rk9SQ0VfMV9CSVRfREFUQSBhbmQgPlNESENJX1FVSVJLX1JFU0VUX0FGVEVSX1JFUVVFU1QpLiBX
aHkgaXQgaXMgbmVjZXNzYXJ5IHRvIGZvcmNlIDEtYml0IGRhdGEgdHJhbnNmZXJzIEkgYW0gYSBi
aXQgdW5zdXJlIGFib3V0LCBzaW5jZSB0aGUgbXBjODMwOCByZWZlcmVuY2UgbWFudWFsIGNsZWFy
bHkgc3RhdGVzIHRoYXQgNC1iaXQgPnRyYW5zZmVycyBhcmUgc3VwcG9ydGVkLg0KPj4gICANCj5B
Y3R1YWxseSwgSSBkaWQgdXNlIDQtYml0IG1vZGUuIFlvdSBjYW4gdHJ5IGFub3RoZXIgMiBxdWlj
a3M6DQo+DQo+KyAgIGlmIChvZl9nZXRfcHJvcGVydHkobnAsICJzZGhjaSxhdXRvLWNtZDEyIiwg
TlVMTCkpDQo+KyAgICAgICBob3N0LT5xdWlya3MgfD0gU0RIQ0lfUVVJUktfTVVMVElCTE9DS19S
RUFEX0FDTUQxMjsNCj4rDQo+KyAgIGlmIChvZl9nZXRfcHJvcGVydHkobnAsICJzZGhjaSxicm9r
ZW4tdGltZW91dCIsIE5VTEwpKQ0KPisgICAgICAgaG9zdC0+cXVpcmtzIHw9IFNESENJX1FVSVJL
X0JST0tFTl9USU1FT1VUX1ZBTDsNCj4rDQo+DQoNClNESENJX1FVSVJLX01VTFRJQkxPQ0tfUkVB
RF9BQ01EMTIgd29ya2VkICh3aXRoIG15IG90aGVyIHF1aXJrcyBkaXNhYmxlZCksIHRoYW5rcyEN
Cg0KLS0NCk1hcmlhDQo=
^ permalink raw reply [flat|nested] 6+ messages in thread
end of thread, other threads:[~2010-10-19 8:49 UTC | newest]
Thread overview: 6+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2010-10-14 14:42 eSDHC controller driver on MPC8308rdb Maria Johansen
2010-10-18 8:27 ` Tonyliu
2010-10-19 7:26 ` Maria Johansen
2010-10-19 7:55 ` Tonyliu
2010-10-19 8:09 ` Zang Roy-R61911
2010-10-19 8:49 ` Maria Johansen
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).