From mboxrd@z Thu Jan 1 00:00:00 1970 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: base64 Subject: [v1,2/2] dmaengine: dw: implement per-channel protection control setting From: Andy Shevchenko Message-Id: <20181105142254.GG10650@smile.fi.intel.com> Date: Mon, 5 Nov 2018 16:22:54 +0200 To: Christian Lamparter Cc: dmaengine@vger.kernel.org, devicetree@vger.kernel.org, Dan Williams , Vinod Koul , Viresh Kumar , Rob Herring , Mark Rutland List-ID: VGhhbmtzIGZvciB0aGUgcGF0Y2gsIG15IGNvbW1lbnRzIGJlbG93LgoKT24gU3VuLCBOb3YgMDQs IDIwMTggYXQgMDY6MDE6MzlQTSArMDEwMCwgQ2hyaXN0aWFuIExhbXBhcnRlciB3cm90ZToKPiBU aGlzIHBhdGNoIGFkZHMgYSBuZXcgZGV2aWNlLXRyZWUgcHJvcGVydHkgdGhhdCBhbGxvd3MgdG8K PiBzcGVjaWZ5IHRoZSBwcm90ZWN0aW9uIGNvbnRyb2wgYml0cyBmb3IgZWFjaCBETUEgY2hhbm5l bAo+IGluZGl2aWR1YWxseS4KPiAKPiBTZXR0aW5nIHRoZSAiY29ycmVjdCIgYml0cyBjYW4gaGF2 ZSBhIGh1Z2UgaW1wYWN0IG9uIHRoZQo+IFBQQzQ2MEVYIGFuZCBBUE04MjE4MSB0aGF0IHVzZSB0 aGlzIERNQSBlbmdpbmUgaW4gY29tYmluYXRpb24KPiB3aXRoIGEgRGVzaWduV2FyZScgU0FUQS1J SSBjb3JlIChzYXRhX2R3Y180NjBleCBkcml2ZXIpLgo+IAo+IEluIHRoZSBPcGVuV3J0IEZvcnVt LCB0aGUgdXNlciB0YWtpbWF0YSByZXBvcnRlZCB0aGF0Ogo+IHw8aHR0cHM6Ly9mb3J1bS5sZWRl LXByb2plY3Qub3JnL3Qvd2QtbXlib29rLWxpdmUtZHVvLXR3by1kaXNrcy8xNjE5NS81NT4KCllv dSBtYXkgdXNlIEJ1Z0xpbms6IHRhZyBhdCB0aGUgZW5kIG9mIGNvbW1pdCBtZXNzYWdlLgoKPiB8 SXQgc2VlbXMgeW91ciBwYXRjaCB1bmxlYXNoZWQgdGhlIGZ1bGwgcG93ZXIgb2YgdGhlIFNBVEEg cG9ydC4KPiB8V2hlcmUgSSB3YXMgcHJldmlvdXNseSBoaXR0aW5nIGEgcmVhbGx5IGhhcmQgbGlt aXQgYXQgYXJvdW5kCj4gfDgyIE1CL3MgZm9yIHJlYWRpbmcgYW5kIDI3IE1CL3MgZm9yIHdyaXRp bmcsIEkgYW0gbm93IGdldHRpbmcgdGhpczoKPiB8Cj4gfHJvb3RAT3BlbldydDovbW50IyB0aW1l IGRkIGlmPS9kZXYvemVybyBvZj10ZW1wZmlsZSBicz0xTSBjb3VudD0xMDI0Cj4gfDEwMjQrMCBy ZWNvcmRzIGluCj4gfDEwMjQrMCByZWNvcmRzIG91dAo+IHxyZWFsICAgIDBtIDEzLjY1cwo+IHx1 c2VyICAgIDBtIDAuMDFzCj4gfHN5cyAgICAgMG0gMTEuODlzCj4gfAo+IHxyb290QE9wZW5XcnQ6 L21udCMgdGltZSBkZCBpZj10ZW1wZmlsZSBvZj0vZGV2L251bGwgYnM9MU0gY291bnQ9MTAyNAo+ IHwxMDI0KzAgcmVjb3JkcyBpbgo+IHwxMDI0KzAgcmVjb3JkcyBvdXQKPiB8cmVhbCAgICAwbSA4 LjQxcwo+IHx1c2VyICAgIDBtIDAuMDFzCj4gfHN5cyAgICAgMG0gNC43MHMKPiB8Cj4gfFRoaXMg bWVhbnM6IDEyMSBNQi9zIHJlYWRpbmcgYW5kIDc1IE1CL3Mgd3JpdGluZyEKPiB8Cj4gfFRoZSBk cml2ZSBpcyBhIFdEIEdyZWVuIFdEMTBFQVJYIHRha2VuIGZyb20gYW4gb2xkZXIgTUJMIFNpbmds ZS4KPiB8SSByZXBlYXRlZCB0aGUgdGVzdCBhIGZldyB0aW1lcyB3aXRoIGV2ZW4gbGFyZ2VyIGZp bGVzIHRvIHJ1bGUgb3V0Cj4gfGFueSBjYWNoaW5nLCBJJ20gc3RpbGwgc2VlaW5nIHRoZSBzYW1l IGdyZWF0IHBlcmZvcm1hbmNlLiBPcGVuV3J0IGlzCj4gfG5vdyBjb21wbGV0ZWx5IG9uIHBhciB3 aXRoIHRoZSBvcmlnaW5hbCBNQkwgZmlybXdhcmUncyBwZXJmb3JtYW5jZS4KPiAKPiBBbm90aGVy IHVzZXIgQW5kLnNob3J0IHJlcG9ydGVkIGluIHRoZSBzYW1lIHRocmVhZDoKPiB8PGh0dHBzOi8v Zm9ydW0ub3BlbndydC5vcmcvdC9zb2x2ZWQtd2QtbXlib29rLWxpdmUtZHVvLXR3by1kaXNrcy8x NjE5NS81MD4KCkFub3RoZXIgQnVnTGluazogdGFnIGVudHJ5IDotKQoKPiB8SSBjYW4gcmVwb3J0 IHRoYXQgeW91ciBmaXggd29ya2VkISBCb290cyB1cCBmaW5lIHdpdGggdHdvCj4gfGRyaXZlcyBl dmVuIHdpdGggbW9yZSBwYXJ0aXRpb25zLCBhbmQgbm8gbW9yZSByZWJvb3Qgb24KPiB8Y29uY3Vy cmVudCBkaXNrIGFjY2VzcyEKPiAKPiBBIGNsb3NlciBsb29rIGludG8gdGhlIHNhdGFfZHdjXzQ2 MGV4IGNvZGUgcmV2ZWFsZWQgdGhhdAo+IHRoZSBkcml2ZXIgZGlkIGluaXRhbGx5IHNldCB0aGUg Y29ycmVjdCBwcm90ZWN0aW9uIGNvbnRyb2wKPiBiaXRzLiAKCj4gSG93ZXZlciwgdGhpcyBmZWF0 dXJlIHdhcyBsb3N0IHdoZW4gdGhlIHNhdGFfZHdjXzQ2MGV4Cj4gZHJpdmVyIHdhcyBjb252ZXJ0 ZWQgdG8gdGhlIGdlbmVyaWMgRE1BIGRyaXZlciBmcmFtZXdvcmsgd2l0aDoKPiA4YjM0NDQ4NTJh MiAoInNhdGFfZHdjXzQ2MGV4OiBtb3ZlIHRvIGdlbmVyaWMgRE1BIGRyaXZlciIpLgoKRml4ZXM6 IHRhZy4KCj4gCj4gU2lnbmVkLW9mZi1ieTogQ2hyaXN0aWFuIExhbXBhcnRlciA8Y2h1bmtlZXlA Z21haWwuY29tPgo+IC0tLQo+ICBkcml2ZXJzL2RtYS9kdy9jb3JlLmMgICAgICAgICAgICAgICAg fCAgMyArKysKPiAgZHJpdmVycy9kbWEvZHcvcGxhdGZvcm0uYyAgICAgICAgICAgIHwgMTIgKysr KysrKysrLS0tCj4gIGRyaXZlcnMvZG1hL2R3L3JlZ3MuaCAgICAgICAgICAgICAgICB8ICA0ICsr KysKPiAgaW5jbHVkZS9saW51eC9wbGF0Zm9ybV9kYXRhL2RtYS1kdy5oIHwgIDYgKysrKysrCj4g IDQgZmlsZXMgY2hhbmdlZCwgMjIgaW5zZXJ0aW9ucygrKSwgMyBkZWxldGlvbnMoLSkKPiAKPiBk aWZmIC0tZ2l0IGEvZHJpdmVycy9kbWEvZHcvY29yZS5jIGIvZHJpdmVycy9kbWEvZHcvY29yZS5j Cj4gaW5kZXggZjQzZTZkYWZlNDQ2Li4yZGIxNWU5YjMzYTggMTAwNjQ0Cj4gLS0tIGEvZHJpdmVy cy9kbWEvZHcvY29yZS5jCj4gKysrIGIvZHJpdmVycy9kbWEvZHcvY29yZS5jCj4gQEAgLTE2MCwx MiArMTYwLDE1IEBAIHN0YXRpYyB2b2lkIGR3Y19pbml0aWFsaXplX2NoYW5faWRtYTMyKHN0cnVj dCBkd19kbWFfY2hhbiAqZHdjKQo+ICAKPiAgc3RhdGljIHZvaWQgZHdjX2luaXRpYWxpemVfY2hh bl9kdyhzdHJ1Y3QgZHdfZG1hX2NoYW4gKmR3YykKPiAgewo+ICsJc3RydWN0IGR3X2RtYSAqZHcg PSB0b19kd19kbWEoZHdjLT5jaGFuLmRldmljZSk7Cj4gKwlzaXplX3QgY2hhbmlkeCA9IChzaXpl X3QpKGR3YyAtIGR3LT5jaGFuKTsKCldlIGhhdmUgbWFzayBmaWVsZCwgc28sIGluZGV4IGlzIGEg Zmlyc3Qgc2V0IGJpdCBvdXQgb2YgbWFzaywgX19mZnMobWFzaykuCgoJdW5zaWduZWQgaW50IHBy b3RjdGwgPSBkdy0+cGRhdGEtPnByb3RjdGxbX19mZnMobWFzayldOwoKCj4gIAl1MzIgY2ZnaGkg PSBEV0NfQ0ZHSF9GSUZPX01PREU7Cj4gIAl1MzIgY2ZnbG8gPSBEV0NfQ0ZHTF9DSF9QUklPUihk d2MtPnByaW9yaXR5KTsKPiAgCWJvb2wgaHNfcG9sYXJpdHkgPSBkd2MtPmR3cy5oc19wb2xhcml0 eTsKPiAgCj4gIAljZmdoaSB8PSBEV0NfQ0ZHSF9EU1RfUEVSKGR3Yy0+ZHdzLmRzdF9pZCk7Cj4g IAljZmdoaSB8PSBEV0NfQ0ZHSF9TUkNfUEVSKGR3Yy0+ZHdzLnNyY19pZCk7Cj4gKwljZmdoaSB8 PSBEV0NfQ0ZHSF9QUk9UQ1RMKGR3LT5wZGF0YS0+cHJvdGN0bFtjaGFuaWR4XSk7Cj4gIAo+ICAJ LyogU2V0IHBvbGFyaXR5IG9mIGhhbmRzaGFrZSBpbnRlcmZhY2UgKi8KPiAgCWNmZ2xvIHw9IGhz X3BvbGFyaXR5ID8gRFdDX0NGR0xfSFNfRFNUX1BPTCB8IERXQ19DRkdMX0hTX1NSQ19QT0wgOiAw Owo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2RtYS9kdy9wbGF0Zm9ybS5jIGIvZHJpdmVycy9kbWEv ZHcvcGxhdGZvcm0uYwo+IGluZGV4IGY2MmRkMDk0NDkwOC4uMDc4Y2NhNjU3NmMzIDEwMDY0NAo+ IC0tLSBhL2RyaXZlcnMvZG1hL2R3L3BsYXRmb3JtLmMKPiArKysgYi9kcml2ZXJzL2RtYS9kdy9w bGF0Zm9ybS5jCj4gQEAgLTEwMiw3ICsxMDIsNyBAQCBkd19kbWFfcGFyc2VfZHQoc3RydWN0IHBs YXRmb3JtX2RldmljZSAqcGRldikKPiAgewo+ICAJc3RydWN0IGRldmljZV9ub2RlICpucCA9IHBk ZXYtPmRldi5vZl9ub2RlOwo+ICAJc3RydWN0IGR3X2RtYV9wbGF0Zm9ybV9kYXRhICpwZGF0YTsK PiAtCXUzMiB0bXAsIGFycltEV19ETUFfTUFYX05SX01BU1RFUlNdLCBtYltEV19ETUFfTUFYX05S X0NIQU5ORUxTXTsKPiArCXUzMiB0bXAsIGFycltEV19ETUFfTUFYX05SX01BU1RFUlNdLCB2YWxb RFdfRE1BX01BWF9OUl9DSEFOTkVMU107Cj4gIAl1MzIgbnJfbWFzdGVyczsKPiAgCXUzMiBucl9j aGFubmVsczsKPiAgCj4gQEAgLTE1NCwxNCArMTU0LDIwIEBAIGR3X2RtYV9wYXJzZV9kdChzdHJ1 Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQo+ICAJCQlwZGF0YS0+ZGF0YV93aWR0aFt0bXBdID0g QklUKGFyclt0bXBdICYgMHgwNyk7Cj4gIAl9Cj4gIAo+IC0JaWYgKCFvZl9wcm9wZXJ0eV9yZWFk X3UzMl9hcnJheShucCwgIm11bHRpLWJsb2NrIiwgbWIsIG5yX2NoYW5uZWxzKSkgewo+ICsJaWYg KCFvZl9wcm9wZXJ0eV9yZWFkX3UzMl9hcnJheShucCwgIm11bHRpLWJsb2NrIiwgdmFsLCBucl9j aGFubmVscykpIHsKPiAgCQlmb3IgKHRtcCA9IDA7IHRtcCA8IG5yX2NoYW5uZWxzOyB0bXArKykK PiAtCQkJcGRhdGEtPm11bHRpX2Jsb2NrW3RtcF0gPSBtYlt0bXBdOwo+ICsJCQlwZGF0YS0+bXVs dGlfYmxvY2tbdG1wXSA9IHZhbFt0bXBdOwo+ICAJfSBlbHNlIHsKPiAgCQlmb3IgKHRtcCA9IDA7 IHRtcCA8IG5yX2NoYW5uZWxzOyB0bXArKykKPiAgCQkJcGRhdGEtPm11bHRpX2Jsb2NrW3RtcF0g PSAxOwo+ICAJfQo+ICAKPiArCWlmICghb2ZfcHJvcGVydHlfcmVhZF91MzJfYXJyYXkobnAsICJz bnBzLGRtYS1wcm90ZWN0aW9uLWNvbnRyb2wiLAo+ICsJCQkJCXZhbCwgbnJfY2hhbm5lbHMpKSB7 Cj4gKwkJZm9yICh0bXAgPSAwOyB0bXAgPCBucl9jaGFubmVsczsgdG1wKyspCj4gKwkJCXBkYXRh LT5wcm90Y3RsW3RtcF0gPSB2YWxbdG1wXTsKPiArCX0KPiArCj4gIAlyZXR1cm4gcGRhdGE7Cj4g IH0KPiAgI2Vsc2UKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9kbWEvZHcvcmVncy5oIGIvZHJpdmVy cy9kbWEvZHcvcmVncy5oCj4gaW5kZXggMDllN2RmZGJiNzkwLi42NDZjOWM5NjBjMDcgMTAwNjQ0 Cj4gLS0tIGEvZHJpdmVycy9kbWEvZHcvcmVncy5oCj4gKysrIGIvZHJpdmVycy9kbWEvZHcvcmVn cy5oCj4gQEAgLTIwMCw2ICsyMDAsMTAgQEAgZW51bSBkd19kbWFfbXNpemUgewo+ICAjZGVmaW5l IERXQ19DRkdIX0ZDTU9ERQkJKDEgPDwgMCkKPiAgI2RlZmluZSBEV0NfQ0ZHSF9GSUZPX01PREUJ KDEgPDwgMSkKPiAgI2RlZmluZSBEV0NfQ0ZHSF9QUk9UQ1RMKHgpCSgoeCkgPDwgMikKCj4gKyNk ZWZpbmUgRFdDX0NGR0hfUFJPVENUTF9EQVRBCSgwIDw8IDIpCS8qIGRhdGEgYWNjZXNzIC0gYWx3 YXlzIHNldCAqLwo+ICsjZGVmaW5lIERXQ19DRkdIX1BST1RDVExfUFJJVgkoMSA8PCAyKQkvKiBw cml2aWxlZ2VkIC0+IEFIQiBIUFJPVFsxXSAqLwo+ICsjZGVmaW5lIERXQ19DRkdIX1BST1RDVExf QlVGRkVSCSgyIDw8IDIpCS8qIGJ1ZmZlcmFibGUgLT4gQUhCIEhQUk9UWzJdICovCj4gKyNkZWZp bmUgRFdDX0NGR0hfUFJPVENUTF9DQUNIRQkoNCA8PCAyKQkvKiBjYWNoZWFibGUgIC0+IEFIQiBI UFJPVFszXSAqLwoKPiAgI2RlZmluZSBEV0NfQ0ZHSF9EU19VUERfRU4JKDEgPDwgNSkKPiAgI2Rl ZmluZSBEV0NfQ0ZHSF9TU19VUERfRU4JKDEgPDwgNikKPiAgI2RlZmluZSBEV0NfQ0ZHSF9TUkNf UEVSKHgpCSgoeCkgPDwgNykKPiBkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wbGF0Zm9ybV9k YXRhL2RtYS1kdy5oIGIvaW5jbHVkZS9saW51eC9wbGF0Zm9ybV9kYXRhL2RtYS1kdy5oCj4gaW5k ZXggODk2Y2I3MWEzODJjLi5kZjY1ZTMzMTFhNTYgMTAwNjQ0Cj4gLS0tIGEvaW5jbHVkZS9saW51 eC9wbGF0Zm9ybV9kYXRhL2RtYS1kdy5oCj4gKysrIGIvaW5jbHVkZS9saW51eC9wbGF0Zm9ybV9k YXRhL2RtYS1kdy5oCj4gQEAgLTQ5LDYgKzQ5LDcgQEAgc3RydWN0IGR3X2RtYV9zbGF2ZSB7Cj4g ICAqIEBkYXRhX3dpZHRoOiBNYXhpbXVtIGRhdGEgd2lkdGggc3VwcG9ydGVkIGJ5IGhhcmR3YXJl IHBlciBBSEIgbWFzdGVyCj4gICAqCQkoaW4gYnl0ZXMsIHBvd2VyIG9mIDIpCj4gICAqIEBtdWx0 aV9ibG9jazogTXVsdGkgYmxvY2sgdHJhbnNmZXJzIHN1cHBvcnRlZCBieSBoYXJkd2FyZSBwZXIg Y2hhbm5lbC4KPiArICogQHByb3RjdGw6CVByb3RlY3Rpb24gY29udHJvbCBzaWduYWxzIHNldHRp bmcgcGVyIGNoYW5uZWwuCj4gICAqLwo+ICBzdHJ1Y3QgZHdfZG1hX3BsYXRmb3JtX2RhdGEgewo+ ICAJdW5zaWduZWQgaW50CW5yX2NoYW5uZWxzOwo+IEBAIC02NSw2ICs2NiwxMSBAQCBzdHJ1Y3Qg ZHdfZG1hX3BsYXRmb3JtX2RhdGEgewo+ICAJdW5zaWduZWQgY2hhcglucl9tYXN0ZXJzOwo+ICAJ dW5zaWduZWQgY2hhcglkYXRhX3dpZHRoW0RXX0RNQV9NQVhfTlJfTUFTVEVSU107Cj4gIAl1bnNp Z25lZCBjaGFyCW11bHRpX2Jsb2NrW0RXX0RNQV9NQVhfTlJfQ0hBTk5FTFNdOwo+ICsjZGVmaW5l IENIQU5fUFJPVENUTF9QUklWSUxFR0VECQlCSVQoMCkKPiArI2RlZmluZSBDSEFOX1BST1RDVExf QlVGRkVSQUJMRQkJQklUKDEpCj4gKyNkZWZpbmUgQ0hBTl9QUk9UQ1RMX0NBQ0hFQUJMRQkJQklU KDIpCgo+ICsjZGVmaW5lCUNIQU5fUFJPVENUTF9NQVNLCQkweDcKCkdFTk1BU0soKQoKPiArCXVu c2lnbmVkIGNoYXIJcHJvdGN0bFtEV19ETUFfTUFYX05SX0NIQU5ORUxTXTsKPiAgfTsKPiAgCj4g ICNlbmRpZiAvKiBfUExBVEZPUk1fREFUQV9ETUFfRFdfSCAqLwo+IC0tIAo+IDIuMTkuMQo+Cg== From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Date: Mon, 5 Nov 2018 16:22:54 +0200 From: Andy Shevchenko Subject: Re: [PATCH v1 2/2] dmaengine: dw: implement per-channel protection control setting Message-ID: <20181105142254.GG10650@smile.fi.intel.com> References: <6b18bcf33d6473c166b607a5fa31ba63727cf6bb.1541350844.git.chunkeey@gmail.com> <19ee8f8992a364d826680ee86f3a965c395a672d.1541350844.git.chunkeey@gmail.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <19ee8f8992a364d826680ee86f3a965c395a672d.1541350844.git.chunkeey@gmail.com> To: Christian Lamparter Cc: dmaengine@vger.kernel.org, devicetree@vger.kernel.org, Dan Williams , Vinod Koul , Viresh Kumar , Rob Herring , Mark Rutland List-ID: Thanks for the patch, my comments below. On Sun, Nov 04, 2018 at 06:01:39PM +0100, Christian Lamparter wrote: > This patch adds a new device-tree property that allows to > specify the protection control bits for each DMA channel > individually. > > Setting the "correct" bits can have a huge impact on the > PPC460EX and APM82181 that use this DMA engine in combination > with a DesignWare' SATA-II core (sata_dwc_460ex driver). > > In the OpenWrt Forum, the user takimata reported that: > | You may use BugLink: tag at the end of commit message. > |It seems your patch unleashed the full power of the SATA port. > |Where I was previously hitting a really hard limit at around > |82 MB/s for reading and 27 MB/s for writing, I am now getting this: > | > |root@OpenWrt:/mnt# time dd if=/dev/zero of=tempfile bs=1M count=1024 > |1024+0 records in > |1024+0 records out > |real 0m 13.65s > |user 0m 0.01s > |sys 0m 11.89s > | > |root@OpenWrt:/mnt# time dd if=tempfile of=/dev/null bs=1M count=1024 > |1024+0 records in > |1024+0 records out > |real 0m 8.41s > |user 0m 0.01s > |sys 0m 4.70s > | > |This means: 121 MB/s reading and 75 MB/s writing! > | > |The drive is a WD Green WD10EARX taken from an older MBL Single. > |I repeated the test a few times with even larger files to rule out > |any caching, I'm still seeing the same great performance. OpenWrt is > |now completely on par with the original MBL firmware's performance. > > Another user And.short reported in the same thread: > | Another BugLink: tag entry :-) > |I can report that your fix worked! Boots up fine with two > |drives even with more partitions, and no more reboot on > |concurrent disk access! > > A closer look into the sata_dwc_460ex code revealed that > the driver did initally set the correct protection control > bits. > However, this feature was lost when the sata_dwc_460ex > driver was converted to the generic DMA driver framework with: > 8b3444852a2 ("sata_dwc_460ex: move to generic DMA driver"). Fixes: tag. > > Signed-off-by: Christian Lamparter > --- > drivers/dma/dw/core.c | 3 +++ > drivers/dma/dw/platform.c | 12 +++++++++--- > drivers/dma/dw/regs.h | 4 ++++ > include/linux/platform_data/dma-dw.h | 6 ++++++ > 4 files changed, 22 insertions(+), 3 deletions(-) > > diff --git a/drivers/dma/dw/core.c b/drivers/dma/dw/core.c > index f43e6dafe446..2db15e9b33a8 100644 > --- a/drivers/dma/dw/core.c > +++ b/drivers/dma/dw/core.c > @@ -160,12 +160,15 @@ static void dwc_initialize_chan_idma32(struct dw_dma_chan *dwc) > > static void dwc_initialize_chan_dw(struct dw_dma_chan *dwc) > { > + struct dw_dma *dw = to_dw_dma(dwc->chan.device); > + size_t chanidx = (size_t)(dwc - dw->chan); We have mask field, so, index is a first set bit out of mask, __ffs(mask). unsigned int protctl = dw->pdata->protctl[__ffs(mask)]; > u32 cfghi = DWC_CFGH_FIFO_MODE; > u32 cfglo = DWC_CFGL_CH_PRIOR(dwc->priority); > bool hs_polarity = dwc->dws.hs_polarity; > > cfghi |= DWC_CFGH_DST_PER(dwc->dws.dst_id); > cfghi |= DWC_CFGH_SRC_PER(dwc->dws.src_id); > + cfghi |= DWC_CFGH_PROTCTL(dw->pdata->protctl[chanidx]); > > /* Set polarity of handshake interface */ > cfglo |= hs_polarity ? DWC_CFGL_HS_DST_POL | DWC_CFGL_HS_SRC_POL : 0; > diff --git a/drivers/dma/dw/platform.c b/drivers/dma/dw/platform.c > index f62dd0944908..078cca6576c3 100644 > --- a/drivers/dma/dw/platform.c > +++ b/drivers/dma/dw/platform.c > @@ -102,7 +102,7 @@ dw_dma_parse_dt(struct platform_device *pdev) > { > struct device_node *np = pdev->dev.of_node; > struct dw_dma_platform_data *pdata; > - u32 tmp, arr[DW_DMA_MAX_NR_MASTERS], mb[DW_DMA_MAX_NR_CHANNELS]; > + u32 tmp, arr[DW_DMA_MAX_NR_MASTERS], val[DW_DMA_MAX_NR_CHANNELS]; > u32 nr_masters; > u32 nr_channels; > > @@ -154,14 +154,20 @@ dw_dma_parse_dt(struct platform_device *pdev) > pdata->data_width[tmp] = BIT(arr[tmp] & 0x07); > } > > - if (!of_property_read_u32_array(np, "multi-block", mb, nr_channels)) { > + if (!of_property_read_u32_array(np, "multi-block", val, nr_channels)) { > for (tmp = 0; tmp < nr_channels; tmp++) > - pdata->multi_block[tmp] = mb[tmp]; > + pdata->multi_block[tmp] = val[tmp]; > } else { > for (tmp = 0; tmp < nr_channels; tmp++) > pdata->multi_block[tmp] = 1; > } > > + if (!of_property_read_u32_array(np, "snps,dma-protection-control", > + val, nr_channels)) { > + for (tmp = 0; tmp < nr_channels; tmp++) > + pdata->protctl[tmp] = val[tmp]; > + } > + > return pdata; > } > #else > diff --git a/drivers/dma/dw/regs.h b/drivers/dma/dw/regs.h > index 09e7dfdbb790..646c9c960c07 100644 > --- a/drivers/dma/dw/regs.h > +++ b/drivers/dma/dw/regs.h > @@ -200,6 +200,10 @@ enum dw_dma_msize { > #define DWC_CFGH_FCMODE (1 << 0) > #define DWC_CFGH_FIFO_MODE (1 << 1) > #define DWC_CFGH_PROTCTL(x) ((x) << 2) > +#define DWC_CFGH_PROTCTL_DATA (0 << 2) /* data access - always set */ > +#define DWC_CFGH_PROTCTL_PRIV (1 << 2) /* privileged -> AHB HPROT[1] */ > +#define DWC_CFGH_PROTCTL_BUFFER (2 << 2) /* bufferable -> AHB HPROT[2] */ > +#define DWC_CFGH_PROTCTL_CACHE (4 << 2) /* cacheable -> AHB HPROT[3] */ > #define DWC_CFGH_DS_UPD_EN (1 << 5) > #define DWC_CFGH_SS_UPD_EN (1 << 6) > #define DWC_CFGH_SRC_PER(x) ((x) << 7) > diff --git a/include/linux/platform_data/dma-dw.h b/include/linux/platform_data/dma-dw.h > index 896cb71a382c..df65e3311a56 100644 > --- a/include/linux/platform_data/dma-dw.h > +++ b/include/linux/platform_data/dma-dw.h > @@ -49,6 +49,7 @@ struct dw_dma_slave { > * @data_width: Maximum data width supported by hardware per AHB master > * (in bytes, power of 2) > * @multi_block: Multi block transfers supported by hardware per channel. > + * @protctl: Protection control signals setting per channel. > */ > struct dw_dma_platform_data { > unsigned int nr_channels; > @@ -65,6 +66,11 @@ struct dw_dma_platform_data { > unsigned char nr_masters; > unsigned char data_width[DW_DMA_MAX_NR_MASTERS]; > unsigned char multi_block[DW_DMA_MAX_NR_CHANNELS]; > +#define CHAN_PROTCTL_PRIVILEGED BIT(0) > +#define CHAN_PROTCTL_BUFFERABLE BIT(1) > +#define CHAN_PROTCTL_CACHEABLE BIT(2) > +#define CHAN_PROTCTL_MASK 0x7 GENMASK() > + unsigned char protctl[DW_DMA_MAX_NR_CHANNELS]; > }; > > #endif /* _PLATFORM_DATA_DMA_DW_H */ > -- > 2.19.1 > -- With Best Regards, Andy Shevchenko