* 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).