From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S932708AbdDQIgJ (ORCPT ); Mon, 17 Apr 2017 04:36:09 -0400 Received: from mailgw01.mediatek.com ([218.249.47.110]:39793 "EHLO mailgw01.mediatek.com" rhost-flags-OK-FAIL-OK-FAIL) by vger.kernel.org with ESMTP id S1751894AbdDQIgF (ORCPT ); Mon, 17 Apr 2017 04:36:05 -0400 From: =?utf-8?B?SmlhamllIEhhbyAo6YOd5Yqg6IqCKQ==?= To: =?utf-8?B?SmlhamllIEhhbyAo6YOd5Yqg6IqCKQ==?= , "ulf.hansson@linaro.org" CC: "linus.walleij@linaro.org" , =?utf-8?B?Q2hhb3RpYW4gSmluZyAo5LqV5pyd5aSpKQ==?= , =?utf-8?B?WW9uZyBNYW8gKOavm+WLhyk=?= , =?utf-8?B?RWRkaWUgSHVhbmcgKOm7g+aZuuWCkSk=?= , srv_heupstream , "linux-mmc@vger.kernel.org" , "linux-kernel@vger.kernel.org" , "linux-mediatek@lists.infradead.org" , "linux-arm-kernel@lists.infradead.org" Subject: =?utf-8?B?562U5aSNOiBbUEFUQ0hdIG1tYzogc2RpbzogRml4IHNkaW8gd2FpdCBidXN5?= =?utf-8?Q?_implement_limitation?= Thread-Topic: [PATCH] mmc: sdio: Fix sdio wait busy implement limitation Thread-Index: AQHSt1IO3VSSkbDjP0W49y+eBslnXqHJOhwA Date: Mon, 17 Apr 2017 08:36:00 +0000 Message-ID: <013a85cdb0434870bfaeadf08373af97@MTKMBS31N1.mediatek.inc> References: <1492416571-28843-1-git-send-email-jiajie.hao@mediatek.com> <1492416571-28843-2-git-send-email-jiajie.hao@mediatek.com> In-Reply-To: <1492416571-28843-2-git-send-email-jiajie.hao@mediatek.com> Accept-Language: zh-CN, en-US Content-Language: zh-CN X-MS-Has-Attach: X-MS-TNEF-Correlator: x-ms-exchange-transport-fromentityheader: Hosted x-originating-ip: [172.27.5.250] Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Transfer-Encoding: 8bit X-MIME-Autoconverted: from base64 to 8bit by mail.home.local id v3H8aDlX002193 CC: linux-arm-kernel Many thanks Jiajie. -----邮件原件----- 发件人: jiajie.hao@mediatek.com [mailto:jiajie.hao@mediatek.com] 发送时间: 2017年4月17日 16:10 收件人: ulf.hansson@linaro.org 抄送: linus.walleij@linaro.org; Chaotian Jing (井朝天) ; Yong Mao (毛勇) ; Eddie Huang (黃智傑) ; srv_heupstream ; linux-mmc@vger.kernel.org; linux-kernel@vger.kernel.org; linux-mediatek@lists.infradead.org; linux-arm-kernel@mediatek.com; Jiajie Hao (郝加节) 主题: [PATCH] mmc: sdio: Fix sdio wait busy implement limitation From: Jiajie Hao The host may issue an I/O abort by writing to the CCCR at any time during I/O read operation via CMD52. And host may need suspend transcation during write busy stage in SDIO suspend/resume scenario. >>From other side, a card may accept CMD52 during data transfer phase. Previous implement would block issuing above command in busy stage. It cause function driver can't implement as proper way and has no opportunity to do some coverage in error case via I/O abort etc. We need bypass some necessary operation during busy check stage. Change-Id: Ib5a4599a2a98cbcf441b564f5f6fbb10c8a59e1b Signed-off-by: Jiajie Hao --- drivers/mmc/core/core.c | 4 +++- drivers/mmc/core/sdio_ops.h | 10 ++++++++++ 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/drivers/mmc/core/core.c b/drivers/mmc/core/core.c index 926e0fd..9c9a4bc 100644 --- a/drivers/mmc/core/core.c +++ b/drivers/mmc/core/core.c @@ -234,8 +234,10 @@ static void __mmc_start_request(struct mmc_host *host, struct mmc_request *mrq) /* * For sdio rw commands we must wait for card busy otherwise some * sdio devices won't work properly. + * And bypass I/O abort, reset and bus suspend operations. */ - if (mmc_is_io_op(mrq->cmd->opcode) && host->ops->card_busy) { + if (mmc_is_io_op(mrq->cmd->opcode) && host->ops->card_busy && + !mmc_is_io_bypass(mrq->cmd->opcode, mrq->cmd->arg)) { int tries = 500; /* Wait aprox 500ms at maximum */ while (host->ops->card_busy(host) && --tries) diff --git a/drivers/mmc/core/sdio_ops.h b/drivers/mmc/core/sdio_ops.h index bed8a83..9896696 100644 --- a/drivers/mmc/core/sdio_ops.h +++ b/drivers/mmc/core/sdio_ops.h @@ -31,5 +31,15 @@ static inline bool mmc_is_io_op(u32 opcode) return opcode == SD_IO_RW_DIRECT || opcode == SD_IO_RW_EXTENDED; } +static inline bool mmc_is_io_bypass(u32 opcode, u32 arg) { + u32 addr; + + addr = (arg >> 9) & 0x1FFFF; + + return ((opcode == SD_IO_RW_DIRECT) && + (addr == SDIO_CCCR_ABORT || addr == SDIO_CCCR_SUSPEND)); } + #endif -- 1.7.9.5 From mboxrd@z Thu Jan 1 00:00:00 1970 From: =?utf-8?B?SmlhamllIEhhbyAo6YOd5Yqg6IqCKQ==?= Subject: =?utf-8?B?562U5aSNOiBbUEFUQ0hdIG1tYzogc2RpbzogRml4IHNkaW8gd2FpdCBidXN5?= =?utf-8?Q?_implement_limitation?= Date: Mon, 17 Apr 2017 08:36:00 +0000 Message-ID: <013a85cdb0434870bfaeadf08373af97@MTKMBS31N1.mediatek.inc> References: <1492416571-28843-1-git-send-email-jiajie.hao@mediatek.com> <1492416571-28843-2-git-send-email-jiajie.hao@mediatek.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <1492416571-28843-2-git-send-email-jiajie.hao@mediatek.com> Content-Language: zh-CN Sender: linux-kernel-owner@vger.kernel.org To: =?utf-8?B?SmlhamllIEhhbyAo6YOd5Yqg6IqCKQ==?= , "ulf.hansson@linaro.org" Cc: "linus.walleij@linaro.org" , =?utf-8?B?Q2hhb3RpYW4gSmluZyAo5LqV5pyd5aSpKQ==?= , =?utf-8?B?WW9uZyBNYW8gKOavm+WLhyk=?= , =?utf-8?B?RWRkaWUgSHVhbmcgKOm7g+aZuuWCkSk=?= , srv_heupstream , "linux-mmc@vger.kernel.org" , "linux-kernel@vger.kernel.org" , "linux-mediatek@lists.infradead.org" , "linux-arm-kernel@lists.infradead.org" List-Id: linux-mmc@vger.kernel.org Q0M6IGxpbnV4LWFybS1rZXJuZWwNCg0KDQpNYW55IHRoYW5rcw0KSmlhamllLg0KDQotLS0tLemC ruS7tuWOn+S7ti0tLS0tDQrlj5Hku7bkuro6IGppYWppZS5oYW9AbWVkaWF0ZWsuY29tIFttYWls dG86amlhamllLmhhb0BtZWRpYXRlay5jb21dIA0K5Y+R6YCB5pe26Ze0OiAyMDE35bm0NOaciDE3 5pelIDE2OjEwDQrmlLbku7bkuro6IHVsZi5oYW5zc29uQGxpbmFyby5vcmcNCuaKhOmAgTogbGlu dXMud2FsbGVpakBsaW5hcm8ub3JnOyBDaGFvdGlhbiBKaW5nICjkupXmnJ3lpKkpIDxDaGFvdGlh bi5KaW5nQG1lZGlhdGVrLmNvbT47IFlvbmcgTWFvICjmr5vli4cpIDx5b25nLm1hb0BtZWRpYXRl ay5jb20+OyBFZGRpZSBIdWFuZyAo6buD5pm65YKRKSA8ZWRkaWUuaHVhbmdAbWVkaWF0ZWsuY29t Pjsgc3J2X2hldXBzdHJlYW0gPHNydl9oZXVwc3RyZWFtQG1lZGlhdGVrLmNvbT47IGxpbnV4LW1t Y0B2Z2VyLmtlcm5lbC5vcmc7IGxpbnV4LWtlcm5lbEB2Z2VyLmtlcm5lbC5vcmc7IGxpbnV4LW1l ZGlhdGVrQGxpc3RzLmluZnJhZGVhZC5vcmc7IGxpbnV4LWFybS1rZXJuZWxAbWVkaWF0ZWsuY29t OyBKaWFqaWUgSGFvICjpg53liqDoioIpIDxqaWFqaWUuaGFvQG1lZGlhdGVrLmNvbT4NCuS4u+mi mDogW1BBVENIXSBtbWM6IHNkaW86IEZpeCBzZGlvIHdhaXQgYnVzeSBpbXBsZW1lbnQgbGltaXRh dGlvbg0KDQpGcm9tOiBKaWFqaWUgSGFvIDxqaWFqaWUuaGFvQG1lZGlhdGVrLmNvbT4NCg0KVGhl IGhvc3QgbWF5IGlzc3VlIGFuIEkvTyBhYm9ydCBieSB3cml0aW5nIHRvIHRoZSBDQ0NSIGF0IGFu eSB0aW1lIGR1cmluZyBJL08gcmVhZCBvcGVyYXRpb24gdmlhIENNRDUyLiBBbmQgaG9zdCBtYXkg bmVlZCBzdXNwZW5kIHRyYW5zY2F0aW9uIGR1cmluZyB3cml0ZSBidXN5IHN0YWdlIGluIFNESU8g c3VzcGVuZC9yZXN1bWUgc2NlbmFyaW8uDQpGcm9tIG90aGVyIHNpZGUsIGEgY2FyZCBtYXkgYWNj ZXB0IENNRDUyIGR1cmluZyBkYXRhIHRyYW5zZmVyIHBoYXNlLg0KDQpQcmV2aW91cyBpbXBsZW1l bnQgd291bGQgYmxvY2sgaXNzdWluZyBhYm92ZSBjb21tYW5kIGluIGJ1c3kgc3RhZ2UuDQpJdCBj YXVzZSBmdW5jdGlvbiBkcml2ZXIgY2FuJ3QgaW1wbGVtZW50IGFzIHByb3BlciB3YXkgYW5kIGhh cyBubyBvcHBvcnR1bml0eSB0byBkbyBzb21lIGNvdmVyYWdlIGluIGVycm9yIGNhc2UgdmlhIEkv TyBhYm9ydCBldGMuDQoNCldlIG5lZWQgYnlwYXNzIHNvbWUgbmVjZXNzYXJ5IG9wZXJhdGlvbiBk dXJpbmcgYnVzeSBjaGVjayBzdGFnZS4NCg0KQ2hhbmdlLUlkOiBJYjVhNDU5OWEyYTk4Y2JjZjQ0 MWI1NjRmNWY2ZmJiMTBjOGE1OWUxYg0KU2lnbmVkLW9mZi1ieTogSmlhamllIEhhbyA8amlhamll Lmhhb0BtZWRpYXRlay5jb20+DQotLS0NCiBkcml2ZXJzL21tYy9jb3JlL2NvcmUuYyAgICAgfCAg ICA0ICsrKy0NCiBkcml2ZXJzL21tYy9jb3JlL3NkaW9fb3BzLmggfCAgIDEwICsrKysrKysrKysN CiAyIGZpbGVzIGNoYW5nZWQsIDEzIGluc2VydGlvbnMoKyksIDEgZGVsZXRpb24oLSkNCg0KZGlm ZiAtLWdpdCBhL2RyaXZlcnMvbW1jL2NvcmUvY29yZS5jIGIvZHJpdmVycy9tbWMvY29yZS9jb3Jl LmMgaW5kZXggOTI2ZTBmZC4uOWM5YTRiYyAxMDA2NDQNCi0tLSBhL2RyaXZlcnMvbW1jL2NvcmUv Y29yZS5jDQorKysgYi9kcml2ZXJzL21tYy9jb3JlL2NvcmUuYw0KQEAgLTIzNCw4ICsyMzQsMTAg QEAgc3RhdGljIHZvaWQgX19tbWNfc3RhcnRfcmVxdWVzdChzdHJ1Y3QgbW1jX2hvc3QgKmhvc3Qs IHN0cnVjdCBtbWNfcmVxdWVzdCAqbXJxKQ0KIAkvKg0KIAkgKiBGb3Igc2RpbyBydyBjb21tYW5k cyB3ZSBtdXN0IHdhaXQgZm9yIGNhcmQgYnVzeSBvdGhlcndpc2Ugc29tZQ0KIAkgKiBzZGlvIGRl dmljZXMgd29uJ3Qgd29yayBwcm9wZXJseS4NCisJICogQW5kIGJ5cGFzcyBJL08gYWJvcnQsIHJl c2V0IGFuZCBidXMgc3VzcGVuZCBvcGVyYXRpb25zLg0KIAkgKi8NCi0JaWYgKG1tY19pc19pb19v cChtcnEtPmNtZC0+b3Bjb2RlKSAmJiBob3N0LT5vcHMtPmNhcmRfYnVzeSkgew0KKwlpZiAobW1j X2lzX2lvX29wKG1ycS0+Y21kLT5vcGNvZGUpICYmIGhvc3QtPm9wcy0+Y2FyZF9idXN5ICYmDQor CSAgICAhbW1jX2lzX2lvX2J5cGFzcyhtcnEtPmNtZC0+b3Bjb2RlLCBtcnEtPmNtZC0+YXJnKSkg ew0KIAkJaW50IHRyaWVzID0gNTAwOyAvKiBXYWl0IGFwcm94IDUwMG1zIGF0IG1heGltdW0gKi8N CiANCiAJCXdoaWxlIChob3N0LT5vcHMtPmNhcmRfYnVzeShob3N0KSAmJiAtLXRyaWVzKSBkaWZm IC0tZ2l0IGEvZHJpdmVycy9tbWMvY29yZS9zZGlvX29wcy5oIGIvZHJpdmVycy9tbWMvY29yZS9z ZGlvX29wcy5oIGluZGV4IGJlZDhhODMuLjk4OTY2OTYgMTAwNjQ0DQotLS0gYS9kcml2ZXJzL21t Yy9jb3JlL3NkaW9fb3BzLmgNCisrKyBiL2RyaXZlcnMvbW1jL2NvcmUvc2Rpb19vcHMuaA0KQEAg LTMxLDUgKzMxLDE1IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBtbWNfaXNfaW9fb3AodTMyIG9wY29k ZSkNCiAJcmV0dXJuIG9wY29kZSA9PSBTRF9JT19SV19ESVJFQ1QgfHwgb3Bjb2RlID09IFNEX0lP X1JXX0VYVEVOREVEOyAgfQ0KIA0KK3N0YXRpYyBpbmxpbmUgYm9vbCBtbWNfaXNfaW9fYnlwYXNz KHUzMiBvcGNvZGUsIHUzMiBhcmcpIHsNCisJdTMyIGFkZHI7DQorDQorCWFkZHIgPSAoYXJnID4+ IDkpICYgMHgxRkZGRjsNCisNCisJcmV0dXJuICgob3Bjb2RlID09IFNEX0lPX1JXX0RJUkVDVCkg JiYNCisJCShhZGRyID09IFNESU9fQ0NDUl9BQk9SVCB8fCBhZGRyID09IFNESU9fQ0NDUl9TVVNQ RU5EKSk7IH0NCisNCiAjZW5kaWYNCiANCi0tDQoxLjcuOS41DQoNCg==