From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-9.8 required=3.0 tests=DKIM_SIGNED,DKIM_VALID, DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH,MAILING_LIST_MULTI, MIME_BASE64_TEXT,SIGNED_OFF_BY,SPF_HELO_NONE,SPF_PASS,UNPARSEABLE_RELAY, URIBL_BLOCKED,USER_AGENT_GIT autolearn=unavailable autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 9338FC38A2A for ; Fri, 8 May 2020 08:01:42 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 68EF6206B8 for ; Fri, 8 May 2020 08:01:42 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (1024-bit key) header.d=mediatek.com header.i=@mediatek.com header.b="kNt0VfJj" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727867AbgEHIBl (ORCPT ); Fri, 8 May 2020 04:01:41 -0400 Received: from mailgw01.mediatek.com ([210.61.82.183]:40573 "EHLO mailgw01.mediatek.com" rhost-flags-OK-FAIL-OK-FAIL) by vger.kernel.org with ESMTP id S1727779AbgEHIB1 (ORCPT ); Fri, 8 May 2020 04:01:27 -0400 X-UUID: 84aedf673f9c45889d462e63c0677e18-20200508 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=mediatek.com; s=dk; h=Content-Transfer-Encoding:Content-Type:MIME-Version:References:In-Reply-To:Message-ID:Date:Subject:CC:To:From; bh=EOMzRgzKN8B00usW+mufDcnOhtR8Q0n9x+cb1JREZwM=; b=kNt0VfJj09ahGuj+5le5i+6CbEcfMLnL7Vjr7wdVZPoQrm75arz0jJcLZf4BIgbio5SbqtZdzbq9uBs51l0+hxeTQpismfECjMjQYwOCuiM8q+r91P3/kXzm8tiS5EvmGBTIa+s8uSgIyMeB+lhIBkUVmgfizF+wI3xaFPKVvMw=; X-UUID: 84aedf673f9c45889d462e63c0677e18-20200508 Received: from mtkcas07.mediatek.inc [(172.21.101.84)] by mailgw01.mediatek.com (envelope-from ) (Cellopoint E-mail Firewall v4.1.10 Build 0809 with TLS) with ESMTP id 2028886083; Fri, 08 May 2020 16:01:20 +0800 Received: from mtkcas08.mediatek.inc (172.21.101.126) by mtkmbs02n1.mediatek.inc (172.21.101.77) with Microsoft SMTP Server (TLS) id 15.0.1497.2; Fri, 8 May 2020 16:01:18 +0800 Received: from mtksdccf07.mediatek.inc (172.21.84.99) by mtkcas08.mediatek.inc (172.21.101.73) with Microsoft SMTP Server id 15.0.1497.2 via Frontend Transport; Fri, 8 May 2020 16:01:19 +0800 From: Stanley Chu To: , , , , , CC: , , , , , , , , , , , Stanley Chu Subject: [PATCH v8 6/8] scsi: ufs: add LU Dedicated buffer mode support for WriteBooster Date: Fri, 8 May 2020 16:01:13 +0800 Message-ID: <20200508080115.24233-7-stanley.chu@mediatek.com> X-Mailer: git-send-email 2.18.0 In-Reply-To: <20200508080115.24233-1-stanley.chu@mediatek.com> References: <20200508080115.24233-1-stanley.chu@mediatek.com> MIME-Version: 1.0 Content-Type: text/plain X-MTK: N Content-Transfer-Encoding: base64 Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org QWNjb3JkaW5nIHRvIFVGUyBzcGVjaWZpY2F0aW9uLCB0aGVyZSBhcmUgdHdvIFdyaXRlQm9vc3Rl ciBtb2RlIG9mDQpvcGVyYXRpb25zOiAiTFUgZGVkaWNhdGVkIGJ1ZmZlciIgbW9kZSBhbmQgInNo YXJlZCBidWZmZXIiIG1vZGUuDQpJbiB0aGUgIkxVIGRlZGljYXRlZCBidWZmZXIiIG1vZGUsIHRo ZSBXcml0ZUJvb3N0ZXIgQnVmZmVyIGlzDQpkZWRpY2F0ZWQgdG8gYSBsb2dpY2FsIHVuaXQuDQoN CklmIHRoZSBkZXZpY2Ugc3VwcG9ydHMgdGhlICJMVSBkZWRpY2F0ZWQgYnVmZmVyIiBtb2RlLCB0 aGlzIG1vZGUgaXMNCmNvbmZpZ3VyZWQgYnkgc2V0dGluZyBiV3JpdGVCb29zdGVyQnVmZmVyVHlw ZSB0byAwMGguIFRoZSBsb2dpY2FsDQp1bml0IFdyaXRlQm9vc3RlciBCdWZmZXIgc2l6ZSBpcyBj b25maWd1cmVkIGJ5IHNldHRpbmcgdGhlDQpkTFVOdW1Xcml0ZUJvb3N0ZXJCdWZmZXJBbGxvY1Vu aXRzIGZpZWxkIG9mIHRoZSByZWxhdGVkIFVuaXQNCkRlc2NyaXB0b3IuIE9ubHkgYSB2YWx1ZSBn cmVhdGVyIHRoYW4gemVybyBlbmFibGVzIHRoZSBXcml0ZUJvb3N0ZXINCmZlYXR1cmUgaW4gdGhl IGxvZ2ljYWwgdW5pdC4NCg0KTW9kaWZ5IHVmc2hjZF93Yl9wcm9iZSgpIGFzIGFib3ZlIGRlc2Ny aXB0aW9uIHRvIHN1cHBvcnQgTFUgRGVkaWNhdGVkDQpidWZmZXIgbW9kZS4NCg0KTm90ZSB0aGF0 IGFjY29yZGluZyB0byBVRlMgMy4xIHNwZWNpZmljYXRpb24sIHRoZSB2YWxpZCB2YWx1ZSBvZg0K YkRldmljZU1heFdyaXRlQm9vc3RlckxVcyBwYXJhbWV0ZXIgaW4gR2VvbWV0cnkgRGVzY3JpcHRv ciBpcyAxLA0Kd2hpY2ggbWVhbnMgYXQgbW9zdCBvbmUgTFVOIGNhbiBoYXZlIFdyaXRlQm9vc3Rl ciBidWZmZXIgaW4gIkxVDQpkZWRpY2F0ZWQgYnVmZmVyIG1vZGUiLiBUaGVyZWZvcmUgdGhpcyBw YXRjaCBzdXBwb3J0cyBvbmx5IG9uZQ0KTFVOIHdpdGggV3JpdGVCb29zdGVyIGVuYWJsZWQuIEFs bCBXcml0ZUJvb3N0ZXIgcmVsYXRlZCBzeXNmcyBub2Rlcw0KYXJlIHNwZWNpZmljYWxseSBtYXBw ZWQgdG8gdGhlIExVTiB3aXRoIFdyaXRlQm9vc3RlciBlbmFibGVkIGluDQpMVSBEZWRpY2F0ZWQg YnVmZmVyIG1vZGUuDQoNClNpZ25lZC1vZmYtYnk6IFN0YW5sZXkgQ2h1IDxzdGFubGV5LmNodUBt ZWRpYXRlay5jb20+DQpSZXZpZXdlZC1ieTogQXZyaSBBbHRtYW4gPGF2cmkuYWx0bWFuQHdkYy5j b20+DQpSZXZpZXdlZC1ieTogQmVhbiBIdW8gPGJlYW5odW9AbWljcm9uLmNvbT4NCi0tLQ0KIGRy aXZlcnMvc2NzaS91ZnMvdWZzLXN5c2ZzLmMgfCAxMSArKysrKysrLQ0KIGRyaXZlcnMvc2NzaS91 ZnMvdWZzLmggICAgICAgfCAxMCArKysrKysrKw0KIGRyaXZlcnMvc2NzaS91ZnMvdWZzaGNkLmMg ICAgfCA1MCArKysrKysrKysrKysrKysrKysrKysrKysrKysrLS0tLS0tLS0NCiBkcml2ZXJzL3Nj c2kvdWZzL3Vmc2hjZC5oICAgIHwgIDcgKysrKysNCiA0IGZpbGVzIGNoYW5nZWQsIDY2IGluc2Vy dGlvbnMoKyksIDEyIGRlbGV0aW9ucygtKQ0KDQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3Vm cy91ZnMtc3lzZnMuYyBiL2RyaXZlcnMvc2NzaS91ZnMvdWZzLXN5c2ZzLmMNCmluZGV4IGI4NmI2 YTQwZDdlNi4uYTBiMzc2M2UxZGMyIDEwMDY0NA0KLS0tIGEvZHJpdmVycy9zY3NpL3Vmcy91ZnMt c3lzZnMuYw0KKysrIGIvZHJpdmVycy9zY3NpL3Vmcy91ZnMtc3lzZnMuYw0KQEAgLTYyMiwxNiAr NjIyLDI1IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYXR0cmlidXRlX2dyb3VwIHVmc19zeXNmc19z dHJpbmdfZGVzY3JpcHRvcnNfZ3JvdXAgPSB7DQogCS5hdHRycyA9IHVmc19zeXNmc19zdHJpbmdf ZGVzY3JpcHRvcnMsDQogfTsNCiANCitzdGF0aWMgaW5saW5lIGJvb2wgdWZzaGNkX2lzX3diX2Zs YWdzKGVudW0gZmxhZ19pZG4gaWRuKQ0KK3sNCisJcmV0dXJuICgoaWRuID49IFFVRVJZX0ZMQUdf SUROX1dCX0VOKSAmJg0KKwkJKGlkbiA8PSBRVUVSWV9GTEFHX0lETl9XQl9CVUZGX0ZMVVNIX0RV UklOR19ISUJFUk44KSk7DQorfQ0KKw0KICNkZWZpbmUgVUZTX0ZMQUcoX25hbWUsIF91bmFtZSkJ CQkJCQlcDQogc3RhdGljIHNzaXplX3QgX25hbWUjI19zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwJ CQkJXA0KIAlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQkJCVwNCiB7 CQkJCQkJCQkJXA0KIAlib29sIGZsYWc7CQkJCQkJCVwNCisJdTggaW5kZXggPSAwOwkJCQkJCQlc DQogCWludCByZXQ7CQkJCQkJCVwNCiAJc3RydWN0IHVmc19oYmEgKmhiYSA9IGRldl9nZXRfZHJ2 ZGF0YShkZXYpOwkJCVwNCisJaWYgKHVmc2hjZF9pc193Yl9mbGFncyhRVUVSWV9GTEFHX0lETiMj X3VuYW1lKSkJCQlcDQorCQlpbmRleCA9IHVmc2hjZF93Yl9nZXRfZmxhZ19pbmRleChoYmEpOwkJ CVwNCiAJcG1fcnVudGltZV9nZXRfc3luYyhoYmEtPmRldik7CQkJCQlcDQogCXJldCA9IHVmc2hj ZF9xdWVyeV9mbGFnKGhiYSwgVVBJVV9RVUVSWV9PUENPREVfUkVBRF9GTEFHLAlcDQotCQlRVUVS WV9GTEFHX0lETiMjX3VuYW1lLCAwLCAmZmxhZyk7CQkJXA0KKwkJUVVFUllfRkxBR19JRE4jI191 bmFtZSwgaW5kZXgsICZmbGFnKTsJCQlcDQogCXBtX3J1bnRpbWVfcHV0X3N5bmMoaGJhLT5kZXYp OwkJCQkJXA0KIAlpZiAocmV0KQkJCQkJCQlcDQogCQlyZXR1cm4gLUVJTlZBTDsJCQkJCQlcDQpk aWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3Vmcy91ZnMuaCBiL2RyaXZlcnMvc2NzaS91ZnMvdWZz LmgNCmluZGV4IGRhYWM1MDUzYjg1MC4uYjMxMzUzNDRhYjNmIDEwMDY0NA0KLS0tIGEvZHJpdmVy cy9zY3NpL3Vmcy91ZnMuaA0KKysrIGIvZHJpdmVycy9zY3NpL3Vmcy91ZnMuaA0KQEAgLTY0LDYg KzY0LDkgQEANCiAjZGVmaW5lIFVGU19NQVhfTFVOUwkJKFNDU0lfV19MVU5fQkFTRSArIFVGU19V UElVX01BWF9VTklUX05VTV9JRCkNCiAjZGVmaW5lIFVGU19VUElVX1dMVU5fSUQJKDEgPDwgNykN CiANCisvKiBXcml0ZUJvb3N0ZXIgYnVmZmVyIGlzIGF2YWlsYWJsZSBvbmx5IGZvciB0aGUgbG9n aWNhbCB1bml0IGZyb20gMCB0byA3ICovDQorI2RlZmluZSBVRlNfVVBJVV9NQVhfV0JfTFVOX0lE CTgNCisNCiAvKiBXZWxsIGtub3duIGxvZ2ljYWwgdW5pdCBpZCBpbiBMVU4gZmllbGQgb2YgVVBJ VSAqLw0KIGVudW0gew0KIAlVRlNfVVBJVV9SRVBPUlRfTFVOU19XTFVOCT0gMHg4MSwNCkBAIC0z MzAsNiArMzMzLDEyIEBAIGVudW0gaGVhbHRoX2Rlc2NfcGFyYW0gew0KIAlIRUFMVEhfREVTQ19Q QVJBTV9MSUZFX1RJTUVfRVNUX0IJPSAweDQsDQogfTsNCiANCisvKiBXcml0ZUJvb3N0ZXIgYnVm ZmVyIG1vZGUgKi8NCitlbnVtIHsNCisJV0JfQlVGX01PREVfTFVfREVESUNBVEVECT0gMHgwLA0K KwlXQl9CVUZfTU9ERV9TSEFSRUQJCT0gMHgxLA0KK307DQorDQogLyoNCiAgKiBMb2dpY2FsIFVu aXQgV3JpdGUgUHJvdGVjdA0KICAqIDAwaDogTFUgbm90IHdyaXRlIHByb3RlY3RlZA0KQEAgLTU1 OSw2ICs1NjgsNyBAQCBzdHJ1Y3QgdWZzX2Rldl9pbmZvIHsNCiAJYm9vbCBpc19sdV9wb3dlcl9v bl93cDsNCiAJLyogTWF4aW11bSBudW1iZXIgb2YgZ2VuZXJhbCBMVSBzdXBwb3J0ZWQgYnkgdGhl IFVGUyBkZXZpY2UgKi8NCiAJdTggbWF4X2x1X3N1cHBvcnRlZDsNCisJdTggd2JfZGVkaWNhdGVk X2x1Ow0KIAl1MTYgd21hbnVmYWN0dXJlcmlkOw0KIAkvKlVGUyBkZXZpY2UgUHJvZHVjdCBOYW1l ICovDQogCXU4ICptb2RlbDsNCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvdWZzL3Vmc2hjZC5j IGIvZHJpdmVycy9zY3NpL3Vmcy91ZnNoY2QuYw0KaW5kZXggNDA1M2QyNGVhYWZjLi5iNmEwZDc3 ZDQ3YWMgMTAwNjQ0DQotLS0gYS9kcml2ZXJzL3Njc2kvdWZzL3Vmc2hjZC5jDQorKysgYi9kcml2 ZXJzL3Njc2kvdWZzL3Vmc2hjZC5jDQpAQCAtNTIwNSw2ICs1MjA1LDcgQEAgc3RhdGljIGJvb2wg dWZzaGNkX3diX3N1cChzdHJ1Y3QgdWZzX2hiYSAqaGJhKQ0KIHN0YXRpYyBpbnQgdWZzaGNkX3di X2N0cmwoc3RydWN0IHVmc19oYmEgKmhiYSwgYm9vbCBlbmFibGUpDQogew0KIAlpbnQgcmV0Ow0K Kwl1OCBpbmRleDsNCiAJZW51bSBxdWVyeV9vcGNvZGUgb3Bjb2RlOw0KIA0KIAlpZiAoIXVmc2hj ZF93Yl9zdXAoaGJhKSkNCkBAIC01MjE3LDggKzUyMTgsOSBAQCBzdGF0aWMgaW50IHVmc2hjZF93 Yl9jdHJsKHN0cnVjdCB1ZnNfaGJhICpoYmEsIGJvb2wgZW5hYmxlKQ0KIAllbHNlDQogCQlvcGNv ZGUgPSBVUElVX1FVRVJZX09QQ09ERV9DTEVBUl9GTEFHOw0KIA0KKwlpbmRleCA9IHVmc2hjZF93 Yl9nZXRfZmxhZ19pbmRleChoYmEpOw0KIAlyZXQgPSB1ZnNoY2RfcXVlcnlfZmxhZ19yZXRyeSho YmEsIG9wY29kZSwNCi0JCQkJICAgICAgUVVFUllfRkxBR19JRE5fV0JfRU4sIDAsIE5VTEwpOw0K KwkJCQkgICAgICBRVUVSWV9GTEFHX0lETl9XQl9FTiwgaW5kZXgsIE5VTEwpOw0KIAlpZiAocmV0 KSB7DQogCQlkZXZfZXJyKGhiYS0+ZGV2LCAiJXMgd3JpdGUgYm9vc3RlciAlcyBmYWlsZWQgJWRc biIsDQogCQkJX19mdW5jX18sIGVuYWJsZSA/ICJlbmFibGUiIDogImRpc2FibGUiLCByZXQpOw0K QEAgLTUyMzUsMTUgKzUyMzcsMTcgQEAgc3RhdGljIGludCB1ZnNoY2Rfd2JfY3RybChzdHJ1Y3Qg dWZzX2hiYSAqaGJhLCBib29sIGVuYWJsZSkNCiBzdGF0aWMgaW50IHVmc2hjZF93Yl90b2dnbGVf Zmx1c2hfZHVyaW5nX2g4KHN0cnVjdCB1ZnNfaGJhICpoYmEsIGJvb2wgc2V0KQ0KIHsNCiAJaW50 IHZhbDsNCisJdTggaW5kZXg7DQogDQogCWlmIChzZXQpDQogCQl2YWwgPSAgVVBJVV9RVUVSWV9P UENPREVfU0VUX0ZMQUc7DQogCWVsc2UNCiAJCXZhbCA9IFVQSVVfUVVFUllfT1BDT0RFX0NMRUFS X0ZMQUc7DQogDQorCWluZGV4ID0gdWZzaGNkX3diX2dldF9mbGFnX2luZGV4KGhiYSk7DQogCXJl dHVybiB1ZnNoY2RfcXVlcnlfZmxhZ19yZXRyeShoYmEsIHZhbCwNCi0JCQkgICAgICAgUVVFUllf RkxBR19JRE5fV0JfQlVGRl9GTFVTSF9EVVJJTkdfSElCRVJOOCwgMCwNCi0JCQkJICAgICAgIE5V TEwpOw0KKwkJCQlRVUVSWV9GTEFHX0lETl9XQl9CVUZGX0ZMVVNIX0RVUklOR19ISUJFUk44LA0K KwkJCQlpbmRleCwgTlVMTCk7DQogfQ0KIA0KIHN0YXRpYyBpbmxpbmUgdm9pZCB1ZnNoY2Rfd2Jf dG9nZ2xlX2ZsdXNoKHN0cnVjdCB1ZnNfaGJhICpoYmEsIGJvb2wgZW5hYmxlKQ0KQEAgLTUyNTgs MTMgKzUyNjIsMTUgQEAgc3RhdGljIGlubGluZSB2b2lkIHVmc2hjZF93Yl90b2dnbGVfZmx1c2go c3RydWN0IHVmc19oYmEgKmhiYSwgYm9vbCBlbmFibGUpDQogc3RhdGljIGludCB1ZnNoY2Rfd2Jf YnVmX2ZsdXNoX2VuYWJsZShzdHJ1Y3QgdWZzX2hiYSAqaGJhKQ0KIHsNCiAJaW50IHJldDsNCisJ dTggaW5kZXg7DQogDQogCWlmICghdWZzaGNkX3diX3N1cChoYmEpIHx8IGhiYS0+d2JfYnVmX2Zs dXNoX2VuYWJsZWQpDQogCQlyZXR1cm4gMDsNCiANCisJaW5kZXggPSB1ZnNoY2Rfd2JfZ2V0X2Zs YWdfaW5kZXgoaGJhKTsNCiAJcmV0ID0gdWZzaGNkX3F1ZXJ5X2ZsYWdfcmV0cnkoaGJhLCBVUElV X1FVRVJZX09QQ09ERV9TRVRfRkxBRywNCiAJCQkJICAgICAgUVVFUllfRkxBR19JRE5fV0JfQlVG Rl9GTFVTSF9FTiwNCi0JCQkJICAgICAgMCwgTlVMTCk7DQorCQkJCSAgICAgIGluZGV4LCBOVUxM KTsNCiAJaWYgKHJldCkNCiAJCWRldl9lcnIoaGJhLT5kZXYsICIlcyBXQiAtIGJ1ZiBmbHVzaCBl bmFibGUgZmFpbGVkICVkXG4iLA0KIAkJCV9fZnVuY19fLCByZXQpOw0KQEAgLTUyNzgsMTIgKzUy ODQsMTUgQEAgc3RhdGljIGludCB1ZnNoY2Rfd2JfYnVmX2ZsdXNoX2VuYWJsZShzdHJ1Y3QgdWZz X2hiYSAqaGJhKQ0KIHN0YXRpYyBpbnQgdWZzaGNkX3diX2J1Zl9mbHVzaF9kaXNhYmxlKHN0cnVj dCB1ZnNfaGJhICpoYmEpDQogew0KIAlpbnQgcmV0Ow0KKwl1OCBpbmRleDsNCiANCiAJaWYgKCF1 ZnNoY2Rfd2Jfc3VwKGhiYSkgfHwgIWhiYS0+d2JfYnVmX2ZsdXNoX2VuYWJsZWQpDQogCQlyZXR1 cm4gMDsNCiANCisJaW5kZXggPSB1ZnNoY2Rfd2JfZ2V0X2ZsYWdfaW5kZXgoaGJhKTsNCiAJcmV0 ID0gdWZzaGNkX3F1ZXJ5X2ZsYWdfcmV0cnkoaGJhLCBVUElVX1FVRVJZX09QQ09ERV9DTEVBUl9G TEFHLA0KLQkJCQkgICAgICBRVUVSWV9GTEFHX0lETl9XQl9CVUZGX0ZMVVNIX0VOLCAwLCBOVUxM KTsNCisJCQkJICAgICAgUVVFUllfRkxBR19JRE5fV0JfQlVGRl9GTFVTSF9FTiwNCisJCQkJICAg ICAgaW5kZXgsIE5VTEwpOw0KIAlpZiAocmV0KSB7DQogCQlkZXZfd2FybihoYmEtPmRldiwgIiVz OiBXQiAtIGJ1ZiBmbHVzaCBkaXNhYmxlIGZhaWxlZCAlZFxuIiwNCiAJCQkgX19mdW5jX18sIHJl dCk7DQpAQCAtNjgwMiw2ICs2ODExLDkgQEAgc3RhdGljIGludCB1ZnNoY2Rfc2NzaV9hZGRfd2x1 cyhzdHJ1Y3QgdWZzX2hiYSAqaGJhKQ0KIA0KIHN0YXRpYyB2b2lkIHVmc2hjZF93Yl9wcm9iZShz dHJ1Y3QgdWZzX2hiYSAqaGJhLCB1OCAqZGVzY19idWYpDQogew0KKwl1OCBsdW47DQorCXUzMiBk X2x1X3diX2J1Zl9hbGxvYzsNCisNCiAJaWYgKCF1ZnNoY2RfaXNfd2JfYWxsb3dlZChoYmEpKQ0K IAkJcmV0dXJuOw0KIA0KQEAgLTY4MjQsMTYgKzY4MzYsMzIgQEAgc3RhdGljIHZvaWQgdWZzaGNk X3diX3Byb2JlKHN0cnVjdCB1ZnNfaGJhICpoYmEsIHU4ICpkZXNjX2J1ZikNCiAJaGJhLT5kZXZf aW5mby5iX3diX2J1ZmZlcl90eXBlID0NCiAJCWRlc2NfYnVmW0RFVklDRV9ERVNDX1BBUkFNX1dC X1RZUEVdOw0KIA0KLQloYmEtPmRldl9pbmZvLmRfd2JfYWxsb2NfdW5pdHMgPQ0KLQkJZ2V0X3Vu YWxpZ25lZF9iZTMyKGRlc2NfYnVmICsNCi0JCQkJICAgREVWSUNFX0RFU0NfUEFSQU1fV0JfU0hB UkVEX0FMTE9DX1VOSVRTKTsNCiAJaGJhLT5kZXZfaW5mby5iX3ByZXNydl91c3BjX2VuID0NCiAJ CWRlc2NfYnVmW0RFVklDRV9ERVNDX1BBUkFNX1dCX1BSRVNSVl9VU1JTUENfRU5dOw0KIA0KLQlp ZiAoIShoYmEtPmRldl9pbmZvLmJfd2JfYnVmZmVyX3R5cGUgJiYNCi0JICAgICAgaGJhLT5kZXZf aW5mby5kX3diX2FsbG9jX3VuaXRzKSkNCi0JCWdvdG8gd2JfZGlzYWJsZWQ7DQorCWlmIChoYmEt PmRldl9pbmZvLmJfd2JfYnVmZmVyX3R5cGUgPT0gV0JfQlVGX01PREVfU0hBUkVEKSB7DQorCQlo YmEtPmRldl9pbmZvLmRfd2JfYWxsb2NfdW5pdHMgPQ0KKwkJZ2V0X3VuYWxpZ25lZF9iZTMyKGRl c2NfYnVmICsNCisJCQkJICAgREVWSUNFX0RFU0NfUEFSQU1fV0JfU0hBUkVEX0FMTE9DX1VOSVRT KTsNCisJCWlmICghaGJhLT5kZXZfaW5mby5kX3diX2FsbG9jX3VuaXRzKQ0KKwkJCWdvdG8gd2Jf ZGlzYWJsZWQ7DQorCX0gZWxzZSB7DQorCQlmb3IgKGx1biA9IDA7IGx1biA8IFVGU19VUElVX01B WF9XQl9MVU5fSUQ7IGx1bisrKSB7DQorCQkJZF9sdV93Yl9idWZfYWxsb2MgPSAwOw0KKwkJCXVm c2hjZF9yZWFkX3VuaXRfZGVzY19wYXJhbShoYmEsDQorCQkJCQlsdW4sDQorCQkJCQlVTklUX0RF U0NfUEFSQU1fV0JfQlVGX0FMTE9DX1VOSVRTLA0KKwkJCQkJKHU4ICopJmRfbHVfd2JfYnVmX2Fs bG9jLA0KKwkJCQkJc2l6ZW9mKGRfbHVfd2JfYnVmX2FsbG9jKSk7DQorCQkJaWYgKGRfbHVfd2Jf YnVmX2FsbG9jKSB7DQorCQkJCWhiYS0+ZGV2X2luZm8ud2JfZGVkaWNhdGVkX2x1ID0gbHVuOw0K KwkJCQlicmVhazsNCisJCQl9DQorCQl9DQogDQorCQlpZiAoIWRfbHVfd2JfYnVmX2FsbG9jKQ0K KwkJCWdvdG8gd2JfZGlzYWJsZWQ7DQorCX0NCiAJcmV0dXJuOw0KIA0KIHdiX2Rpc2FibGVkOg0K ZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS91ZnMvdWZzaGNkLmggYi9kcml2ZXJzL3Njc2kvdWZz L3Vmc2hjZC5oDQppbmRleCA4MjYyYTQ4ZWI5ZWIuLjIzYTQzNGMwM2MyYSAxMDA2NDQNCi0tLSBh L2RyaXZlcnMvc2NzaS91ZnMvdWZzaGNkLmgNCisrKyBiL2RyaXZlcnMvc2NzaS91ZnMvdWZzaGNk LmgNCkBAIC04NjEsNiArODYxLDEzIEBAIHN0YXRpYyBpbmxpbmUgYm9vbCB1ZnNoY2Rfa2VlcF9h dXRvYmtvcHNfZW5hYmxlZF9leGNlcHRfc3VzcGVuZCgNCiAJcmV0dXJuIGhiYS0+Y2FwcyAmIFVG U0hDRF9DQVBfS0VFUF9BVVRPX0JLT1BTX0VOQUJMRURfRVhDRVBUX1NVU1BFTkQ7DQogfQ0KIA0K K3N0YXRpYyBpbmxpbmUgdTggdWZzaGNkX3diX2dldF9mbGFnX2luZGV4KHN0cnVjdCB1ZnNfaGJh ICpoYmEpDQorew0KKwlpZiAoaGJhLT5kZXZfaW5mby5iX3diX2J1ZmZlcl90eXBlID09IFdCX0JV Rl9NT0RFX0xVX0RFRElDQVRFRCkNCisJCXJldHVybiBoYmEtPmRldl9pbmZvLndiX2RlZGljYXRl ZF9sdTsNCisJcmV0dXJuIDA7DQorfQ0KKw0KIGV4dGVybiBpbnQgdWZzaGNkX3J1bnRpbWVfc3Vz cGVuZChzdHJ1Y3QgdWZzX2hiYSAqaGJhKTsNCiBleHRlcm4gaW50IHVmc2hjZF9ydW50aW1lX3Jl c3VtZShzdHJ1Y3QgdWZzX2hiYSAqaGJhKTsNCiBleHRlcm4gaW50IHVmc2hjZF9ydW50aW1lX2lk bGUoc3RydWN0IHVmc19oYmEgKmhiYSk7DQotLSANCjIuMTguMA0K From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-9.7 required=3.0 tests=DKIMWL_WL_HIGH,DKIM_SIGNED, DKIM_VALID,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH,MAILING_LIST_MULTI, SIGNED_OFF_BY,SPF_HELO_NONE,SPF_PASS,UNPARSEABLE_RELAY,URIBL_BLOCKED, USER_AGENT_GIT autolearn=unavailable autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 38066C38A2A for ; Fri, 8 May 2020 08:02:14 +0000 (UTC) Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id DB3B1206B8 for ; Fri, 8 May 2020 08:02:13 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=lists.infradead.org header.i=@lists.infradead.org header.b="WdcwwdT2"; dkim=fail reason="signature verification failed" (1024-bit key) header.d=mediatek.com header.i=@mediatek.com header.b="kNt0VfJj" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org DB3B1206B8 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=mediatek.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=linux-mediatek-bounces+linux-mediatek=archiver.kernel.org@lists.infradead.org DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20170209; h=Sender: Content-Transfer-Encoding:Content-Type:Cc:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:MIME-Version:References:In-Reply-To: Message-ID:Date:Subject:To:From:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=2cDQPgCZ6aT0Kdpurx5V1GMP245VQPYYNrKPIrhCMJM=; b=WdcwwdT2sfAHn0 wOF+TYJV+X79HEaXuzVk8o6KSZJG9nkUgOoWpxCtckLo4WHhgxSoxekXC9f9kICZTSy7LtiAR+9KR y8kzx37k251IACYJi2HKXYCDQgVq9erPf40fSiYFK+S//qKorrK0gLfeUSXlBMouy2FeFDRyrptge +cZixWCVRSJH8EgVJgRZOzQ+GbSHVR3jd4kFYspc+4TYYG30oiIAiEua7HrN4XvT4AVbwRnSclAb9 v48z5l/9b5zfDzHpNEw2kYeZYsRxpt8F2Gbt1MhXMRIXI9KZ9LaC1LVmjIRR/5lfdT7HjrWF6gl5l 08p3joFCgigpcjcpMXgg==; Received: from localhost ([127.0.0.1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.92.3 #3 (Red Hat Linux)) id 1jWxxJ-000095-3Z; Fri, 08 May 2020 08:02:01 +0000 Received: from mailgw01.mediatek.com ([216.200.240.184]) by bombadil.infradead.org with esmtps (Exim 4.92.3 #3 (Red Hat Linux)) id 1jWxwk-0007wM-4D; Fri, 08 May 2020 08:01:27 +0000 X-UUID: 50b1dec799664946a16db76f647ff193-20200508 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=mediatek.com; s=dk; h=Content-Transfer-Encoding:Content-Type:MIME-Version:References:In-Reply-To:Message-ID:Date:Subject:CC:To:From; bh=EOMzRgzKN8B00usW+mufDcnOhtR8Q0n9x+cb1JREZwM=; b=kNt0VfJj09ahGuj+5le5i+6CbEcfMLnL7Vjr7wdVZPoQrm75arz0jJcLZf4BIgbio5SbqtZdzbq9uBs51l0+hxeTQpismfECjMjQYwOCuiM8q+r91P3/kXzm8tiS5EvmGBTIa+s8uSgIyMeB+lhIBkUVmgfizF+wI3xaFPKVvMw=; X-UUID: 50b1dec799664946a16db76f647ff193-20200508 Received: from mtkcas68.mediatek.inc [(172.29.94.19)] by mailgw01.mediatek.com (envelope-from ) (musrelay.mediatek.com ESMTP with TLS) with ESMTP id 37028291; Fri, 08 May 2020 00:01:17 -0800 Received: from MTKMBS02N1.mediatek.inc (172.21.101.77) by MTKMBS62DR.mediatek.inc (172.29.94.18) with Microsoft SMTP Server (TLS) id 15.0.1497.2; Fri, 8 May 2020 01:01:19 -0700 Received: from mtkcas08.mediatek.inc (172.21.101.126) by mtkmbs02n1.mediatek.inc (172.21.101.77) with Microsoft SMTP Server (TLS) id 15.0.1497.2; Fri, 8 May 2020 16:01:18 +0800 Received: from mtksdccf07.mediatek.inc (172.21.84.99) by mtkcas08.mediatek.inc (172.21.101.73) with Microsoft SMTP Server id 15.0.1497.2 via Frontend Transport; Fri, 8 May 2020 16:01:19 +0800 From: Stanley Chu To: , , , , , Subject: [PATCH v8 6/8] scsi: ufs: add LU Dedicated buffer mode support for WriteBooster Date: Fri, 8 May 2020 16:01:13 +0800 Message-ID: <20200508080115.24233-7-stanley.chu@mediatek.com> X-Mailer: git-send-email 2.18.0 In-Reply-To: <20200508080115.24233-1-stanley.chu@mediatek.com> References: <20200508080115.24233-1-stanley.chu@mediatek.com> MIME-Version: 1.0 X-MTK: N X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20200508_010126_182616_B45AA1EC X-CRM114-Status: GOOD ( 15.16 ) X-BeenThere: linux-mediatek@lists.infradead.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: bvanassche@acm.org, andy.teng@mediatek.com, chun-hung.wu@mediatek.com, kuohong.wang@mediatek.com, linux-kernel@vger.kernel.org, cang@codeaurora.org, linux-mediatek@lists.infradead.org, peter.wang@mediatek.com, matthias.bgg@gmail.com, Stanley Chu , linux-arm-kernel@lists.infradead.org, beanhuo@micron.com Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Sender: "Linux-mediatek" Errors-To: linux-mediatek-bounces+linux-mediatek=archiver.kernel.org@lists.infradead.org According to UFS specification, there are two WriteBooster mode of operations: "LU dedicated buffer" mode and "shared buffer" mode. In the "LU dedicated buffer" mode, the WriteBooster Buffer is dedicated to a logical unit. If the device supports the "LU dedicated buffer" mode, this mode is configured by setting bWriteBoosterBufferType to 00h. The logical unit WriteBooster Buffer size is configured by setting the dLUNumWriteBoosterBufferAllocUnits field of the related Unit Descriptor. Only a value greater than zero enables the WriteBooster feature in the logical unit. Modify ufshcd_wb_probe() as above description to support LU Dedicated buffer mode. Note that according to UFS 3.1 specification, the valid value of bDeviceMaxWriteBoosterLUs parameter in Geometry Descriptor is 1, which means at most one LUN can have WriteBooster buffer in "LU dedicated buffer mode". Therefore this patch supports only one LUN with WriteBooster enabled. All WriteBooster related sysfs nodes are specifically mapped to the LUN with WriteBooster enabled in LU Dedicated buffer mode. Signed-off-by: Stanley Chu Reviewed-by: Avri Altman Reviewed-by: Bean Huo --- drivers/scsi/ufs/ufs-sysfs.c | 11 +++++++- drivers/scsi/ufs/ufs.h | 10 ++++++++ drivers/scsi/ufs/ufshcd.c | 50 ++++++++++++++++++++++++++++-------- drivers/scsi/ufs/ufshcd.h | 7 +++++ 4 files changed, 66 insertions(+), 12 deletions(-) diff --git a/drivers/scsi/ufs/ufs-sysfs.c b/drivers/scsi/ufs/ufs-sysfs.c index b86b6a40d7e6..a0b3763e1dc2 100644 --- a/drivers/scsi/ufs/ufs-sysfs.c +++ b/drivers/scsi/ufs/ufs-sysfs.c @@ -622,16 +622,25 @@ static const struct attribute_group ufs_sysfs_string_descriptors_group = { .attrs = ufs_sysfs_string_descriptors, }; +static inline bool ufshcd_is_wb_flags(enum flag_idn idn) +{ + return ((idn >= QUERY_FLAG_IDN_WB_EN) && + (idn <= QUERY_FLAG_IDN_WB_BUFF_FLUSH_DURING_HIBERN8)); +} + #define UFS_FLAG(_name, _uname) \ static ssize_t _name##_show(struct device *dev, \ struct device_attribute *attr, char *buf) \ { \ bool flag; \ + u8 index = 0; \ int ret; \ struct ufs_hba *hba = dev_get_drvdata(dev); \ + if (ufshcd_is_wb_flags(QUERY_FLAG_IDN##_uname)) \ + index = ufshcd_wb_get_flag_index(hba); \ pm_runtime_get_sync(hba->dev); \ ret = ufshcd_query_flag(hba, UPIU_QUERY_OPCODE_READ_FLAG, \ - QUERY_FLAG_IDN##_uname, 0, &flag); \ + QUERY_FLAG_IDN##_uname, index, &flag); \ pm_runtime_put_sync(hba->dev); \ if (ret) \ return -EINVAL; \ diff --git a/drivers/scsi/ufs/ufs.h b/drivers/scsi/ufs/ufs.h index daac5053b850..b3135344ab3f 100644 --- a/drivers/scsi/ufs/ufs.h +++ b/drivers/scsi/ufs/ufs.h @@ -64,6 +64,9 @@ #define UFS_MAX_LUNS (SCSI_W_LUN_BASE + UFS_UPIU_MAX_UNIT_NUM_ID) #define UFS_UPIU_WLUN_ID (1 << 7) +/* WriteBooster buffer is available only for the logical unit from 0 to 7 */ +#define UFS_UPIU_MAX_WB_LUN_ID 8 + /* Well known logical unit id in LUN field of UPIU */ enum { UFS_UPIU_REPORT_LUNS_WLUN = 0x81, @@ -330,6 +333,12 @@ enum health_desc_param { HEALTH_DESC_PARAM_LIFE_TIME_EST_B = 0x4, }; +/* WriteBooster buffer mode */ +enum { + WB_BUF_MODE_LU_DEDICATED = 0x0, + WB_BUF_MODE_SHARED = 0x1, +}; + /* * Logical Unit Write Protect * 00h: LU not write protected @@ -559,6 +568,7 @@ struct ufs_dev_info { bool is_lu_power_on_wp; /* Maximum number of general LU supported by the UFS device */ u8 max_lu_supported; + u8 wb_dedicated_lu; u16 wmanufacturerid; /*UFS device Product Name */ u8 *model; diff --git a/drivers/scsi/ufs/ufshcd.c b/drivers/scsi/ufs/ufshcd.c index 4053d24eaafc..b6a0d77d47ac 100644 --- a/drivers/scsi/ufs/ufshcd.c +++ b/drivers/scsi/ufs/ufshcd.c @@ -5205,6 +5205,7 @@ static bool ufshcd_wb_sup(struct ufs_hba *hba) static int ufshcd_wb_ctrl(struct ufs_hba *hba, bool enable) { int ret; + u8 index; enum query_opcode opcode; if (!ufshcd_wb_sup(hba)) @@ -5217,8 +5218,9 @@ static int ufshcd_wb_ctrl(struct ufs_hba *hba, bool enable) else opcode = UPIU_QUERY_OPCODE_CLEAR_FLAG; + index = ufshcd_wb_get_flag_index(hba); ret = ufshcd_query_flag_retry(hba, opcode, - QUERY_FLAG_IDN_WB_EN, 0, NULL); + QUERY_FLAG_IDN_WB_EN, index, NULL); if (ret) { dev_err(hba->dev, "%s write booster %s failed %d\n", __func__, enable ? "enable" : "disable", ret); @@ -5235,15 +5237,17 @@ static int ufshcd_wb_ctrl(struct ufs_hba *hba, bool enable) static int ufshcd_wb_toggle_flush_during_h8(struct ufs_hba *hba, bool set) { int val; + u8 index; if (set) val = UPIU_QUERY_OPCODE_SET_FLAG; else val = UPIU_QUERY_OPCODE_CLEAR_FLAG; + index = ufshcd_wb_get_flag_index(hba); return ufshcd_query_flag_retry(hba, val, - QUERY_FLAG_IDN_WB_BUFF_FLUSH_DURING_HIBERN8, 0, - NULL); + QUERY_FLAG_IDN_WB_BUFF_FLUSH_DURING_HIBERN8, + index, NULL); } static inline void ufshcd_wb_toggle_flush(struct ufs_hba *hba, bool enable) @@ -5258,13 +5262,15 @@ static inline void ufshcd_wb_toggle_flush(struct ufs_hba *hba, bool enable) static int ufshcd_wb_buf_flush_enable(struct ufs_hba *hba) { int ret; + u8 index; if (!ufshcd_wb_sup(hba) || hba->wb_buf_flush_enabled) return 0; + index = ufshcd_wb_get_flag_index(hba); ret = ufshcd_query_flag_retry(hba, UPIU_QUERY_OPCODE_SET_FLAG, QUERY_FLAG_IDN_WB_BUFF_FLUSH_EN, - 0, NULL); + index, NULL); if (ret) dev_err(hba->dev, "%s WB - buf flush enable failed %d\n", __func__, ret); @@ -5278,12 +5284,15 @@ static int ufshcd_wb_buf_flush_enable(struct ufs_hba *hba) static int ufshcd_wb_buf_flush_disable(struct ufs_hba *hba) { int ret; + u8 index; if (!ufshcd_wb_sup(hba) || !hba->wb_buf_flush_enabled) return 0; + index = ufshcd_wb_get_flag_index(hba); ret = ufshcd_query_flag_retry(hba, UPIU_QUERY_OPCODE_CLEAR_FLAG, - QUERY_FLAG_IDN_WB_BUFF_FLUSH_EN, 0, NULL); + QUERY_FLAG_IDN_WB_BUFF_FLUSH_EN, + index, NULL); if (ret) { dev_warn(hba->dev, "%s: WB - buf flush disable failed %d\n", __func__, ret); @@ -6802,6 +6811,9 @@ static int ufshcd_scsi_add_wlus(struct ufs_hba *hba) static void ufshcd_wb_probe(struct ufs_hba *hba, u8 *desc_buf) { + u8 lun; + u32 d_lu_wb_buf_alloc; + if (!ufshcd_is_wb_allowed(hba)) return; @@ -6824,16 +6836,32 @@ static void ufshcd_wb_probe(struct ufs_hba *hba, u8 *desc_buf) hba->dev_info.b_wb_buffer_type = desc_buf[DEVICE_DESC_PARAM_WB_TYPE]; - hba->dev_info.d_wb_alloc_units = - get_unaligned_be32(desc_buf + - DEVICE_DESC_PARAM_WB_SHARED_ALLOC_UNITS); hba->dev_info.b_presrv_uspc_en = desc_buf[DEVICE_DESC_PARAM_WB_PRESRV_USRSPC_EN]; - if (!(hba->dev_info.b_wb_buffer_type && - hba->dev_info.d_wb_alloc_units)) - goto wb_disabled; + if (hba->dev_info.b_wb_buffer_type == WB_BUF_MODE_SHARED) { + hba->dev_info.d_wb_alloc_units = + get_unaligned_be32(desc_buf + + DEVICE_DESC_PARAM_WB_SHARED_ALLOC_UNITS); + if (!hba->dev_info.d_wb_alloc_units) + goto wb_disabled; + } else { + for (lun = 0; lun < UFS_UPIU_MAX_WB_LUN_ID; lun++) { + d_lu_wb_buf_alloc = 0; + ufshcd_read_unit_desc_param(hba, + lun, + UNIT_DESC_PARAM_WB_BUF_ALLOC_UNITS, + (u8 *)&d_lu_wb_buf_alloc, + sizeof(d_lu_wb_buf_alloc)); + if (d_lu_wb_buf_alloc) { + hba->dev_info.wb_dedicated_lu = lun; + break; + } + } + if (!d_lu_wb_buf_alloc) + goto wb_disabled; + } return; wb_disabled: diff --git a/drivers/scsi/ufs/ufshcd.h b/drivers/scsi/ufs/ufshcd.h index 8262a48eb9eb..23a434c03c2a 100644 --- a/drivers/scsi/ufs/ufshcd.h +++ b/drivers/scsi/ufs/ufshcd.h @@ -861,6 +861,13 @@ static inline bool ufshcd_keep_autobkops_enabled_except_suspend( return hba->caps & UFSHCD_CAP_KEEP_AUTO_BKOPS_ENABLED_EXCEPT_SUSPEND; } +static inline u8 ufshcd_wb_get_flag_index(struct ufs_hba *hba) +{ + if (hba->dev_info.b_wb_buffer_type == WB_BUF_MODE_LU_DEDICATED) + return hba->dev_info.wb_dedicated_lu; + return 0; +} + extern int ufshcd_runtime_suspend(struct ufs_hba *hba); extern int ufshcd_runtime_resume(struct ufs_hba *hba); extern int ufshcd_runtime_idle(struct ufs_hba *hba); -- 2.18.0 _______________________________________________ Linux-mediatek mailing list Linux-mediatek@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-mediatek From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-9.7 required=3.0 tests=DKIMWL_WL_HIGH,DKIM_SIGNED, DKIM_VALID,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH,MAILING_LIST_MULTI, SIGNED_OFF_BY,SPF_HELO_NONE,SPF_PASS,UNPARSEABLE_RELAY,URIBL_BLOCKED, USER_AGENT_GIT autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id A0A92C38A2A for ; Fri, 8 May 2020 08:01:51 +0000 (UTC) Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 59206206B8 for ; Fri, 8 May 2020 08:01:51 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=lists.infradead.org header.i=@lists.infradead.org header.b="Xfylor7k"; dkim=fail reason="signature verification failed" (1024-bit key) header.d=mediatek.com header.i=@mediatek.com header.b="kNt0VfJj" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 59206206B8 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=mediatek.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=linux-arm-kernel-bounces+infradead-linux-arm-kernel=archiver.kernel.org@lists.infradead.org DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20170209; h=Sender: Content-Transfer-Encoding:Content-Type:Cc:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:MIME-Version:References:In-Reply-To: Message-ID:Date:Subject:To:From:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=S/vr/2VcjL3LqPFfsNy07LjNh7TMpWNVSdQ9PS31qDs=; b=Xfylor7keqCtGi y0WzX5nPOX89Xu+VcZe78lsNdf36U/5ITcF6eqVRPWrlASzbBAN4ucaa1wgKWHew0HQIBs6UANgMs yJsnkDxrYfivDv3UK5Ss1sYMMOT/z3vX32uz3vBmmx3POZao7e1yXSeVOYOqeHwxXhCD0l8qmSIUT 1b8vTGHnNCLewZ/a2JetJVXm5/jdmoenA6+ByK8iizC59fIyxPXrjCNAeD6QigteVQUP8PTNHNqY1 O2mShdVBp1WwSuMM7GC2CHpIT9b2sUyDlmTHatnxu0g3rMtd73MCKudQOrF7IcASaYc/uwyY5iBDd lvmTcaywultNwJCmG+YA==; Received: from localhost ([127.0.0.1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.92.3 #3 (Red Hat Linux)) id 1jWxx2-0008Fx-OB; Fri, 08 May 2020 08:01:44 +0000 Received: from mailgw01.mediatek.com ([216.200.240.184]) by bombadil.infradead.org with esmtps (Exim 4.92.3 #3 (Red Hat Linux)) id 1jWxwk-0007wM-4D; Fri, 08 May 2020 08:01:27 +0000 X-UUID: 50b1dec799664946a16db76f647ff193-20200508 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=mediatek.com; s=dk; h=Content-Transfer-Encoding:Content-Type:MIME-Version:References:In-Reply-To:Message-ID:Date:Subject:CC:To:From; bh=EOMzRgzKN8B00usW+mufDcnOhtR8Q0n9x+cb1JREZwM=; b=kNt0VfJj09ahGuj+5le5i+6CbEcfMLnL7Vjr7wdVZPoQrm75arz0jJcLZf4BIgbio5SbqtZdzbq9uBs51l0+hxeTQpismfECjMjQYwOCuiM8q+r91P3/kXzm8tiS5EvmGBTIa+s8uSgIyMeB+lhIBkUVmgfizF+wI3xaFPKVvMw=; X-UUID: 50b1dec799664946a16db76f647ff193-20200508 Received: from mtkcas68.mediatek.inc [(172.29.94.19)] by mailgw01.mediatek.com (envelope-from ) (musrelay.mediatek.com ESMTP with TLS) with ESMTP id 37028291; Fri, 08 May 2020 00:01:17 -0800 Received: from MTKMBS02N1.mediatek.inc (172.21.101.77) by MTKMBS62DR.mediatek.inc (172.29.94.18) with Microsoft SMTP Server (TLS) id 15.0.1497.2; Fri, 8 May 2020 01:01:19 -0700 Received: from mtkcas08.mediatek.inc (172.21.101.126) by mtkmbs02n1.mediatek.inc (172.21.101.77) with Microsoft SMTP Server (TLS) id 15.0.1497.2; Fri, 8 May 2020 16:01:18 +0800 Received: from mtksdccf07.mediatek.inc (172.21.84.99) by mtkcas08.mediatek.inc (172.21.101.73) with Microsoft SMTP Server id 15.0.1497.2 via Frontend Transport; Fri, 8 May 2020 16:01:19 +0800 From: Stanley Chu To: , , , , , Subject: [PATCH v8 6/8] scsi: ufs: add LU Dedicated buffer mode support for WriteBooster Date: Fri, 8 May 2020 16:01:13 +0800 Message-ID: <20200508080115.24233-7-stanley.chu@mediatek.com> X-Mailer: git-send-email 2.18.0 In-Reply-To: <20200508080115.24233-1-stanley.chu@mediatek.com> References: <20200508080115.24233-1-stanley.chu@mediatek.com> MIME-Version: 1.0 X-MTK: N X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20200508_010126_182616_B45AA1EC X-CRM114-Status: GOOD ( 15.16 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: bvanassche@acm.org, andy.teng@mediatek.com, chun-hung.wu@mediatek.com, kuohong.wang@mediatek.com, linux-kernel@vger.kernel.org, cang@codeaurora.org, linux-mediatek@lists.infradead.org, peter.wang@mediatek.com, matthias.bgg@gmail.com, Stanley Chu , linux-arm-kernel@lists.infradead.org, beanhuo@micron.com Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+infradead-linux-arm-kernel=archiver.kernel.org@lists.infradead.org According to UFS specification, there are two WriteBooster mode of operations: "LU dedicated buffer" mode and "shared buffer" mode. In the "LU dedicated buffer" mode, the WriteBooster Buffer is dedicated to a logical unit. If the device supports the "LU dedicated buffer" mode, this mode is configured by setting bWriteBoosterBufferType to 00h. The logical unit WriteBooster Buffer size is configured by setting the dLUNumWriteBoosterBufferAllocUnits field of the related Unit Descriptor. Only a value greater than zero enables the WriteBooster feature in the logical unit. Modify ufshcd_wb_probe() as above description to support LU Dedicated buffer mode. Note that according to UFS 3.1 specification, the valid value of bDeviceMaxWriteBoosterLUs parameter in Geometry Descriptor is 1, which means at most one LUN can have WriteBooster buffer in "LU dedicated buffer mode". Therefore this patch supports only one LUN with WriteBooster enabled. All WriteBooster related sysfs nodes are specifically mapped to the LUN with WriteBooster enabled in LU Dedicated buffer mode. Signed-off-by: Stanley Chu Reviewed-by: Avri Altman Reviewed-by: Bean Huo --- drivers/scsi/ufs/ufs-sysfs.c | 11 +++++++- drivers/scsi/ufs/ufs.h | 10 ++++++++ drivers/scsi/ufs/ufshcd.c | 50 ++++++++++++++++++++++++++++-------- drivers/scsi/ufs/ufshcd.h | 7 +++++ 4 files changed, 66 insertions(+), 12 deletions(-) diff --git a/drivers/scsi/ufs/ufs-sysfs.c b/drivers/scsi/ufs/ufs-sysfs.c index b86b6a40d7e6..a0b3763e1dc2 100644 --- a/drivers/scsi/ufs/ufs-sysfs.c +++ b/drivers/scsi/ufs/ufs-sysfs.c @@ -622,16 +622,25 @@ static const struct attribute_group ufs_sysfs_string_descriptors_group = { .attrs = ufs_sysfs_string_descriptors, }; +static inline bool ufshcd_is_wb_flags(enum flag_idn idn) +{ + return ((idn >= QUERY_FLAG_IDN_WB_EN) && + (idn <= QUERY_FLAG_IDN_WB_BUFF_FLUSH_DURING_HIBERN8)); +} + #define UFS_FLAG(_name, _uname) \ static ssize_t _name##_show(struct device *dev, \ struct device_attribute *attr, char *buf) \ { \ bool flag; \ + u8 index = 0; \ int ret; \ struct ufs_hba *hba = dev_get_drvdata(dev); \ + if (ufshcd_is_wb_flags(QUERY_FLAG_IDN##_uname)) \ + index = ufshcd_wb_get_flag_index(hba); \ pm_runtime_get_sync(hba->dev); \ ret = ufshcd_query_flag(hba, UPIU_QUERY_OPCODE_READ_FLAG, \ - QUERY_FLAG_IDN##_uname, 0, &flag); \ + QUERY_FLAG_IDN##_uname, index, &flag); \ pm_runtime_put_sync(hba->dev); \ if (ret) \ return -EINVAL; \ diff --git a/drivers/scsi/ufs/ufs.h b/drivers/scsi/ufs/ufs.h index daac5053b850..b3135344ab3f 100644 --- a/drivers/scsi/ufs/ufs.h +++ b/drivers/scsi/ufs/ufs.h @@ -64,6 +64,9 @@ #define UFS_MAX_LUNS (SCSI_W_LUN_BASE + UFS_UPIU_MAX_UNIT_NUM_ID) #define UFS_UPIU_WLUN_ID (1 << 7) +/* WriteBooster buffer is available only for the logical unit from 0 to 7 */ +#define UFS_UPIU_MAX_WB_LUN_ID 8 + /* Well known logical unit id in LUN field of UPIU */ enum { UFS_UPIU_REPORT_LUNS_WLUN = 0x81, @@ -330,6 +333,12 @@ enum health_desc_param { HEALTH_DESC_PARAM_LIFE_TIME_EST_B = 0x4, }; +/* WriteBooster buffer mode */ +enum { + WB_BUF_MODE_LU_DEDICATED = 0x0, + WB_BUF_MODE_SHARED = 0x1, +}; + /* * Logical Unit Write Protect * 00h: LU not write protected @@ -559,6 +568,7 @@ struct ufs_dev_info { bool is_lu_power_on_wp; /* Maximum number of general LU supported by the UFS device */ u8 max_lu_supported; + u8 wb_dedicated_lu; u16 wmanufacturerid; /*UFS device Product Name */ u8 *model; diff --git a/drivers/scsi/ufs/ufshcd.c b/drivers/scsi/ufs/ufshcd.c index 4053d24eaafc..b6a0d77d47ac 100644 --- a/drivers/scsi/ufs/ufshcd.c +++ b/drivers/scsi/ufs/ufshcd.c @@ -5205,6 +5205,7 @@ static bool ufshcd_wb_sup(struct ufs_hba *hba) static int ufshcd_wb_ctrl(struct ufs_hba *hba, bool enable) { int ret; + u8 index; enum query_opcode opcode; if (!ufshcd_wb_sup(hba)) @@ -5217,8 +5218,9 @@ static int ufshcd_wb_ctrl(struct ufs_hba *hba, bool enable) else opcode = UPIU_QUERY_OPCODE_CLEAR_FLAG; + index = ufshcd_wb_get_flag_index(hba); ret = ufshcd_query_flag_retry(hba, opcode, - QUERY_FLAG_IDN_WB_EN, 0, NULL); + QUERY_FLAG_IDN_WB_EN, index, NULL); if (ret) { dev_err(hba->dev, "%s write booster %s failed %d\n", __func__, enable ? "enable" : "disable", ret); @@ -5235,15 +5237,17 @@ static int ufshcd_wb_ctrl(struct ufs_hba *hba, bool enable) static int ufshcd_wb_toggle_flush_during_h8(struct ufs_hba *hba, bool set) { int val; + u8 index; if (set) val = UPIU_QUERY_OPCODE_SET_FLAG; else val = UPIU_QUERY_OPCODE_CLEAR_FLAG; + index = ufshcd_wb_get_flag_index(hba); return ufshcd_query_flag_retry(hba, val, - QUERY_FLAG_IDN_WB_BUFF_FLUSH_DURING_HIBERN8, 0, - NULL); + QUERY_FLAG_IDN_WB_BUFF_FLUSH_DURING_HIBERN8, + index, NULL); } static inline void ufshcd_wb_toggle_flush(struct ufs_hba *hba, bool enable) @@ -5258,13 +5262,15 @@ static inline void ufshcd_wb_toggle_flush(struct ufs_hba *hba, bool enable) static int ufshcd_wb_buf_flush_enable(struct ufs_hba *hba) { int ret; + u8 index; if (!ufshcd_wb_sup(hba) || hba->wb_buf_flush_enabled) return 0; + index = ufshcd_wb_get_flag_index(hba); ret = ufshcd_query_flag_retry(hba, UPIU_QUERY_OPCODE_SET_FLAG, QUERY_FLAG_IDN_WB_BUFF_FLUSH_EN, - 0, NULL); + index, NULL); if (ret) dev_err(hba->dev, "%s WB - buf flush enable failed %d\n", __func__, ret); @@ -5278,12 +5284,15 @@ static int ufshcd_wb_buf_flush_enable(struct ufs_hba *hba) static int ufshcd_wb_buf_flush_disable(struct ufs_hba *hba) { int ret; + u8 index; if (!ufshcd_wb_sup(hba) || !hba->wb_buf_flush_enabled) return 0; + index = ufshcd_wb_get_flag_index(hba); ret = ufshcd_query_flag_retry(hba, UPIU_QUERY_OPCODE_CLEAR_FLAG, - QUERY_FLAG_IDN_WB_BUFF_FLUSH_EN, 0, NULL); + QUERY_FLAG_IDN_WB_BUFF_FLUSH_EN, + index, NULL); if (ret) { dev_warn(hba->dev, "%s: WB - buf flush disable failed %d\n", __func__, ret); @@ -6802,6 +6811,9 @@ static int ufshcd_scsi_add_wlus(struct ufs_hba *hba) static void ufshcd_wb_probe(struct ufs_hba *hba, u8 *desc_buf) { + u8 lun; + u32 d_lu_wb_buf_alloc; + if (!ufshcd_is_wb_allowed(hba)) return; @@ -6824,16 +6836,32 @@ static void ufshcd_wb_probe(struct ufs_hba *hba, u8 *desc_buf) hba->dev_info.b_wb_buffer_type = desc_buf[DEVICE_DESC_PARAM_WB_TYPE]; - hba->dev_info.d_wb_alloc_units = - get_unaligned_be32(desc_buf + - DEVICE_DESC_PARAM_WB_SHARED_ALLOC_UNITS); hba->dev_info.b_presrv_uspc_en = desc_buf[DEVICE_DESC_PARAM_WB_PRESRV_USRSPC_EN]; - if (!(hba->dev_info.b_wb_buffer_type && - hba->dev_info.d_wb_alloc_units)) - goto wb_disabled; + if (hba->dev_info.b_wb_buffer_type == WB_BUF_MODE_SHARED) { + hba->dev_info.d_wb_alloc_units = + get_unaligned_be32(desc_buf + + DEVICE_DESC_PARAM_WB_SHARED_ALLOC_UNITS); + if (!hba->dev_info.d_wb_alloc_units) + goto wb_disabled; + } else { + for (lun = 0; lun < UFS_UPIU_MAX_WB_LUN_ID; lun++) { + d_lu_wb_buf_alloc = 0; + ufshcd_read_unit_desc_param(hba, + lun, + UNIT_DESC_PARAM_WB_BUF_ALLOC_UNITS, + (u8 *)&d_lu_wb_buf_alloc, + sizeof(d_lu_wb_buf_alloc)); + if (d_lu_wb_buf_alloc) { + hba->dev_info.wb_dedicated_lu = lun; + break; + } + } + if (!d_lu_wb_buf_alloc) + goto wb_disabled; + } return; wb_disabled: diff --git a/drivers/scsi/ufs/ufshcd.h b/drivers/scsi/ufs/ufshcd.h index 8262a48eb9eb..23a434c03c2a 100644 --- a/drivers/scsi/ufs/ufshcd.h +++ b/drivers/scsi/ufs/ufshcd.h @@ -861,6 +861,13 @@ static inline bool ufshcd_keep_autobkops_enabled_except_suspend( return hba->caps & UFSHCD_CAP_KEEP_AUTO_BKOPS_ENABLED_EXCEPT_SUSPEND; } +static inline u8 ufshcd_wb_get_flag_index(struct ufs_hba *hba) +{ + if (hba->dev_info.b_wb_buffer_type == WB_BUF_MODE_LU_DEDICATED) + return hba->dev_info.wb_dedicated_lu; + return 0; +} + extern int ufshcd_runtime_suspend(struct ufs_hba *hba); extern int ufshcd_runtime_resume(struct ufs_hba *hba); extern int ufshcd_runtime_idle(struct ufs_hba *hba); -- 2.18.0 _______________________________________________ linux-arm-kernel mailing list linux-arm-kernel@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-arm-kernel