Message ID | 20140801060816.GA3172@intel.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
On 1 August 2014 08:08, Chuanxiao Dong <chuanxiao.dong@intel.com> wrote: > Even eMMC card can support 3.3v to 1.2v vccq in DDR, but not all > host controller can support this, like some of the SDHCI host > which connect to an eMMC device. Some of these host controller > still needs to use 1.8v vccq for supporting DDR mode. > > If a host controller cannot support 3.3v for DDR, try 1.8v. > > Signed-off-by: Chuanxiao Dong <chuanxiao.dong@intel.com> > Signed-off-by: Yunpeng Gao <yunpeng.gao@intel.com> > --- > drivers/mmc/core/mmc.c | 19 +++++++++++++++++++ > include/linux/mmc/host.h | 1 + > 2 files changed, 20 insertions(+) > > diff --git a/drivers/mmc/core/mmc.c b/drivers/mmc/core/mmc.c > index 793c6f7..13a5b24 100644 > --- a/drivers/mmc/core/mmc.c > +++ b/drivers/mmc/core/mmc.c > @@ -1000,6 +1000,25 @@ static int mmc_select_hs_ddr(struct mmc_card *card) > return err; > } > > + /* > + * Even eMMC card can support 3.3v to 1.2v vccq, but not all > + * host controller can support this, like some of the SDHCI > + * controller which connect to an eMMC device. Some of these > + * host controller still needs to use 1.8v vccq for supporting > + * DDR mode. > + * > + * If a host controller cannot support 3.3v for DDR, try 1.8v > + */ > + if (unlikely(host->caps2 & MMC_CAP2_NO_3_3V_DDR)) { > + if (card->mmc_avail_type & EXT_CSD_CARD_TYPE_HS200_1_8V) { > + err = __mmc_set_signal_voltage(host, > + MMC_SIGNAL_VOLTAGE_180); > + if (err) > + return err; > + } else > + return -EOPNOTSUPP; > + } I am wondering if we could try an another approach while changing signal voltage for (e)MMC. Simply start by trying with 1.2V, then 1.8V and then 3.3V. Obviously we shouldn't try with something that isn't supported, which card->mmc_avail_type tells us about. I realize that it will mean a change in behaviour and depending on how hosts are handling signal voltage, this is a bit uncertain if it would work. Still I feel it would be the right approach. Can we give at shot? Kind regards Uffe -- To unsubscribe from this list: send the line "unsubscribe linux-mmc" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
DQoNCj4gLS0tLS1PcmlnaW5hbCBNZXNzYWdlLS0tLS0NCj4gRnJvbTogbGludXgtbW1jLW93bmVy QHZnZXIua2VybmVsLm9yZw0KPiBbbWFpbHRvOmxpbnV4LW1tYy1vd25lckB2Z2VyLmtlcm5lbC5v cmddIE9uIEJlaGFsZiBPZiBVbGYgSGFuc3Nvbg0KPiBTZW50OiBUdWVzZGF5LCBBdWd1c3QgMTIs IDIwMTQgOToyMSBQTQ0KPiBUbzogRG9uZywgQ2h1YW54aWFvDQo+IENjOiBsaW51eC1tbWM7IGNo cmlzQHByaW50Zi5vcmc7IEdhbywgWXVucGVuZw0KPiBTdWJqZWN0OiBSZTogW1BBVENIXSBtbWM6 IGNvcmU6IHVzZSAxLjh2IHNpZ25saW5nIGluIGRkciBtb2RlIGZvciBzb21lIHNwZWNpYWwNCj4g aG9zdA0KPiANCj4gT24gMSBBdWd1c3QgMjAxNCAwODowOCwgQ2h1YW54aWFvIERvbmcgPGNodWFu eGlhby5kb25nQGludGVsLmNvbT4gd3JvdGU6DQo+ID4gRXZlbiBlTU1DIGNhcmQgY2FuIHN1cHBv cnQgMy4zdiB0byAxLjJ2IHZjY3EgaW4gRERSLCBidXQgbm90IGFsbCBob3N0DQo+ID4gY29udHJv bGxlciBjYW4gc3VwcG9ydCB0aGlzLCBsaWtlIHNvbWUgb2YgdGhlIFNESENJIGhvc3Qgd2hpY2gg Y29ubmVjdA0KPiA+IHRvIGFuIGVNTUMgZGV2aWNlLiBTb21lIG9mIHRoZXNlIGhvc3QgY29udHJv bGxlciBzdGlsbCBuZWVkcyB0byB1c2UNCj4gPiAxLjh2IHZjY3EgZm9yIHN1cHBvcnRpbmcgRERS IG1vZGUuDQo+ID4NCj4gPiBJZiBhIGhvc3QgY29udHJvbGxlciBjYW5ub3Qgc3VwcG9ydCAzLjN2 IGZvciBERFIsIHRyeSAxLjh2Lg0KPiA+DQo+ID4gU2lnbmVkLW9mZi1ieTogQ2h1YW54aWFvIERv bmcgPGNodWFueGlhby5kb25nQGludGVsLmNvbT4NCj4gPiBTaWduZWQtb2ZmLWJ5OiBZdW5wZW5n IEdhbyA8eXVucGVuZy5nYW9AaW50ZWwuY29tPg0KPiA+IC0tLQ0KPiA+ICBkcml2ZXJzL21tYy9j b3JlL21tYy5jICAgfCAgIDE5ICsrKysrKysrKysrKysrKysrKysNCj4gPiAgaW5jbHVkZS9saW51 eC9tbWMvaG9zdC5oIHwgICAgMSArDQo+ID4gIDIgZmlsZXMgY2hhbmdlZCwgMjAgaW5zZXJ0aW9u cygrKQ0KPiA+DQo+ID4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvbW1jL2NvcmUvbW1jLmMgYi9kcml2 ZXJzL21tYy9jb3JlL21tYy5jIGluZGV4DQo+ID4gNzkzYzZmNy4uMTNhNWIyNCAxMDA2NDQNCj4g PiAtLS0gYS9kcml2ZXJzL21tYy9jb3JlL21tYy5jDQo+ID4gKysrIGIvZHJpdmVycy9tbWMvY29y ZS9tbWMuYw0KPiA+IEBAIC0xMDAwLDYgKzEwMDAsMjUgQEAgc3RhdGljIGludCBtbWNfc2VsZWN0 X2hzX2RkcihzdHJ1Y3QgbW1jX2NhcmQNCj4gKmNhcmQpDQo+ID4gICAgICAgICAgICAgICAgICAg ICAgICAgcmV0dXJuIGVycjsNCj4gPiAgICAgICAgIH0NCj4gPg0KPiA+ICsgICAgICAgLyoNCj4g PiArICAgICAgICAqIEV2ZW4gZU1NQyBjYXJkIGNhbiBzdXBwb3J0IDMuM3YgdG8gMS4ydiB2Y2Nx LCBidXQgbm90IGFsbA0KPiA+ICsgICAgICAgICogaG9zdCBjb250cm9sbGVyIGNhbiBzdXBwb3J0 IHRoaXMsIGxpa2Ugc29tZSBvZiB0aGUgU0RIQ0kNCj4gPiArICAgICAgICAqIGNvbnRyb2xsZXIg d2hpY2ggY29ubmVjdCB0byBhbiBlTU1DIGRldmljZS4gU29tZSBvZiB0aGVzZQ0KPiA+ICsgICAg ICAgICogaG9zdCBjb250cm9sbGVyIHN0aWxsIG5lZWRzIHRvIHVzZSAxLjh2IHZjY3EgZm9yIHN1 cHBvcnRpbmcNCj4gPiArICAgICAgICAqIEREUiBtb2RlLg0KPiA+ICsgICAgICAgICoNCj4gPiAr ICAgICAgICAqIElmIGEgaG9zdCBjb250cm9sbGVyIGNhbm5vdCBzdXBwb3J0IDMuM3YgZm9yIERE UiwgdHJ5IDEuOHYNCj4gPiArICAgICAgICAqLw0KPiA+ICsgICAgICAgaWYgKHVubGlrZWx5KGhv c3QtPmNhcHMyICYgTU1DX0NBUDJfTk9fM18zVl9ERFIpKSB7DQo+ID4gKyAgICAgICAgICAgICAg IGlmIChjYXJkLT5tbWNfYXZhaWxfdHlwZSAmDQo+IEVYVF9DU0RfQ0FSRF9UWVBFX0hTMjAwXzFf OFYpIHsNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICBlcnIgPSBfX21tY19zZXRfc2lnbmFs X3ZvbHRhZ2UoaG9zdCwNCj4gPiArDQo+IE1NQ19TSUdOQUxfVk9MVEFHRV8xODApOw0KPiA+ICsg ICAgICAgICAgICAgICAgICAgICAgIGlmIChlcnIpDQo+ID4gKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICByZXR1cm4gZXJyOw0KPiA+ICsgICAgICAgICAgICAgICB9IGVsc2UNCj4gPiAr ICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gLUVPUE5PVFNVUFA7DQo+ID4gKyAgICAgICB9 DQo+IA0KPiBJIGFtIHdvbmRlcmluZyBpZiB3ZSBjb3VsZCB0cnkgYW4gYW5vdGhlciBhcHByb2Fj aCB3aGlsZSBjaGFuZ2luZyBzaWduYWwNCj4gdm9sdGFnZSBmb3IgKGUpTU1DLiBTaW1wbHkgc3Rh cnQgYnkgdHJ5aW5nIHdpdGggMS4yViwgdGhlbiAxLjhWIGFuZCB0aGVuIDMuM1YuDQo+IE9idmlv dXNseSB3ZSBzaG91bGRuJ3QgdHJ5IHdpdGggc29tZXRoaW5nIHRoYXQgaXNuJ3Qgc3VwcG9ydGVk LCB3aGljaA0KPiBjYXJkLT5tbWNfYXZhaWxfdHlwZSB0ZWxscyB1cyBhYm91dC4NCj4gDQo+IEkg cmVhbGl6ZSB0aGF0IGl0IHdpbGwgbWVhbiBhIGNoYW5nZSBpbiBiZWhhdmlvdXIgYW5kIGRlcGVu ZGluZyBvbiBob3cgaG9zdHMNCj4gYXJlIGhhbmRsaW5nIHNpZ25hbCB2b2x0YWdlLCB0aGlzIGlz IGEgYml0IHVuY2VydGFpbiBpZiBpdCB3b3VsZCB3b3JrLiBTdGlsbCBJIGZlZWwgaXQNCj4gd291 bGQgYmUgdGhlIHJpZ2h0IGFwcHJvYWNoLiBDYW4gd2UgZ2l2ZSBhdCBzaG90Pw0KDQpJIGFncmVl IHdpdGggeW91LiBBY3R1YWxseSB0aGlzIGlzIGFsc28gb3V0IG9yaWdpbmFsIGFwcHJvYWNoLiA6 KSBHaXZlbiBpdCB3ZSBjYW5ub3QgdGVzdCB0aGlzIGFwcHJvYWNoIG9uIGFsbCBob3N0IGNvbnRy b2xsZXJzLCB0aHVzIGZpbmFsbHkgY2hhbmdlIHRvIGFkZCBhIG5ldyBDQVAgaXMgdG8gYXZvaWQg aW1wYWN0aW5nIG90aGVyIGhvc3QgY29udHJvbGxlcnMuDQoNCkkgY2FuIHBvc3QgYSB2MiBwYXRj aCB0byBpbXBsZW1lbnQgdGhpcyBJTyBzaWduYWwgdm9sdGFnZSBjaGFuZ2luZyBzZXF1ZW5jZSBm b3IgcmV2aWV3Lg0KDQpUaGFua3MNCkNodWFueGlhbw0KDQo+IA0KPiBLaW5kIHJlZ2FyZHMNCj4g VWZmZQ0KPiAtLQ0KPiBUbyB1bnN1YnNjcmliZSBmcm9tIHRoaXMgbGlzdDogc2VuZCB0aGUgbGlu ZSAidW5zdWJzY3JpYmUgbGludXgtbW1jIiBpbiB0aGUgYm9keQ0KPiBvZiBhIG1lc3NhZ2UgdG8g bWFqb3Jkb21vQHZnZXIua2VybmVsLm9yZyBNb3JlIG1ham9yZG9tbyBpbmZvIGF0DQo+IGh0dHA6 Ly92Z2VyLmtlcm5lbC5vcmcvbWFqb3Jkb21vLWluZm8uaHRtbA0K -- To unsubscribe from this list: send the line "unsubscribe linux-mmc" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
diff --git a/drivers/mmc/core/mmc.c b/drivers/mmc/core/mmc.c index 793c6f7..13a5b24 100644 --- a/drivers/mmc/core/mmc.c +++ b/drivers/mmc/core/mmc.c @@ -1000,6 +1000,25 @@ static int mmc_select_hs_ddr(struct mmc_card *card) return err; } + /* + * Even eMMC card can support 3.3v to 1.2v vccq, but not all + * host controller can support this, like some of the SDHCI + * controller which connect to an eMMC device. Some of these + * host controller still needs to use 1.8v vccq for supporting + * DDR mode. + * + * If a host controller cannot support 3.3v for DDR, try 1.8v + */ + if (unlikely(host->caps2 & MMC_CAP2_NO_3_3V_DDR)) { + if (card->mmc_avail_type & EXT_CSD_CARD_TYPE_HS200_1_8V) { + err = __mmc_set_signal_voltage(host, + MMC_SIGNAL_VOLTAGE_180); + if (err) + return err; + } else + return -EOPNOTSUPP; + } + mmc_set_timing(host, MMC_TIMING_MMC_DDR52); return err; diff --git a/include/linux/mmc/host.h b/include/linux/mmc/host.h index 7960424..e5d3ada 100644 --- a/include/linux/mmc/host.h +++ b/include/linux/mmc/host.h @@ -283,6 +283,7 @@ struct mmc_host { #define MMC_CAP2_HS400 (MMC_CAP2_HS400_1_8V | \ MMC_CAP2_HS400_1_2V) #define MMC_CAP2_SDIO_IRQ_NOTHREAD (1 << 17) +#define MMC_CAP2_NO_3_3V_DDR (1 << 18) /* doesn't support 3.3v vccq in ddr */ mmc_pm_flag_t pm_caps; /* supported pm features */