Message ID | 1473945253-16649-1-git-send-email-Eugeniy.Paltsev@synopsys.com (mailing list archive) |
---|---|
State | Changes Requested |
Headers | show |
Hi Eugeniy, [auto build test ERROR on slave-dma/next] [also build test ERROR on next-20160915] [cannot apply to linus/master linux/master v4.8-rc6] [if your patch is applied to the wrong git tree, please drop us a note to help improve the system] [Suggest to use git(>=2.9.0) format-patch --base=<commit> (or --base=auto for convenience) to record what (public, well-known) commit your patch series was built on] [Check https://git-scm.com/docs/git-format-patch for more information] url: https://github.com/0day-ci/linux/commits/Eugeniy-Paltsev/dmaengine-DW-DMAC-split-pdata-to-hardware-properties-and-platform-quirks/20160915-211634 base: https://git.kernel.org/pub/scm/linux/kernel/git/vkoul/slave-dma.git next config: i386-defconfig (attached as .config) compiler: gcc-6 (Debian 6.1.1-9) 6.1.1 20160705 reproduce: # save the attached .config to linux build tree make ARCH=i386 All errors (new ones prefixed by >>): >> drivers/tty/serial/8250/8250_lpss.c:159:2: error: unknown field 'is_private' specified in initializer .is_private = true, ^ >> drivers/tty/serial/8250/8250_lpss.c:160:2: error: unknown field 'is_nollp' specified in initializer .is_nollp = true, ^ vim +/is_private +159 drivers/tty/serial/8250/8250_lpss.c a13e19cf Andy Shevchenko 2016-08-17 153 return 0; a13e19cf Andy Shevchenko 2016-08-17 154 } a13e19cf Andy Shevchenko 2016-08-17 155 fecdef93 Andy Shevchenko 2016-08-17 156 #ifdef CONFIG_SERIAL_8250_DMA fecdef93 Andy Shevchenko 2016-08-17 157 static const struct dw_dma_platform_data qrk_serial_dma_pdata = { fecdef93 Andy Shevchenko 2016-08-17 158 .nr_channels = 2, fecdef93 Andy Shevchenko 2016-08-17 @159 .is_private = true, fecdef93 Andy Shevchenko 2016-08-17 @160 .is_nollp = true, fecdef93 Andy Shevchenko 2016-08-17 161 .chan_allocation_order = CHAN_ALLOCATION_ASCENDING, fecdef93 Andy Shevchenko 2016-08-17 162 .chan_priority = CHAN_PRIORITY_ASCENDING, fecdef93 Andy Shevchenko 2016-08-17 163 .block_size = 4095, :::::: The code at line 159 was first introduced by commit :::::: fecdef932b0093b4a7e1ae88b1dbd63eb74ecc34 serial: 8250_lpss: enable DMA on Intel Quark UART :::::: TO: Andy Shevchenko <andriy.shevchenko@linux.intel.com> :::::: CC: Greg Kroah-Hartman <gregkh@linuxfoundation.org> --- 0-DAY kernel test infrastructure Open Source Technology Center https://lists.01.org/pipermail/kbuild-all Intel Corporation
SGnCoEFuZHksDQp3aGF0IGRvIHlvdSB0aGluayBhYm91dMKgdGhlc2UgY2hhbmdlcz8NCg0KT24g VGh1LCAyMDE2LTA5LTE1IGF0IDE2OjE0ICswMzAwLCBFdWdlbml5IFBhbHRzZXYgd3JvdGU6DQo+ IFRoaXMgcGF0Y2ggaXMgdG8gYWRkcmVzcyBhIHByb3Bvc2FsIGJ5IEFuZHkgaW4gdGhpcyB0aHJl YWQ6DQo+IGh0dHA6Ly93d3cuc3Bpbmljcy5uZXQvbGlzdHMvZG1hZW5naW5lL21zZzEwNzU0Lmh0 bWwNCj4gU3BsaXQgcGxhdGZvcm0gZGF0YSB0byBhY3R1YWwgaGFyZHdhcmUgcHJvcGVydGllcywg YW5kIHBsYXRmb3JtDQo+IHF1aXJrcy4NCj4gTm93IHdlIGFibGUgdG8gdXNlIHF1aXJrcyBhbmQg aGFyZHdhcmUgcHJvcGVydGllcyBzZXBhcmF0ZWx5IGZyb20NCj4gZGlmZmVyZW50IHNvdXJjZXMg KHBkYXRhLCBkZXZpY2UgdHJlZSBvciBhdXRvY29uZmlnIHJlZ2lzdGVycykNCj4gDQo+IFNpZ25l ZC1vZmYtYnk6IEV1Z2VuaXkgUGFsdHNldiA8RXVnZW5peS5QYWx0c2V2QHN5bm9wc3lzLmNvbT4N Cj4gLS0tDQo+IMKgZHJpdmVycy9kbWEvZHcvY29yZS5jwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqB8IDMxICsrKysrKysrKysrKysrKy0tLS0tLS0tLS0tDQo+IMKgZHJpdmVycy9kbWEv ZHcvcGxhdGZvcm0uY8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHwgNDIgKysrKysrKysrKysrKysr KysrKysrLS0tLS0NCj4gLS0tLS0tLS0tLQ0KPiDCoGluY2x1ZGUvbGludXgvcGxhdGZvcm1fZGF0 YS9kbWEtZHcuaCB8IDIwICsrKysrKysrKysrLS0tLS0tDQo+IMKgMyBmaWxlcyBjaGFuZ2VkLCA1 NyBpbnNlcnRpb25zKCspLCAzNiBkZWxldGlvbnMoLSkNCj4gDQo+IGRpZmYgLS1naXQgYS9kcml2 ZXJzL2RtYS9kdy9jb3JlLmMgYi9kcml2ZXJzL2RtYS9kdy9jb3JlLmMNCj4gaW5kZXggYzJjMGE2 MS4uOTM1MjczNSAxMDA2NDQNCj4gLS0tIGEvZHJpdmVycy9kbWEvZHcvY29yZS5jDQo+ICsrKyBi L2RyaXZlcnMvZG1hL2R3L2NvcmUuYw0KPiBAQCAtMTQ1MSwxMCArMTQ1MSwyNSBAQCBpbnQgZHdf ZG1hX3Byb2JlKHN0cnVjdCBkd19kbWFfY2hpcCAqY2hpcCkNCj4gwqANCj4gwqAJZHctPnJlZ3Mg PSBjaGlwLT5yZWdzOw0KPiDCoAljaGlwLT5kdyA9IGR3Ow0KPiArCS8qIFJlYXNzaWduIHRoZSBw bGF0Zm9ybSBkYXRhIHBvaW50ZXIgKi8NCj4gKwlwZGF0YSA9IGR3LT5wZGF0YTsNCj4gwqANCj4g wqAJcG1fcnVudGltZV9nZXRfc3luYyhjaGlwLT5kZXYpOw0KPiDCoA0KPiAtCWlmICghY2hpcC0+ cGRhdGEpIHsNCj4gKwlpZiAoKCFjaGlwLT5wZGF0YSkgfHwNCj4gKwnCoMKgwqAoY2hpcC0+cGRh dGEgJiYgdGVzdF9iaXQoUVVJUktTX09OTFlfVVNFRCwgJmNoaXAtPnBkYXRhLQ0KPiA+cXVpcmtz KSkpIHsNCj4gKw0KPiArCQkvKg0KPiArCQnCoCogRmlsbCBxdWlya3Mgd2l0aCB0aGUgZGVmYXVs dCB2YWx1ZXMgaW4gY2FzZSBvZg0KPiBwZGF0YSBhYnNlbmNlDQo+ICsJCcKgKi8NCj4gKwkJaWYg KCFjaGlwLT5wZGF0YSkgew0KPiArCQkJc2V0X2JpdChRVUlSS1NfSVNfUFJJVkFURSwgJnBkYXRh LT5xdWlya3MpOw0KPiArCQkJc2V0X2JpdChRVUlSS1NfSVNfTUVNQ1BZLCAmcGRhdGEtPnF1aXJr cyk7DQo+ICsJCQlzZXRfYml0KFFVSVJLU19JU19OT0xMUCwgJnBkYXRhLT5xdWlya3MpOw0KPiAr CQl9IGVsc2Ugew0KPiArCQkJcGRhdGEtPnF1aXJrcyA9IGNoaXAtPnBkYXRhLT5xdWlya3M7DQo+ ICsJCX0NCj4gKw0KPiDCoAkJZHdfcGFyYW1zID0gZG1hX3JlYWRsKGR3LCBEV19QQVJBTVMpOw0K PiDCoAkJZGV2X2RiZyhjaGlwLT5kZXYsICJEV19QQVJBTVM6IDB4JTA4eFxuIiwNCj4gZHdfcGFy YW1zKTsNCj4gwqANCj4gQEAgLTE0NjQsOSArMTQ3OSw2IEBAIGludCBkd19kbWFfcHJvYmUoc3Ry dWN0IGR3X2RtYV9jaGlwICpjaGlwKQ0KPiDCoAkJCWdvdG8gZXJyX3BkYXRhOw0KPiDCoAkJfQ0K PiDCoA0KPiAtCQkvKiBSZWFzc2lnbiB0aGUgcGxhdGZvcm0gZGF0YSBwb2ludGVyICovDQo+IC0J CXBkYXRhID0gZHctPnBkYXRhOw0KPiAtDQo+IMKgCQkvKiBHZXQgaGFyZHdhcmUgY29uZmlndXJh dGlvbiBwYXJhbWV0ZXJzICovDQo+IMKgCQlwZGF0YS0+bnJfY2hhbm5lbHMgPSAoZHdfcGFyYW1z ID4+IERXX1BBUkFNU19OUl9DSEFODQo+ICYgNykgKyAxOw0KPiDCoAkJcGRhdGEtPm5yX21hc3Rl cnMgPSAoZHdfcGFyYW1zID4+DQo+IERXX1BBUkFNU19OUl9NQVNURVIgJiAzKSArIDE7DQo+IEBA IC0xNDc3LDggKzE0ODksNiBAQCBpbnQgZHdfZG1hX3Byb2JlKHN0cnVjdCBkd19kbWFfY2hpcCAq Y2hpcCkNCj4gwqAJCXBkYXRhLT5ibG9ja19zaXplID0gZG1hX3JlYWRsKGR3LCBNQVhfQkxLX1NJ WkUpOw0KPiDCoA0KPiDCoAkJLyogRmlsbCBwbGF0Zm9ybSBkYXRhIHdpdGggdGhlIGRlZmF1bHQg dmFsdWVzICovDQo+IC0JCXBkYXRhLT5pc19wcml2YXRlID0gdHJ1ZTsNCj4gLQkJcGRhdGEtPmlz X21lbWNweSA9IHRydWU7DQo+IMKgCQlwZGF0YS0+Y2hhbl9hbGxvY2F0aW9uX29yZGVyID0NCj4g Q0hBTl9BTExPQ0FUSU9OX0FTQ0VORElORzsNCj4gwqAJCXBkYXRhLT5jaGFuX3ByaW9yaXR5ID0g Q0hBTl9QUklPUklUWV9BU0NFTkRJTkc7DQo+IMKgCX0gZWxzZSBpZiAoY2hpcC0+cGRhdGEtPm5y X2NoYW5uZWxzID4NCj4gRFdfRE1BX01BWF9OUl9DSEFOTkVMUykgew0KPiBAQCAtMTQ4Niw5ICsx NDk2LDYgQEAgaW50IGR3X2RtYV9wcm9iZShzdHJ1Y3QgZHdfZG1hX2NoaXAgKmNoaXApDQo+IMKg CQlnb3RvIGVycl9wZGF0YTsNCj4gwqAJfSBlbHNlIHsNCj4gwqAJCW1lbWNweShkdy0+cGRhdGEs IGNoaXAtPnBkYXRhLCBzaXplb2YoKmR3LT5wZGF0YSkpOw0KPiAtDQo+IC0JCS8qIFJlYXNzaWdu IHRoZSBwbGF0Zm9ybSBkYXRhIHBvaW50ZXIgKi8NCj4gLQkJcGRhdGEgPSBkdy0+cGRhdGE7DQo+ IMKgCX0NCj4gwqANCj4gwqAJZHctPmNoYW4gPSBkZXZtX2tjYWxsb2MoY2hpcC0+ZGV2LCBwZGF0 YS0+bnJfY2hhbm5lbHMsDQo+IHNpemVvZigqZHctPmNoYW4pLA0KPiBAQCAtMTU2OSw3ICsxNTc2 LDcgQEAgaW50IGR3X2RtYV9wcm9iZShzdHJ1Y3QgZHdfZG1hX2NoaXAgKmNoaXApDQo+IMKgCQkJ CShkd2NfcGFyYW1zID4+IERXQ19QQVJBTVNfTUJMS19FTiAmDQo+IDB4MSkgPT0gMDsNCj4gwqAJ CX0gZWxzZSB7DQo+IMKgCQkJZHdjLT5ibG9ja19zaXplID0gcGRhdGEtPmJsb2NrX3NpemU7DQo+ IC0JCQlkd2MtPm5vbGxwID0gcGRhdGEtPmlzX25vbGxwOw0KPiArCQkJZHdjLT5ub2xscCA9IHRl c3RfYml0KFFVSVJLU19JU19OT0xMUCwNCj4gJnBkYXRhLT5xdWlya3MpOw0KPiDCoAkJfQ0KPiDC oAl9DQo+IMKgDQo+IEBAIC0xNTgyLDkgKzE1ODksOSBAQCBpbnQgZHdfZG1hX3Byb2JlKHN0cnVj dCBkd19kbWFfY2hpcCAqY2hpcCkNCj4gwqANCj4gwqAJLyogU2V0IGNhcGFiaWxpdGllcyAqLw0K PiDCoAlkbWFfY2FwX3NldChETUFfU0xBVkUsIGR3LT5kbWEuY2FwX21hc2spOw0KPiAtCWlmIChw ZGF0YS0+aXNfcHJpdmF0ZSkNCj4gKwlpZiAodGVzdF9iaXQoUVVJUktTX0lTX1BSSVZBVEUsICZw ZGF0YS0+cXVpcmtzKSkNCj4gwqAJCWRtYV9jYXBfc2V0KERNQV9QUklWQVRFLCBkdy0+ZG1hLmNh cF9tYXNrKTsNCj4gLQlpZiAocGRhdGEtPmlzX21lbWNweSkNCj4gKwlpZiAodGVzdF9iaXQoUVVJ UktTX0lTX01FTUNQWSwgJnBkYXRhLT5xdWlya3MpKQ0KPiDCoAkJZG1hX2NhcF9zZXQoRE1BX01F TUNQWSwgZHctPmRtYS5jYXBfbWFzayk7DQo+IMKgDQo+IMKgCWR3LT5kbWEuZGV2ID0gY2hpcC0+ ZGV2Ow0KPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9kbWEvZHcvcGxhdGZvcm0uYyBiL2RyaXZlcnMv ZG1hL2R3L3BsYXRmb3JtLmMNCj4gaW5kZXggNWJkYTBlYi4uMzA4Yjk3NyAxMDA2NDQNCj4gLS0t IGEvZHJpdmVycy9kbWEvZHcvcGxhdGZvcm0uYw0KPiArKysgYi9kcml2ZXJzL2RtYS9kdy9wbGF0 Zm9ybS5jDQo+IEBAIC0xMiw2ICsxMiw3IEBADQo+IMKgICogcHVibGlzaGVkIGJ5IHRoZSBGcmVl IFNvZnR3YXJlIEZvdW5kYXRpb24uDQo+IMKgICovDQo+IMKgDQo+ICsjaW5jbHVkZSA8bGludXgv Yml0b3BzLmg+DQo+IMKgI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPg0KPiDCoCNpbmNsdWRlIDxs aW51eC9kZXZpY2UuaD4NCj4gwqAjaW5jbHVkZSA8bGludXgvY2xrLmg+DQo+IEBAIC0xMTEsNDEg KzExMiw0OCBAQCBkd19kbWFfcGFyc2VfZHQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikN Cj4gwqAJCXJldHVybiBOVUxMOw0KPiDCoAl9DQo+IMKgDQo+IC0JaWYgKG9mX3Byb3BlcnR5X3Jl YWRfdTMyKG5wLCAiZG1hLW1hc3RlcnMiLCAmbnJfbWFzdGVycykpDQo+IC0JCXJldHVybiBOVUxM Ow0KPiAtCWlmIChucl9tYXN0ZXJzIDwgMSB8fCBucl9tYXN0ZXJzID4gRFdfRE1BX01BWF9OUl9N QVNURVJTKQ0KPiAtCQlyZXR1cm4gTlVMTDsNCj4gLQ0KPiAtCWlmIChvZl9wcm9wZXJ0eV9yZWFk X3UzMihucCwgImRtYS1jaGFubmVscyIsICZucl9jaGFubmVscykpDQo+IC0JCXJldHVybiBOVUxM Ow0KPiAtDQo+IMKgCXBkYXRhID0gZGV2bV9remFsbG9jKCZwZGV2LT5kZXYsIHNpemVvZigqcGRh dGEpLA0KPiBHRlBfS0VSTkVMKTsNCj4gwqAJaWYgKCFwZGF0YSkNCj4gwqAJCXJldHVybiBOVUxM Ow0KPiDCoA0KPiArCXNldF9iaXQoUVVJUktTX09OTFlfVVNFRCwgJnBkYXRhLT5xdWlya3MpOw0K PiArDQo+ICsJaWYgKG9mX3Byb3BlcnR5X3JlYWRfYm9vbChucCwgImlzLXByaXZhdGUiKSkNCj4g KwkJc2V0X2JpdChRVUlSS1NfSVNfUFJJVkFURSwgJnBkYXRhLT5xdWlya3MpOw0KPiArDQo+ICsJ aWYgKG9mX3Byb3BlcnR5X3JlYWRfYm9vbChucCwgImlzLW1lbWNweSIpKQ0KPiArCQlzZXRfYml0 KFFVSVJLU19JU19NRU1DUFksICZwZGF0YS0+cXVpcmtzKTsNCj4gKw0KPiArCWlmIChvZl9wcm9w ZXJ0eV9yZWFkX2Jvb2wobnAsICJpcy1ub2xscCIpKQ0KPiArCQlzZXRfYml0KFFVSVJLU19JU19O T0xMUCwgJnBkYXRhLT5xdWlya3MpOw0KPiArDQo+ICsJaWYgKG9mX3Byb3BlcnR5X3JlYWRfdTMy KG5wLCAiZG1hLW1hc3RlcnMiLCAmbnJfbWFzdGVycykpDQo+ICsJCXJldHVybiBwZGF0YTsNCj4g KwlpZiAobnJfbWFzdGVycyA8IDEgfHwgbnJfbWFzdGVycyA+IERXX0RNQV9NQVhfTlJfTUFTVEVS UykNCj4gKwkJcmV0dXJuIHBkYXRhOw0KPiArDQo+IMKgCXBkYXRhLT5ucl9tYXN0ZXJzID0gbnJf bWFzdGVyczsNCj4gLQlwZGF0YS0+bnJfY2hhbm5lbHMgPSBucl9jaGFubmVsczsNCj4gwqANCj4g LQlpZiAob2ZfcHJvcGVydHlfcmVhZF9ib29sKG5wLCAiaXNfcHJpdmF0ZSIpKQ0KPiAtCQlwZGF0 YS0+aXNfcHJpdmF0ZSA9IHRydWU7DQo+ICsJaWYgKG9mX3Byb3BlcnR5X3JlYWRfdTMyKG5wLCAi ZG1hLWNoYW5uZWxzIiwgJm5yX2NoYW5uZWxzKSkNCj4gKwkJcmV0dXJuIHBkYXRhOw0KPiDCoA0K PiAtCWlmICghb2ZfcHJvcGVydHlfcmVhZF91MzIobnAsICJjaGFuX2FsbG9jYXRpb25fb3JkZXIi LA0KPiAmdG1wKSkNCj4gKwlwZGF0YS0+bnJfY2hhbm5lbHMgPSBucl9jaGFubmVsczsNCj4gKw0K PiArCWlmICghb2ZfcHJvcGVydHlfcmVhZF91MzIobnAsICJjaGFuLWFsbG9jYXRpb24tb3JkZXIi LA0KPiAmdG1wKSkNCj4gwqAJCXBkYXRhLT5jaGFuX2FsbG9jYXRpb25fb3JkZXIgPSAodW5zaWdu ZWQgY2hhcil0bXA7DQo+IMKgDQo+IC0JaWYgKCFvZl9wcm9wZXJ0eV9yZWFkX3UzMihucCwgImNo YW5fcHJpb3JpdHkiLCAmdG1wKSkNCj4gKwlpZiAoIW9mX3Byb3BlcnR5X3JlYWRfdTMyKG5wLCAi Y2hhbi1wcmlvcml0eSIsICZ0bXApKQ0KPiDCoAkJcGRhdGEtPmNoYW5fcHJpb3JpdHkgPSB0bXA7 DQo+IMKgDQo+IC0JaWYgKCFvZl9wcm9wZXJ0eV9yZWFkX3UzMihucCwgImJsb2NrX3NpemUiLCAm dG1wKSkNCj4gKwlpZiAoIW9mX3Byb3BlcnR5X3JlYWRfdTMyKG5wLCAiYmxvY2stc2l6ZSIsICZ0 bXApKQ0KPiDCoAkJcGRhdGEtPmJsb2NrX3NpemUgPSB0bXA7DQo+IMKgDQo+IMKgCWlmICghb2Zf cHJvcGVydHlfcmVhZF91MzJfYXJyYXkobnAsICJkYXRhLXdpZHRoIiwgYXJyLA0KPiBucl9tYXN0 ZXJzKSkgew0KPiDCoAkJZm9yICh0bXAgPSAwOyB0bXAgPCBucl9tYXN0ZXJzOyB0bXArKykNCj4g wqAJCQlwZGF0YS0+ZGF0YV93aWR0aFt0bXBdID0gYXJyW3RtcF07DQo+IC0JfSBlbHNlIGlmICgh b2ZfcHJvcGVydHlfcmVhZF91MzJfYXJyYXkobnAsICJkYXRhX3dpZHRoIiwNCj4gYXJyLCBucl9t YXN0ZXJzKSkgew0KPiAtCQlmb3IgKHRtcCA9IDA7IHRtcCA8IG5yX21hc3RlcnM7IHRtcCsrKQ0K PiAtCQkJcGRhdGEtPmRhdGFfd2lkdGhbdG1wXSA9IEJJVChhcnJbdG1wXSAmDQo+IDB4MDcpOw0K PiDCoAl9DQo+IMKgDQo+ICsJY2xlYXJfYml0KFFVSVJLU19PTkxZX1VTRUQsICZwZGF0YS0+cXVp cmtzKTsNCj4gwqAJcmV0dXJuIHBkYXRhOw0KPiDCoH0NCj4gwqAjZWxzZQ0KPiBkaWZmIC0tZ2l0 IGEvaW5jbHVkZS9saW51eC9wbGF0Zm9ybV9kYXRhL2RtYS1kdy5oDQo+IGIvaW5jbHVkZS9saW51 eC9wbGF0Zm9ybV9kYXRhL2RtYS1kdy5oDQo+IGluZGV4IDVmMGUxMWUuLjljZDgxOTkgMTAwNjQ0 DQo+IC0tLSBhL2luY2x1ZGUvbGludXgvcGxhdGZvcm1fZGF0YS9kbWEtZHcuaA0KPiArKysgYi9p bmNsdWRlL2xpbnV4L3BsYXRmb3JtX2RhdGEvZG1hLWR3LmgNCj4gQEAgLTM3LDEwICszNyw3IEBA IHN0cnVjdCBkd19kbWFfc2xhdmUgew0KPiDCoC8qKg0KPiDCoCAqIHN0cnVjdCBkd19kbWFfcGxh dGZvcm1fZGF0YSAtIENvbnRyb2xsZXIgY29uZmlndXJhdGlvbiBwYXJhbWV0ZXJzDQo+IMKgICog QG5yX2NoYW5uZWxzOiBOdW1iZXIgb2YgY2hhbm5lbHMgc3VwcG9ydGVkIGJ5IGhhcmR3YXJlICht YXggOCkNCj4gLSAqIEBpc19wcml2YXRlOiBUaGUgZGV2aWNlIGNoYW5uZWxzIHNob3VsZCBiZSBt YXJrZWQgYXMgcHJpdmF0ZSBhbmQNCj4gbm90IGZvcg0KPiAtICoJYnkgdGhlIGdlbmVyYWwgcHVy cG9zZSBETUEgY2hhbm5lbCBhbGxvY2F0b3IuDQo+IC0gKiBAaXNfbWVtY3B5OiBUaGUgZGV2aWNl IGNoYW5uZWxzIGRvIHN1cHBvcnQgbWVtb3J5LXRvLW1lbW9yeQ0KPiB0cmFuc2ZlcnMuDQo+IC0g KiBAaXNfbm9sbHA6IFRoZSBkZXZpY2UgY2hhbm5lbHMgZG9lcyBub3Qgc3VwcG9ydCBtdWx0aSBi bG9jaw0KPiB0cmFuc2ZlcnMuDQo+ICsgKiBAcXVpcmtzOiBCaXQgZmllbGQgd2l0aCBwbGF0Zm9y bSBxdWlya3MNCj4gwqAgKiBAY2hhbl9hbGxvY2F0aW9uX29yZGVyOiBBbGxvY2F0ZSBjaGFubmVs cyBzdGFydGluZyBmcm9tIDAgb3IgNw0KPiDCoCAqIEBjaGFuX3ByaW9yaXR5OiBTZXQgY2hhbm5l bCBwcmlvcml0eSBpbmNyZWFzaW5nIGZyb20gMCB0byA3IG9yIDcNCj4gdG8gMC4NCj4gwqAgKiBA YmxvY2tfc2l6ZTogTWF4aW11bSBibG9jayBzaXplIHN1cHBvcnRlZCBieSB0aGUgY29udHJvbGxl cg0KPiBAQCAtNTAsOSArNDcsMTggQEAgc3RydWN0IGR3X2RtYV9zbGF2ZSB7DQo+IMKgICovDQo+ IMKgc3RydWN0IGR3X2RtYV9wbGF0Zm9ybV9kYXRhIHsNCj4gwqAJdW5zaWduZWQgaW50CW5yX2No YW5uZWxzOw0KPiAtCWJvb2wJCWlzX3ByaXZhdGU7DQo+IC0JYm9vbAkJaXNfbWVtY3B5Ow0KPiAt CWJvb2wJCWlzX25vbGxwOw0KPiArLyogT25seSB1c2UgcXVpcmtzIGZyb20gcGxhdGZvcm0gZGF0 YSBzdHJ1Y3R1cmUgKi8NCj4gKyNkZWZpbmUgUVVJUktTX09OTFlfVVNFRAkwDQo+ICsvKg0KPiAr ICogVGhlIGRldmljZSBjaGFubmVscyBzaG91bGQgYmUgbWFya2VkIGFzIHByaXZhdGUgYW5kIG5v dCBmb3INCj4gKyAqIGJ5IHRoZSBnZW5lcmFsIHB1cnBvc2UgRE1BIGNoYW5uZWwgYWxsb2NhdG9y Lg0KPiArICovDQo+ICsjZGVmaW5lIFFVSVJLU19JU19QUklWQVRFCTENCj4gKy8qIFRoZSBkZXZp Y2UgY2hhbm5lbHMgZG8gc3VwcG9ydCBtZW1vcnktdG8tbWVtb3J5IHRyYW5zZmVycy4gKi8NCj4g KyNkZWZpbmUgUVVJUktTX0lTX01FTUNQWQkyDQo+ICsvKiBUaGUgZGV2aWNlIGNoYW5uZWxzIGRv IG5vdCBzdXBwb3J0IG11bHRpIGJsb2NrIHRyYW5zZmVycy4gKi8NCj4gKyNkZWZpbmUgUVVJUktT X0lTX05PTExQCQkzDQo+ICsJdW5zaWduZWQgbG9uZwlxdWlya3M7DQo+IMKgI2RlZmluZSBDSEFO X0FMTE9DQVRJT05fQVNDRU5ESU5HCTAJLyogemVybyB0byBzZXZlbg0KPiAqLw0KPiDCoCNkZWZp bmUgQ0hBTl9BTExPQ0FUSU9OX0RFU0NFTkRJTkcJMQkvKiBzZXZlbiB0byB6ZXJvDQo+ICovDQo+ IMKgCXVuc2lnbmVkIGNoYXIJY2hhbl9hbGxvY2F0aW9uX29yZGVyOw0KLS0gDQrCoFBhbHRzZXYg RXVnZW5peQ0K -- To unsubscribe from this list: send the line "unsubscribe dmaengine" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
On Wed, 2016-10-05 at 15:14 +0000, Eugeniy Paltsev wrote: > Hi Andy, > what do you think about these changes? I was off for few weeks, will look at this next week.
SGnCoEFuZHksDQpPbiBGcmksIDIwMTYtMTAtMDcgYXQgMTQ6MDUgKzAzMDAsIEFuZHkgU2hldmNo ZW5rbyB3cm90ZToNCj4gT24gV2VkLCAyMDE2LTEwLTA1IGF0IDE1OjE0ICswMDAwLCBFdWdlbml5 IFBhbHRzZXYgd3JvdGU6DQo+ID4gDQo+ID4gSGnCoEFuZHksDQo+ID4gd2hhdCBkbyB5b3UgdGhp bmsgYWJvdXTCoHRoZXNlIGNoYW5nZXM/DQo+IEkgd2FzIG9mZiBmb3IgZmV3IHdlZWtzLCB3aWxs IGxvb2sgYXQgdGhpcyBuZXh0IHdlZWsuDQo+IA0KSSB3YXMgd29uZGVyaW5nIHlvdSB0byB0ZWxs IHlvdXJzIGlkZWFzIGFib3V0IHRoaXMgcGF0Y2gsIGlmIHlvdSBoYXZlDQphbnkgdGltZSBmb3Ig dGhpcy4NCg0KLS0gDQrCoFBhbHRzZXYgRXVnZW5peQ0K -- To unsubscribe from this list: send the line "unsubscribe dmaengine" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
On Thu, 2016-09-15 at 16:14 +0300, Eugeniy Paltsev wrote: > This patch is to address a proposal by Andy in this thread: > http://www.spinics.net/lists/dmaengine/msg10754.html > Split platform data to actual hardware properties, and platform > quirks. > Now we able to use quirks and hardware properties separately from > different sources (pdata, device tree or autoconfig registers) > My comments below. Sorry for delayed answer. > Signed-off-by: Eugeniy Paltsev <Eugeniy.Paltsev@synopsys.com> > --- > drivers/dma/dw/core.c | 31 +++++++++++++++----------- > drivers/dma/dw/platform.c | 42 +++++++++++++++++++++---- > ----------- > include/linux/platform_data/dma-dw.h | 20 +++++++++++------ > 3 files changed, 57 insertions(+), 36 deletions(-) > > diff --git a/drivers/dma/dw/core.c b/drivers/dma/dw/core.c > index c2c0a61..9352735 100644 > --- a/drivers/dma/dw/core.c > +++ b/drivers/dma/dw/core.c > @@ -1451,10 +1451,25 @@ int dw_dma_probe(struct dw_dma_chip *chip) > > dw->regs = chip->regs; > chip->dw = dw; + empty line. > + /* Reassign the platform data pointer */ > + pdata = dw->pdata; > > pm_runtime_get_sync(chip->dev); > > - if (!chip->pdata) { > + if ((!chip->pdata) || > + (chip->pdata && test_bit(QUIRKS_ONLY_USED, &chip->pdata- I don't think you need atomic test / set of those bits. > >quirks))) { > + > + /* > + * Fill quirks with the default values in case of > pdata absence /* * Multi-line comments should include full sentences * (punctuation matters). */ > + */ > + if (!chip->pdata) { > + set_bit(QUIRKS_IS_PRIVATE, &pdata->quirks); > + set_bit(QUIRKS_IS_MEMCPY, &pdata->quirks); > + set_bit(QUIRKS_IS_NOLLP, &pdata->quirks); > + } else { > + pdata->quirks = chip->pdata->quirks; > + } > + > dw_params = dma_readl(dw, DW_PARAMS); > dev_dbg(chip->dev, "DW_PARAMS: 0x%08x\n", dw_params); > > @@ -1464,9 +1479,6 @@ int dw_dma_probe(struct dw_dma_chip *chip) > goto err_pdata; > } > > - /* Reassign the platform data pointer */ > - pdata = dw->pdata; > - > /* Get hardware configuration parameters */ > pdata->nr_channels = (dw_params >> DW_PARAMS_NR_CHAN > & 7) + 1; > pdata->nr_masters = (dw_params >> DW_PARAMS_NR_MASTER > & 3) + 1; > @@ -1477,8 +1489,6 @@ int dw_dma_probe(struct dw_dma_chip *chip) > pdata->block_size = dma_readl(dw, MAX_BLK_SIZE); > > /* Fill platform data with the default values */ > - pdata->is_private = true; > - pdata->is_memcpy = true; > pdata->chan_allocation_order = > CHAN_ALLOCATION_ASCENDING; > pdata->chan_priority = CHAN_PRIORITY_ASCENDING; > } else if (chip->pdata->nr_channels > DW_DMA_MAX_NR_CHANNELS) > { > @@ -1486,9 +1496,6 @@ int dw_dma_probe(struct dw_dma_chip *chip) > goto err_pdata; > } else { > memcpy(dw->pdata, chip->pdata, sizeof(*dw->pdata)); > - > - /* Reassign the platform data pointer */ > - pdata = dw->pdata; > } > > dw->chan = devm_kcalloc(chip->dev, pdata->nr_channels, > sizeof(*dw->chan), > @@ -1569,7 +1576,7 @@ int dw_dma_probe(struct dw_dma_chip *chip) > (dwc_params >> DWC_PARAMS_MBLK_EN & > 0x1) == 0; > } else { > dwc->block_size = pdata->block_size; > - dwc->nollp = pdata->is_nollp; > + dwc->nollp = test_bit(QUIRKS_IS_NOLLP, > &pdata->quirks); Perhaps you need another patch which actually moves nollp to dwc->flags. > } > } > > @@ -1582,9 +1589,9 @@ int dw_dma_probe(struct dw_dma_chip *chip) > > /* Set capabilities */ > dma_cap_set(DMA_SLAVE, dw->dma.cap_mask); > - if (pdata->is_private) > + if (test_bit(QUIRKS_IS_PRIVATE, &pdata->quirks)) > dma_cap_set(DMA_PRIVATE, dw->dma.cap_mask); > - if (pdata->is_memcpy) > + if (test_bit(QUIRKS_IS_MEMCPY, &pdata->quirks)) > dma_cap_set(DMA_MEMCPY, dw->dma.cap_mask); > > dw->dma.dev = chip->dev; > diff --git a/drivers/dma/dw/platform.c b/drivers/dma/dw/platform.c > index 5bda0eb..308b977 100644 > --- a/drivers/dma/dw/platform.c > +++ b/drivers/dma/dw/platform.c > @@ -12,6 +12,7 @@ > * published by the Free Software Foundation. > */ > > +#include <linux/bitops.h> > #include <linux/module.h> > #include <linux/device.h> > #include <linux/clk.h> > @@ -111,41 +112,48 @@ dw_dma_parse_dt(struct platform_device *pdev) > return NULL; > } > > - if (of_property_read_u32(np, "dma-masters", &nr_masters)) > - return NULL; > - if (nr_masters < 1 || nr_masters > DW_DMA_MAX_NR_MASTERS) > - return NULL; > - > - if (of_property_read_u32(np, "dma-channels", &nr_channels)) > - return NULL; > - > pdata = devm_kzalloc(&pdev->dev, sizeof(*pdata), GFP_KERNEL); > if (!pdata) > return NULL; > > + set_bit(QUIRKS_ONLY_USED, &pdata->quirks); > + > + if (of_property_read_bool(np, "is-private")) > + set_bit(QUIRKS_IS_PRIVATE, &pdata->quirks); > + > + if (of_property_read_bool(np, "is-memcpy")) > + set_bit(QUIRKS_IS_MEMCPY, &pdata->quirks); > + > + if (of_property_read_bool(np, "is-nollp")) > + set_bit(QUIRKS_IS_NOLLP, &pdata->quirks); I would suggest to convert to unified device property API first. > + > + if (of_property_read_u32(np, "dma-masters", &nr_masters)) > + return pdata; > + if (nr_masters < 1 || nr_masters > DW_DMA_MAX_NR_MASTERS) > + return pdata; > + > pdata->nr_masters = nr_masters; > - pdata->nr_channels = nr_channels; > > - if (of_property_read_bool(np, "is_private")) > - pdata->is_private = true; > + if (of_property_read_u32(np, "dma-channels", &nr_channels)) > + return pdata; > > - if (!of_property_read_u32(np, "chan_allocation_order", &tmp)) > + pdata->nr_channels = nr_channels; > + > + if (!of_property_read_u32(np, "chan-allocation-order", &tmp)) > pdata->chan_allocation_order = (unsigned char)tmp; > > - if (!of_property_read_u32(np, "chan_priority", &tmp)) > + if (!of_property_read_u32(np, "chan-priority", &tmp)) > pdata->chan_priority = tmp; > > - if (!of_property_read_u32(np, "block_size", &tmp)) > + if (!of_property_read_u32(np, "block-size", &tmp)) > pdata->block_size = tmp; > > if (!of_property_read_u32_array(np, "data-width", arr, > nr_masters)) { > for (tmp = 0; tmp < nr_masters; tmp++) > pdata->data_width[tmp] = arr[tmp]; > - } else if (!of_property_read_u32_array(np, "data_width", arr, > nr_masters)) { > - for (tmp = 0; tmp < nr_masters; tmp++) > - pdata->data_width[tmp] = BIT(arr[tmp] & > 0x07); > } > > + clear_bit(QUIRKS_ONLY_USED, &pdata->quirks); > return pdata; > } > #else > diff --git a/include/linux/platform_data/dma-dw.h > b/include/linux/platform_data/dma-dw.h > index 5f0e11e..9cd8199 100644 > --- a/include/linux/platform_data/dma-dw.h > +++ b/include/linux/platform_data/dma-dw.h > @@ -37,10 +37,7 @@ struct dw_dma_slave { > /** > * struct dw_dma_platform_data - Controller configuration parameters > * @nr_channels: Number of channels supported by hardware (max 8) > - * @is_private: The device channels should be marked as private and > not for > - * by the general purpose DMA channel allocator. > - * @is_memcpy: The device channels do support memory-to-memory > transfers. > - * @is_nollp: The device channels does not support multi block > transfers. > + * @quirks: Bit field with platform quirks > * @chan_allocation_order: Allocate channels starting from 0 or 7 > * @chan_priority: Set channel priority increasing from 0 to 7 or 7 > to 0. > * @block_size: Maximum block size supported by the controller > @@ -50,9 +47,18 @@ struct dw_dma_slave { > */ > struct dw_dma_platform_data { > unsigned int nr_channels; > - bool is_private; > - bool is_memcpy; > - bool is_nollp; > +/* Only use quirks from platform data structure */ > +#define QUIRKS_ONLY_USED 0 > +/* > + * The device channels should be marked as private and not for > + * by the general purpose DMA channel allocator. > + */ > +#define QUIRKS_IS_PRIVATE 1 > +/* The device channels do support memory-to-memory transfers. */ > +#define QUIRKS_IS_MEMCPY 2 > +/* The device channels do not support multi block transfers. */ > +#define QUIRKS_IS_NOLLP 3 You may move descriptions to above struct description field. It will be consolidated and moreover visible in kernel-doc processed documents. > + unsigned long quirks; > #define CHAN_ALLOCATION_ASCENDING 0 /* zero to seven */ > #define CHAN_ALLOCATION_DESCENDING 1 /* seven to zero > */ > unsigned char chan_allocation_order;
T24gVGh1LCAyMDE2LTEwLTIwIGF0IDEzOjQ4ICswMzAwLCBBbmR5IFNoZXZjaGVua28gd3JvdGU6 DQo+IE9uIFRodSwgMjAxNi0wOS0xNSBhdCAxNjoxNCArMDMwMCwgRXVnZW5peSBQYWx0c2V2IHdy b3RlOg0KPiA+IA0KPiA+IFRoaXMgcGF0Y2ggaXMgdG8gYWRkcmVzcyBhIHByb3Bvc2FsIGJ5IEFu ZHkgaW4gdGhpcyB0aHJlYWQ6DQo+ID4gaHR0cDovL3d3dy5zcGluaWNzLm5ldC9saXN0cy9kbWFl bmdpbmUvbXNnMTA3NTQuaHRtbA0KPiA+IFNwbGl0IHBsYXRmb3JtIGRhdGEgdG8gYWN0dWFsIGhh cmR3YXJlIHByb3BlcnRpZXMsIGFuZCBwbGF0Zm9ybQ0KPiA+IHF1aXJrcy4NCj4gPiBOb3cgd2Ug YWJsZSB0byB1c2UgcXVpcmtzIGFuZCBoYXJkd2FyZSBwcm9wZXJ0aWVzIHNlcGFyYXRlbHkgZnJv bQ0KPiA+IGRpZmZlcmVudCBzb3VyY2VzIChwZGF0YSwgZGV2aWNlIHRyZWUgb3IgYXV0b2NvbmZp ZyByZWdpc3RlcnMpDQo+ID4gDQo+IE15IGNvbW1lbnRzIGJlbG93Lg0KPiANCj4gU29ycnkgZm9y IGRlbGF5ZWQgYW5zd2VyLg0KTm8gcHJvYmxlbXMuDQo+IA0KPiA+IA0KPiA+IFNpZ25lZC1vZmYt Ynk6IEV1Z2VuaXkgUGFsdHNldiA8RXVnZW5peS5QYWx0c2V2QHN5bm9wc3lzLmNvbT4NCj4gPiAt LS0NCj4gPiDCoGRyaXZlcnMvZG1hL2R3L2NvcmUuY8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgfCAzMSArKysrKysrKysrKysrKystLS0tLS0tLS0NCj4gPiAtLQ0KPiA+IMKgZHJpdmVy cy9kbWEvZHcvcGxhdGZvcm0uY8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHwgNDIgKysrKysrKysr KysrKysrKysrKysrLS0tDQo+ID4gLQ0KPiA+IC0tLS0tLS0tLS0tDQo+ID4gwqBpbmNsdWRlL2xp bnV4L3BsYXRmb3JtX2RhdGEvZG1hLWR3LmggfCAyMCArKysrKysrKysrKy0tLS0tLQ0KPiA+IMKg MyBmaWxlcyBjaGFuZ2VkLCA1NyBpbnNlcnRpb25zKCspLCAzNiBkZWxldGlvbnMoLSkNCj4gPiAN Cj4gPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9kbWEvZHcvY29yZS5jIGIvZHJpdmVycy9kbWEvZHcv Y29yZS5jDQo+ID4gaW5kZXggYzJjMGE2MS4uOTM1MjczNSAxMDA2NDQNCj4gPiAtLS0gYS9kcml2 ZXJzL2RtYS9kdy9jb3JlLmMNCj4gPiArKysgYi9kcml2ZXJzL2RtYS9kdy9jb3JlLmMNCj4gPiBA QCAtMTQ1MSwxMCArMTQ1MSwyNSBAQCBpbnQgZHdfZG1hX3Byb2JlKHN0cnVjdCBkd19kbWFfY2hp cCAqY2hpcCkNCj4gPiDCoA0KPiA+IMKgCWR3LT5yZWdzID0gY2hpcC0+cmVnczsNCj4gPiDCoAlj aGlwLT5kdyA9IGR3Ow0KPiArIGVtcHR5IGxpbmUuDQo+IA0KPiA+IA0KPiA+ICsJLyogUmVhc3Np Z24gdGhlIHBsYXRmb3JtIGRhdGEgcG9pbnRlciAqLw0KPiA+ICsJcGRhdGEgPSBkdy0+cGRhdGE7 DQo+ID4gwqANCj4gPiDCoAlwbV9ydW50aW1lX2dldF9zeW5jKGNoaXAtPmRldik7DQo+ID4gwqAN Cj4gPiAtCWlmICghY2hpcC0+cGRhdGEpIHsNCj4gPiArCWlmICgoIWNoaXAtPnBkYXRhKSB8fA0K PiA+ICsJwqDCoMKgKGNoaXAtPnBkYXRhICYmIHRlc3RfYml0KFFVSVJLU19PTkxZX1VTRUQsICZj aGlwLQ0KPiA+ID5wZGF0YS0NCj4gSSBkb24ndCB0aGluayB5b3UgbmVlZCBhdG9taWMgdGVzdCAv IHNldCBvZiB0aG9zZSBiaXRzLg0KSSBkb24ndCBuZWVkwqBhdG9taWMgYml0IG9wZXJhdGlvbnMg aGVyZSwgSSBqdXN0IHVzZWQgc3RhbmRhcmQgYml0IEFQSQ0KdG8gbWFrZSBjb2RlIG1vcmUgY2xl YXIuDQoNCj4gPiANCj4gPiA+IA0KPiA+ID4gcXVpcmtzKSkpIHsNCj4gPiArDQo+ID4gKwkJLyoN Cj4gPiArCQnCoCogRmlsbCBxdWlya3Mgd2l0aCB0aGUgZGVmYXVsdCB2YWx1ZXMgaW4gY2FzZSBv Zg0KPiA+IHBkYXRhIGFic2VuY2UNCj4gLyoNCj4gwqAqIE11bHRpLWxpbmUgY29tbWVudHMgc2hv dWxkIGluY2x1ZGUgZnVsbCBzZW50ZW5jZXMNCj4gwqAqIChwdW5jdHVhdGlvbiBtYXR0ZXJzKS4N Cj4gwqAqLw0KPiANCj4gPiANCj4gPiArCQnCoCovDQo+ID4gKwkJaWYgKCFjaGlwLT5wZGF0YSkg ew0KPiA+ICsJCQlzZXRfYml0KFFVSVJLU19JU19QUklWQVRFLCAmcGRhdGEtDQo+ID4gPnF1aXJr cyk7DQo+ID4gKwkJCXNldF9iaXQoUVVJUktTX0lTX01FTUNQWSwgJnBkYXRhLT5xdWlya3MpOw0K PiA+ICsJCQlzZXRfYml0KFFVSVJLU19JU19OT0xMUCwgJnBkYXRhLT5xdWlya3MpOw0KPiA+ICsJ CX0gZWxzZSB7DQo+ID4gKwkJCXBkYXRhLT5xdWlya3MgPSBjaGlwLT5wZGF0YS0+cXVpcmtzOw0K PiA+ICsJCX0NCj4gPiArDQo+ID4gwqAJCWR3X3BhcmFtcyA9IGRtYV9yZWFkbChkdywgRFdfUEFS QU1TKTsNCj4gPiDCoAkJZGV2X2RiZyhjaGlwLT5kZXYsICJEV19QQVJBTVM6IDB4JTA4eFxuIiwN Cj4gPiBkd19wYXJhbXMpOw0KPiA+IMKgDQo+ID4gQEAgLTE0NjQsOSArMTQ3OSw2IEBAIGludCBk d19kbWFfcHJvYmUoc3RydWN0IGR3X2RtYV9jaGlwICpjaGlwKQ0KPiA+IMKgCQkJZ290byBlcnJf cGRhdGE7DQo+ID4gwqAJCX0NCj4gPiDCoA0KPiA+IC0JCS8qIFJlYXNzaWduIHRoZSBwbGF0Zm9y bSBkYXRhIHBvaW50ZXIgKi8NCj4gPiAtCQlwZGF0YSA9IGR3LT5wZGF0YTsNCj4gPiAtDQo+ID4g wqAJCS8qIEdldCBoYXJkd2FyZSBjb25maWd1cmF0aW9uIHBhcmFtZXRlcnMgKi8NCj4gPiDCoAkJ cGRhdGEtPm5yX2NoYW5uZWxzID0gKGR3X3BhcmFtcyA+Pg0KPiA+IERXX1BBUkFNU19OUl9DSEFO DQo+ID4gJiA3KSArIDE7DQo+ID4gwqAJCXBkYXRhLT5ucl9tYXN0ZXJzID0gKGR3X3BhcmFtcyA+ Pg0KPiA+IERXX1BBUkFNU19OUl9NQVNURVINCj4gPiAmIDMpICsgMTsNCj4gPiBAQCAtMTQ3Nyw4 ICsxNDg5LDYgQEAgaW50IGR3X2RtYV9wcm9iZShzdHJ1Y3QgZHdfZG1hX2NoaXAgKmNoaXApDQo+ ID4gwqAJCXBkYXRhLT5ibG9ja19zaXplID0gZG1hX3JlYWRsKGR3LCBNQVhfQkxLX1NJWkUpOw0K PiA+IMKgDQo+ID4gwqAJCS8qIEZpbGwgcGxhdGZvcm0gZGF0YSB3aXRoIHRoZSBkZWZhdWx0IHZh bHVlcyAqLw0KPiA+IC0JCXBkYXRhLT5pc19wcml2YXRlID0gdHJ1ZTsNCj4gPiAtCQlwZGF0YS0+ aXNfbWVtY3B5ID0gdHJ1ZTsNCj4gPiDCoAkJcGRhdGEtPmNoYW5fYWxsb2NhdGlvbl9vcmRlciA9 DQo+ID4gQ0hBTl9BTExPQ0FUSU9OX0FTQ0VORElORzsNCj4gPiDCoAkJcGRhdGEtPmNoYW5fcHJp b3JpdHkgPSBDSEFOX1BSSU9SSVRZX0FTQ0VORElORzsNCj4gPiDCoAl9IGVsc2UgaWYgKGNoaXAt PnBkYXRhLT5ucl9jaGFubmVscyA+DQo+ID4gRFdfRE1BX01BWF9OUl9DSEFOTkVMUykNCj4gPiB7 DQo+ID4gQEAgLTE0ODYsOSArMTQ5Niw2IEBAIGludCBkd19kbWFfcHJvYmUoc3RydWN0IGR3X2Rt YV9jaGlwICpjaGlwKQ0KPiA+IMKgCQlnb3RvIGVycl9wZGF0YTsNCj4gPiDCoAl9IGVsc2Ugew0K PiA+IMKgCQltZW1jcHkoZHctPnBkYXRhLCBjaGlwLT5wZGF0YSwgc2l6ZW9mKCpkdy0NCj4gPiA+ cGRhdGEpKTsNCj4gPiAtDQo+ID4gLQkJLyogUmVhc3NpZ24gdGhlIHBsYXRmb3JtIGRhdGEgcG9p bnRlciAqLw0KPiA+IC0JCXBkYXRhID0gZHctPnBkYXRhOw0KPiA+IMKgCX0NCj4gPiDCoA0KPiA+ IMKgCWR3LT5jaGFuID0gZGV2bV9rY2FsbG9jKGNoaXAtPmRldiwgcGRhdGEtPm5yX2NoYW5uZWxz LA0KPiA+IHNpemVvZigqZHctPmNoYW4pLA0KPiA+IEBAIC0xNTY5LDcgKzE1NzYsNyBAQCBpbnQg ZHdfZG1hX3Byb2JlKHN0cnVjdCBkd19kbWFfY2hpcCAqY2hpcCkNCj4gPiDCoAkJCQkoZHdjX3Bh cmFtcyA+PiBEV0NfUEFSQU1TX01CTEtfRU4NCj4gPiAmDQo+ID4gMHgxKSA9PSAwOw0KPiA+IMKg CQl9IGVsc2Ugew0KPiA+IMKgCQkJZHdjLT5ibG9ja19zaXplID0gcGRhdGEtPmJsb2NrX3NpemU7 DQo+ID4gLQkJCWR3Yy0+bm9sbHAgPSBwZGF0YS0+aXNfbm9sbHA7DQo+ID4gKwkJCWR3Yy0+bm9s bHAgPSB0ZXN0X2JpdChRVUlSS1NfSVNfTk9MTFAsDQo+ID4gJnBkYXRhLT5xdWlya3MpOw0KPiBQ ZXJoYXBzIHlvdSBuZWVkIGFub3RoZXIgcGF0Y2ggd2hpY2ggYWN0dWFsbHkgbW92ZXMgbm9sbHAg dG8gZHdjLQ0KPiA+ZmxhZ3MuDQpBcyBJIGNhbiBzZWUsIHdlIGFscmVhZHkgaGF2ZcKgRFdfRE1B X0lTX1NPRlRfTExQIGZsYWcgaW4gImR3Yy0+ZmxhZ3MiDQp3aXRoIHNhbWUgZnVuY3Rpb25hbGl0 eSwgd2hpY2ggaXMgc2V0IGlmICJkd2MtPm5vbGxwIiBpcyB0cnVlLiBQcm9iYWJseQ0Kd2UgY2Fu IHVzZSB0aGlzIGZsYWcgYW5kIGdldCByaWQgb2YgImR3Yy0+bm9sbHAiLg0KQnV0IEknbSBhIGJp dCBjb25mdXNlZCB3aHkgd2UgY2xlYXIgRFdfRE1BX0lTX1NPRlRfTExQIGJpdCBpbg0KImR3Y19z Y2FuX2Rlc2NyaXB0b3JzIiBhbmQgImR3Y190ZXJtaW5hdGVfYWxsIiBmdW5jdGlvbnMuDQpBbnkg aWRlYXMgYWJvdXQgdGhhdD8NCg0KPiA+IA0KPiA+IMKgCQl9DQo+ID4gwqAJfQ0KPiA+IMKgDQo+ ID4gQEAgLTE1ODIsOSArMTU4OSw5IEBAIGludCBkd19kbWFfcHJvYmUoc3RydWN0IGR3X2RtYV9j aGlwICpjaGlwKQ0KPiA+IMKgDQo+ID4gwqAJLyogU2V0IGNhcGFiaWxpdGllcyAqLw0KPiA+IMKg CWRtYV9jYXBfc2V0KERNQV9TTEFWRSwgZHctPmRtYS5jYXBfbWFzayk7DQo+ID4gLQlpZiAocGRh dGEtPmlzX3ByaXZhdGUpDQo+ID4gKwlpZiAodGVzdF9iaXQoUVVJUktTX0lTX1BSSVZBVEUsICZw ZGF0YS0+cXVpcmtzKSkNCj4gPiDCoAkJZG1hX2NhcF9zZXQoRE1BX1BSSVZBVEUsIGR3LT5kbWEu Y2FwX21hc2spOw0KPiA+IC0JaWYgKHBkYXRhLT5pc19tZW1jcHkpDQo+ID4gKwlpZiAodGVzdF9i aXQoUVVJUktTX0lTX01FTUNQWSwgJnBkYXRhLT5xdWlya3MpKQ0KPiA+IMKgCQlkbWFfY2FwX3Nl dChETUFfTUVNQ1BZLCBkdy0+ZG1hLmNhcF9tYXNrKTsNCj4gPiDCoA0KPiA+IMKgCWR3LT5kbWEu ZGV2ID0gY2hpcC0+ZGV2Ow0KPiA+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2RtYS9kdy9wbGF0Zm9y bS5jIGIvZHJpdmVycy9kbWEvZHcvcGxhdGZvcm0uYw0KPiA+IGluZGV4IDViZGEwZWIuLjMwOGI5 NzcgMTAwNjQ0DQo+ID4gLS0tIGEvZHJpdmVycy9kbWEvZHcvcGxhdGZvcm0uYw0KPiA+ICsrKyBi L2RyaXZlcnMvZG1hL2R3L3BsYXRmb3JtLmMNCj4gPiBAQCAtMTIsNiArMTIsNyBAQA0KPiA+IMKg ICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uDQo+ID4gwqAgKi8N Cj4gPiDCoA0KPiA+ICsjaW5jbHVkZSA8bGludXgvYml0b3BzLmg+DQo+ID4gwqAjaW5jbHVkZSA8 bGludXgvbW9kdWxlLmg+DQo+ID4gwqAjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+DQo+ID4gwqAj aW5jbHVkZSA8bGludXgvY2xrLmg+DQo+ID4gQEAgLTExMSw0MSArMTEyLDQ4IEBAIGR3X2RtYV9w YXJzZV9kdChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQ0KPiA+IMKgCQlyZXR1cm4gTlVM TDsNCj4gPiDCoAl9DQo+ID4gwqANCj4gPiAtCWlmIChvZl9wcm9wZXJ0eV9yZWFkX3UzMihucCwg ImRtYS1tYXN0ZXJzIiwgJm5yX21hc3RlcnMpKQ0KPiA+IC0JCXJldHVybiBOVUxMOw0KPiA+IC0J aWYgKG5yX21hc3RlcnMgPCAxIHx8IG5yX21hc3RlcnMgPiBEV19ETUFfTUFYX05SX01BU1RFUlMp DQo+ID4gLQkJcmV0dXJuIE5VTEw7DQo+ID4gLQ0KPiA+IC0JaWYgKG9mX3Byb3BlcnR5X3JlYWRf dTMyKG5wLCAiZG1hLWNoYW5uZWxzIiwNCj4gPiAmbnJfY2hhbm5lbHMpKQ0KPiA+IC0JCXJldHVy biBOVUxMOw0KPiA+IC0NCj4gPiDCoAlwZGF0YSA9IGRldm1fa3phbGxvYygmcGRldi0+ZGV2LCBz aXplb2YoKnBkYXRhKSwNCj4gPiBHRlBfS0VSTkVMKTsNCj4gPiDCoAlpZiAoIXBkYXRhKQ0KPiA+ IMKgCQlyZXR1cm4gTlVMTDsNCj4gPiDCoA0KPiA+ICsJc2V0X2JpdChRVUlSS1NfT05MWV9VU0VE LCAmcGRhdGEtPnF1aXJrcyk7DQo+ID4gKw0KPiA+ICsJaWYgKG9mX3Byb3BlcnR5X3JlYWRfYm9v bChucCwgImlzLXByaXZhdGUiKSkNCj4gPiArCQlzZXRfYml0KFFVSVJLU19JU19QUklWQVRFLCAm cGRhdGEtPnF1aXJrcyk7DQo+ID4gKw0KPiA+ICsJaWYgKG9mX3Byb3BlcnR5X3JlYWRfYm9vbChu cCwgImlzLW1lbWNweSIpKQ0KPiA+ICsJCXNldF9iaXQoUVVJUktTX0lTX01FTUNQWSwgJnBkYXRh LT5xdWlya3MpOw0KPiA+ICsNCj4gPiArCWlmIChvZl9wcm9wZXJ0eV9yZWFkX2Jvb2wobnAsICJp cy1ub2xscCIpKQ0KPiA+ICsJCXNldF9iaXQoUVVJUktTX0lTX05PTExQLCAmcGRhdGEtPnF1aXJr cyk7DQo+IEkgd291bGQgc3VnZ2VzdCB0byBjb252ZXJ0IHRvIHVuaWZpZWQgZGV2aWNlIHByb3Bl cnR5IEFQSSBmaXJzdC4NCkknbGwgZG8gdGhhdC4NCg0KPiANCj4gPiANCj4gPiArDQo+ID4gKwlp ZiAob2ZfcHJvcGVydHlfcmVhZF91MzIobnAsICJkbWEtbWFzdGVycyIsICZucl9tYXN0ZXJzKSkN Cj4gPiArCQlyZXR1cm4gcGRhdGE7DQo+ID4gKwlpZiAobnJfbWFzdGVycyA8IDEgfHwgbnJfbWFz dGVycyA+IERXX0RNQV9NQVhfTlJfTUFTVEVSUykNCj4gPiArCQlyZXR1cm4gcGRhdGE7DQo+ID4g Kw0KPiA+IMKgCXBkYXRhLT5ucl9tYXN0ZXJzID0gbnJfbWFzdGVyczsNCj4gPiAtCXBkYXRhLT5u cl9jaGFubmVscyA9IG5yX2NoYW5uZWxzOw0KPiA+IMKgDQo+ID4gLQlpZiAob2ZfcHJvcGVydHlf cmVhZF9ib29sKG5wLCAiaXNfcHJpdmF0ZSIpKQ0KPiA+IC0JCXBkYXRhLT5pc19wcml2YXRlID0g dHJ1ZTsNCj4gPiArCWlmIChvZl9wcm9wZXJ0eV9yZWFkX3UzMihucCwgImRtYS1jaGFubmVscyIs DQo+ID4gJm5yX2NoYW5uZWxzKSkNCj4gPiArCQlyZXR1cm4gcGRhdGE7DQo+ID4gwqANCj4gPiAt CWlmICghb2ZfcHJvcGVydHlfcmVhZF91MzIobnAsICJjaGFuX2FsbG9jYXRpb25fb3JkZXIiLA0K PiA+ICZ0bXApKQ0KPiA+ICsJcGRhdGEtPm5yX2NoYW5uZWxzID0gbnJfY2hhbm5lbHM7DQo+ID4g Kw0KPiA+ICsJaWYgKCFvZl9wcm9wZXJ0eV9yZWFkX3UzMihucCwgImNoYW4tYWxsb2NhdGlvbi1v cmRlciIsDQo+ID4gJnRtcCkpDQo+ID4gwqAJCXBkYXRhLT5jaGFuX2FsbG9jYXRpb25fb3JkZXIg PSAodW5zaWduZWQgY2hhcil0bXA7DQo+ID4gwqANCj4gPiAtCWlmICghb2ZfcHJvcGVydHlfcmVh ZF91MzIobnAsICJjaGFuX3ByaW9yaXR5IiwgJnRtcCkpDQo+ID4gKwlpZiAoIW9mX3Byb3BlcnR5 X3JlYWRfdTMyKG5wLCAiY2hhbi1wcmlvcml0eSIsICZ0bXApKQ0KPiA+IMKgCQlwZGF0YS0+Y2hh bl9wcmlvcml0eSA9IHRtcDsNCj4gPiDCoA0KPiA+IC0JaWYgKCFvZl9wcm9wZXJ0eV9yZWFkX3Uz MihucCwgImJsb2NrX3NpemUiLCAmdG1wKSkNCj4gPiArCWlmICghb2ZfcHJvcGVydHlfcmVhZF91 MzIobnAsICJibG9jay1zaXplIiwgJnRtcCkpDQo+ID4gwqAJCXBkYXRhLT5ibG9ja19zaXplID0g dG1wOw0KPiA+IMKgDQo+ID4gwqAJaWYgKCFvZl9wcm9wZXJ0eV9yZWFkX3UzMl9hcnJheShucCwg ImRhdGEtd2lkdGgiLCBhcnIsDQo+ID4gbnJfbWFzdGVycykpIHsNCj4gPiDCoAkJZm9yICh0bXAg PSAwOyB0bXAgPCBucl9tYXN0ZXJzOyB0bXArKykNCj4gPiDCoAkJCXBkYXRhLT5kYXRhX3dpZHRo W3RtcF0gPSBhcnJbdG1wXTsNCj4gPiAtCX0gZWxzZSBpZiAoIW9mX3Byb3BlcnR5X3JlYWRfdTMy X2FycmF5KG5wLCAiZGF0YV93aWR0aCIsDQo+ID4gYXJyLA0KPiA+IG5yX21hc3RlcnMpKSB7DQo+ ID4gLQkJZm9yICh0bXAgPSAwOyB0bXAgPCBucl9tYXN0ZXJzOyB0bXArKykNCj4gPiAtCQkJcGRh dGEtPmRhdGFfd2lkdGhbdG1wXSA9IEJJVChhcnJbdG1wXSAmDQo+ID4gMHgwNyk7DQo+ID4gwqAJ fQ0KPiA+IMKgDQo+ID4gKwljbGVhcl9iaXQoUVVJUktTX09OTFlfVVNFRCwgJnBkYXRhLT5xdWly a3MpOw0KPiA+IMKgCXJldHVybiBwZGF0YTsNCj4gPiDCoH0NCj4gPiDCoCNlbHNlDQo+ID4gZGlm ZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcGxhdGZvcm1fZGF0YS9kbWEtZHcuaA0KPiA+IGIvaW5j bHVkZS9saW51eC9wbGF0Zm9ybV9kYXRhL2RtYS1kdy5oDQo+ID4gaW5kZXggNWYwZTExZS4uOWNk ODE5OSAxMDA2NDQNCj4gPiAtLS0gYS9pbmNsdWRlL2xpbnV4L3BsYXRmb3JtX2RhdGEvZG1hLWR3 LmgNCj4gPiArKysgYi9pbmNsdWRlL2xpbnV4L3BsYXRmb3JtX2RhdGEvZG1hLWR3LmgNCj4gPiBA QCAtMzcsMTAgKzM3LDcgQEAgc3RydWN0IGR3X2RtYV9zbGF2ZSB7DQo+ID4gwqAvKioNCj4gPiDC oCAqIHN0cnVjdCBkd19kbWFfcGxhdGZvcm1fZGF0YSAtIENvbnRyb2xsZXIgY29uZmlndXJhdGlv bg0KPiA+IHBhcmFtZXRlcnMNCj4gPiDCoCAqIEBucl9jaGFubmVsczogTnVtYmVyIG9mIGNoYW5u ZWxzIHN1cHBvcnRlZCBieSBoYXJkd2FyZSAobWF4IDgpDQo+ID4gLSAqIEBpc19wcml2YXRlOiBU aGUgZGV2aWNlIGNoYW5uZWxzIHNob3VsZCBiZSBtYXJrZWQgYXMgcHJpdmF0ZQ0KPiA+IGFuZA0K PiA+IG5vdCBmb3INCj4gPiAtICoJYnkgdGhlIGdlbmVyYWwgcHVycG9zZSBETUEgY2hhbm5lbCBh bGxvY2F0b3IuDQo+ID4gLSAqIEBpc19tZW1jcHk6IFRoZSBkZXZpY2UgY2hhbm5lbHMgZG8gc3Vw cG9ydCBtZW1vcnktdG8tbWVtb3J5DQo+ID4gdHJhbnNmZXJzLg0KPiA+IC0gKiBAaXNfbm9sbHA6 IFRoZSBkZXZpY2UgY2hhbm5lbHMgZG9lcyBub3Qgc3VwcG9ydCBtdWx0aSBibG9jaw0KPiA+IHRy YW5zZmVycy4NCj4gPiArICogQHF1aXJrczogQml0IGZpZWxkIHdpdGggcGxhdGZvcm0gcXVpcmtz DQo+ID4gwqAgKiBAY2hhbl9hbGxvY2F0aW9uX29yZGVyOiBBbGxvY2F0ZSBjaGFubmVscyBzdGFy dGluZyBmcm9tIDAgb3IgNw0KPiA+IMKgICogQGNoYW5fcHJpb3JpdHk6IFNldCBjaGFubmVsIHBy aW9yaXR5IGluY3JlYXNpbmcgZnJvbSAwIHRvIDcgb3INCj4gPiA3DQo+ID4gdG8gMC4NCj4gPiDC oCAqIEBibG9ja19zaXplOiBNYXhpbXVtIGJsb2NrIHNpemUgc3VwcG9ydGVkIGJ5IHRoZSBjb250 cm9sbGVyDQo+ID4gQEAgLTUwLDkgKzQ3LDE4IEBAIHN0cnVjdCBkd19kbWFfc2xhdmUgew0KPiA+ IMKgICovDQo+ID4gwqBzdHJ1Y3QgZHdfZG1hX3BsYXRmb3JtX2RhdGEgew0KPiA+IMKgCXVuc2ln bmVkIGludAlucl9jaGFubmVsczsNCj4gPiAtCWJvb2wJCWlzX3ByaXZhdGU7DQo+ID4gLQlib29s CQlpc19tZW1jcHk7DQo+ID4gLQlib29sCQlpc19ub2xscDsNCj4gPiArLyogT25seSB1c2UgcXVp cmtzIGZyb20gcGxhdGZvcm0gZGF0YSBzdHJ1Y3R1cmUgKi8NCj4gPiArI2RlZmluZSBRVUlSS1Nf T05MWV9VU0VECTANCj4gPiArLyoNCj4gPiArICogVGhlIGRldmljZSBjaGFubmVscyBzaG91bGQg YmUgbWFya2VkIGFzIHByaXZhdGUgYW5kIG5vdCBmb3INCj4gPiArICogYnkgdGhlIGdlbmVyYWwg cHVycG9zZSBETUEgY2hhbm5lbCBhbGxvY2F0b3IuDQo+ID4gKyAqLw0KPiA+ICsjZGVmaW5lIFFV SVJLU19JU19QUklWQVRFCTENCj4gPiArLyogVGhlIGRldmljZSBjaGFubmVscyBkbyBzdXBwb3J0 IG1lbW9yeS10by1tZW1vcnkgdHJhbnNmZXJzLiAqLw0KPiA+ICsjZGVmaW5lIFFVSVJLU19JU19N RU1DUFkJMg0KPiA+ICsvKiBUaGUgZGV2aWNlIGNoYW5uZWxzIGRvIG5vdCBzdXBwb3J0IG11bHRp IGJsb2NrIHRyYW5zZmVycy4gKi8NCj4gPiArI2RlZmluZSBRVUlSS1NfSVNfTk9MTFAJCTMNCj4g WW91IG1heSBtb3ZlIGRlc2NyaXB0aW9ucyB0byBhYm92ZSBzdHJ1Y3QgZGVzY3JpcHRpb24gZmll bGQuIEl0IHdpbGwNCj4gYmUNCj4gY29uc29saWRhdGVkIGFuZCBtb3Jlb3ZlciB2aXNpYmxlIGlu IGtlcm5lbC1kb2MgcHJvY2Vzc2VkIGRvY3VtZW50cy4NCkdvb2QgaWRlYS4NCg0KPiA+IA0KPiA+ ICsJdW5zaWduZWQgbG9uZwlxdWlya3M7DQo+ID4gwqAjZGVmaW5lIENIQU5fQUxMT0NBVElPTl9B U0NFTkRJTkcJMAkvKiB6ZXJvIHRvIHNldmVuDQo+ID4gKi8NCj4gPiDCoCNkZWZpbmUgQ0hBTl9B TExPQ0FUSU9OX0RFU0NFTkRJTkcJMQkvKiBzZXZlbiB0bw0KPiA+IHplcm8NCj4gPiAqLw0KPiA+ IMKgCXVuc2lnbmVkIGNoYXIJY2hhbl9hbGxvY2F0aW9uX29yZGVyOw0KLS0gDQrCoFBhbHRzZXYg RXVnZW5peQ0K -- To unsubscribe from this list: send the line "unsubscribe dmaengine" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
On Thu, 2016-10-20 at 13:16 +0000, Eugeniy Paltsev wrote: > On Thu, 2016-10-20 at 13:48 +0300, Andy Shevchenko wrote: > > On Thu, 2016-09-15 at 16:14 +0300, Eugeniy Paltsev wrote: > > > > > > This patch is to address a proposal by Andy in this thread: > > > http://www.spinics.net/lists/dmaengine/msg10754.html > > > Split platform data to actual hardware properties, and platform > > > quirks. > > > Now we able to use quirks and hardware properties separately from > > > different sources (pdata, device tree or autoconfig registers) > > - if (!chip->pdata) { > > > + if ((!chip->pdata) || > > > + (chip->pdata && test_bit(QUIRKS_ONLY_USED, &chip- > > > > pdata- > > > > I don't think you need atomic test / set of those bits. > > I don't need atomic bit operations here, I just used standard bit API > to make code more clear. I gave more thoughts to that and I think we would leave boolean variables in platform data. It would be cleaner for users how they defined quirks. Besides that any additional quirk or modification of the existing one will produce simple and readable change. > > > > + */ > > > + if (!chip->pdata) { > > > + set_bit(QUIRKS_IS_PRIVATE, &pdata- > > > > quirks); > > > > > > + set_bit(QUIRKS_IS_MEMCPY, &pdata- > > > >quirks); > > > + set_bit(QUIRKS_IS_NOLLP, &pdata->quirks); >>> + } else { > > > + pdata->quirks = chip->pdata->quirks; > > > + } Ditto. > > > @@ -1569,7 +1576,7 @@ int dw_dma_probe(struct dw_dma_chip *chip) > > > (dwc_params >> DWC_PARAMS_MBLK_EN > > > & > > > 0x1) == 0; > > > } else { > > > dwc->block_size = pdata->block_size; > > > - dwc->nollp = pdata->is_nollp; > > > + dwc->nollp = test_bit(QUIRKS_IS_NOLLP, > > > &pdata->quirks); > > > > Perhaps you need another patch which actually moves nollp to dwc- > > > flags. > > As I can see, we already have DW_DMA_IS_SOFT_LLP flag in "dwc->flags" > with same functionality, which is set if "dwc->nollp" is true. > Probably > we can use this flag and get rid of "dwc->nollp". > But I'm a bit confused why we clear DW_DMA_IS_SOFT_LLP bit in > "dwc_scan_descriptors" and "dwc_terminate_all" functions. > Any ideas about that? Sounds like a plan. I think you are right, the property quite unlikely can be changed run-time (though I have one patch regarding Braswell and CherryView platforms that have a chicken bit to enable / disable the feature). So, please, get rid of an additional boolean field.
diff --git a/drivers/dma/dw/core.c b/drivers/dma/dw/core.c index c2c0a61..9352735 100644 --- a/drivers/dma/dw/core.c +++ b/drivers/dma/dw/core.c @@ -1451,10 +1451,25 @@ int dw_dma_probe(struct dw_dma_chip *chip) dw->regs = chip->regs; chip->dw = dw; + /* Reassign the platform data pointer */ + pdata = dw->pdata; pm_runtime_get_sync(chip->dev); - if (!chip->pdata) { + if ((!chip->pdata) || + (chip->pdata && test_bit(QUIRKS_ONLY_USED, &chip->pdata->quirks))) { + + /* + * Fill quirks with the default values in case of pdata absence + */ + if (!chip->pdata) { + set_bit(QUIRKS_IS_PRIVATE, &pdata->quirks); + set_bit(QUIRKS_IS_MEMCPY, &pdata->quirks); + set_bit(QUIRKS_IS_NOLLP, &pdata->quirks); + } else { + pdata->quirks = chip->pdata->quirks; + } + dw_params = dma_readl(dw, DW_PARAMS); dev_dbg(chip->dev, "DW_PARAMS: 0x%08x\n", dw_params); @@ -1464,9 +1479,6 @@ int dw_dma_probe(struct dw_dma_chip *chip) goto err_pdata; } - /* Reassign the platform data pointer */ - pdata = dw->pdata; - /* Get hardware configuration parameters */ pdata->nr_channels = (dw_params >> DW_PARAMS_NR_CHAN & 7) + 1; pdata->nr_masters = (dw_params >> DW_PARAMS_NR_MASTER & 3) + 1; @@ -1477,8 +1489,6 @@ int dw_dma_probe(struct dw_dma_chip *chip) pdata->block_size = dma_readl(dw, MAX_BLK_SIZE); /* Fill platform data with the default values */ - pdata->is_private = true; - pdata->is_memcpy = true; pdata->chan_allocation_order = CHAN_ALLOCATION_ASCENDING; pdata->chan_priority = CHAN_PRIORITY_ASCENDING; } else if (chip->pdata->nr_channels > DW_DMA_MAX_NR_CHANNELS) { @@ -1486,9 +1496,6 @@ int dw_dma_probe(struct dw_dma_chip *chip) goto err_pdata; } else { memcpy(dw->pdata, chip->pdata, sizeof(*dw->pdata)); - - /* Reassign the platform data pointer */ - pdata = dw->pdata; } dw->chan = devm_kcalloc(chip->dev, pdata->nr_channels, sizeof(*dw->chan), @@ -1569,7 +1576,7 @@ int dw_dma_probe(struct dw_dma_chip *chip) (dwc_params >> DWC_PARAMS_MBLK_EN & 0x1) == 0; } else { dwc->block_size = pdata->block_size; - dwc->nollp = pdata->is_nollp; + dwc->nollp = test_bit(QUIRKS_IS_NOLLP, &pdata->quirks); } } @@ -1582,9 +1589,9 @@ int dw_dma_probe(struct dw_dma_chip *chip) /* Set capabilities */ dma_cap_set(DMA_SLAVE, dw->dma.cap_mask); - if (pdata->is_private) + if (test_bit(QUIRKS_IS_PRIVATE, &pdata->quirks)) dma_cap_set(DMA_PRIVATE, dw->dma.cap_mask); - if (pdata->is_memcpy) + if (test_bit(QUIRKS_IS_MEMCPY, &pdata->quirks)) dma_cap_set(DMA_MEMCPY, dw->dma.cap_mask); dw->dma.dev = chip->dev; diff --git a/drivers/dma/dw/platform.c b/drivers/dma/dw/platform.c index 5bda0eb..308b977 100644 --- a/drivers/dma/dw/platform.c +++ b/drivers/dma/dw/platform.c @@ -12,6 +12,7 @@ * published by the Free Software Foundation. */ +#include <linux/bitops.h> #include <linux/module.h> #include <linux/device.h> #include <linux/clk.h> @@ -111,41 +112,48 @@ dw_dma_parse_dt(struct platform_device *pdev) return NULL; } - if (of_property_read_u32(np, "dma-masters", &nr_masters)) - return NULL; - if (nr_masters < 1 || nr_masters > DW_DMA_MAX_NR_MASTERS) - return NULL; - - if (of_property_read_u32(np, "dma-channels", &nr_channels)) - return NULL; - pdata = devm_kzalloc(&pdev->dev, sizeof(*pdata), GFP_KERNEL); if (!pdata) return NULL; + set_bit(QUIRKS_ONLY_USED, &pdata->quirks); + + if (of_property_read_bool(np, "is-private")) + set_bit(QUIRKS_IS_PRIVATE, &pdata->quirks); + + if (of_property_read_bool(np, "is-memcpy")) + set_bit(QUIRKS_IS_MEMCPY, &pdata->quirks); + + if (of_property_read_bool(np, "is-nollp")) + set_bit(QUIRKS_IS_NOLLP, &pdata->quirks); + + if (of_property_read_u32(np, "dma-masters", &nr_masters)) + return pdata; + if (nr_masters < 1 || nr_masters > DW_DMA_MAX_NR_MASTERS) + return pdata; + pdata->nr_masters = nr_masters; - pdata->nr_channels = nr_channels; - if (of_property_read_bool(np, "is_private")) - pdata->is_private = true; + if (of_property_read_u32(np, "dma-channels", &nr_channels)) + return pdata; - if (!of_property_read_u32(np, "chan_allocation_order", &tmp)) + pdata->nr_channels = nr_channels; + + if (!of_property_read_u32(np, "chan-allocation-order", &tmp)) pdata->chan_allocation_order = (unsigned char)tmp; - if (!of_property_read_u32(np, "chan_priority", &tmp)) + if (!of_property_read_u32(np, "chan-priority", &tmp)) pdata->chan_priority = tmp; - if (!of_property_read_u32(np, "block_size", &tmp)) + if (!of_property_read_u32(np, "block-size", &tmp)) pdata->block_size = tmp; if (!of_property_read_u32_array(np, "data-width", arr, nr_masters)) { for (tmp = 0; tmp < nr_masters; tmp++) pdata->data_width[tmp] = arr[tmp]; - } else if (!of_property_read_u32_array(np, "data_width", arr, nr_masters)) { - for (tmp = 0; tmp < nr_masters; tmp++) - pdata->data_width[tmp] = BIT(arr[tmp] & 0x07); } + clear_bit(QUIRKS_ONLY_USED, &pdata->quirks); return pdata; } #else diff --git a/include/linux/platform_data/dma-dw.h b/include/linux/platform_data/dma-dw.h index 5f0e11e..9cd8199 100644 --- a/include/linux/platform_data/dma-dw.h +++ b/include/linux/platform_data/dma-dw.h @@ -37,10 +37,7 @@ struct dw_dma_slave { /** * struct dw_dma_platform_data - Controller configuration parameters * @nr_channels: Number of channels supported by hardware (max 8) - * @is_private: The device channels should be marked as private and not for - * by the general purpose DMA channel allocator. - * @is_memcpy: The device channels do support memory-to-memory transfers. - * @is_nollp: The device channels does not support multi block transfers. + * @quirks: Bit field with platform quirks * @chan_allocation_order: Allocate channels starting from 0 or 7 * @chan_priority: Set channel priority increasing from 0 to 7 or 7 to 0. * @block_size: Maximum block size supported by the controller @@ -50,9 +47,18 @@ struct dw_dma_slave { */ struct dw_dma_platform_data { unsigned int nr_channels; - bool is_private; - bool is_memcpy; - bool is_nollp; +/* Only use quirks from platform data structure */ +#define QUIRKS_ONLY_USED 0 +/* + * The device channels should be marked as private and not for + * by the general purpose DMA channel allocator. + */ +#define QUIRKS_IS_PRIVATE 1 +/* The device channels do support memory-to-memory transfers. */ +#define QUIRKS_IS_MEMCPY 2 +/* The device channels do not support multi block transfers. */ +#define QUIRKS_IS_NOLLP 3 + unsigned long quirks; #define CHAN_ALLOCATION_ASCENDING 0 /* zero to seven */ #define CHAN_ALLOCATION_DESCENDING 1 /* seven to zero */ unsigned char chan_allocation_order;
This patch is to address a proposal by Andy in this thread: http://www.spinics.net/lists/dmaengine/msg10754.html Split platform data to actual hardware properties, and platform quirks. Now we able to use quirks and hardware properties separately from different sources (pdata, device tree or autoconfig registers) Signed-off-by: Eugeniy Paltsev <Eugeniy.Paltsev@synopsys.com> --- drivers/dma/dw/core.c | 31 +++++++++++++++----------- drivers/dma/dw/platform.c | 42 +++++++++++++++++++++--------------- include/linux/platform_data/dma-dw.h | 20 +++++++++++------ 3 files changed, 57 insertions(+), 36 deletions(-)