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: [v8,1/3] dmaengine: fsl-edma: extract common fsl-edma code (no changes in behavior intended) From: Angelo Dureghello Message-Id: <20180810084327.GA3296@jerusalem> Date: Fri, 10 Aug 2018 10:43:27 +0200 To: Stefan Agner Cc: Krzysztof Kozlowski , vinod.koul@linaro.org, dmaengine@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-m68k@vger.kernel.org List-ID: SGkgU3RlZmFuLAoKT24gRnJpLCBBdWcgMTAsIDIwMTggYXQgMTA6MDU6MDZBTSArMDIwMCwgU3Rl ZmFuIEFnbmVyIHdyb3RlOgo+IE9uIDEwLjA4LjIwMTggMDA6MzcsIEFuZ2VsbyBEdXJlZ2hlbGxv IHdyb3RlOgo+ID4gSGkgU3RlZmFuLAo+ID4gCj4gPiBpIGFtIGFib3V0IHRvIHBvc3QgYSB2OSBp biBzaG9ydC4KPiA+IAo+ID4gT24gVHVlLCBBdWcgMDcsIDIwMTggYXQgMDc6NDc6MTlQTSArMDIw MCwgU3RlZmFuIEFnbmVyIHdyb3RlOgo+ID4+IE9uIDA3LjA4LjIwMTggMTQ6MTQsIEtyenlzenRv ZiBLb3psb3dza2kgd3JvdGU6Cj4gPj4gPiBPbiA3IEF1Z3VzdCAyMDE4IGF0IDEwOjA4LCBTdGVm YW4gQWduZXIgPHN0ZWZhbkBhZ25lci5jaD4gd3JvdGU6Cj4gPj4gPj4gT24gMDMuMDguMjAxOCAy MTozMiwgQW5nZWxvIER1cmVnaGVsbG8gd3JvdGU6Cj4gPj4gPj4+IFRoaXMgcGF0Y2ggYWRkcyBh IG5ldyBmc2wtZWRtYS1jb21tb24gbW9kdWxlIHRvIGFsbG93IG5ldwo+ID4+ID4+PiBtY2YtZWRt YSBtb2R1bGUgY29kZSB0byB1c2UgbW9zdCBvZiB0aGUgZnNsLWVkbWEgY29kZS4KPiA+PiA+Pj4K PiA+PiA+Pj4gU2lnbmVkLW9mZi1ieTogQW5nZWxvIER1cmVnaGVsbG8gPGFuZ2Vsb0BzeXNhbS5p dD4KPiA+PiA+Pj4gLS0tCj4gPj4gPj4+IENoYW5nZXMgZm9yIHYyOgo+ID4+ID4+PiAtIHBhdGNo IHNwbGl0dGVkIGludG8gNAo+ID4+ID4+PiAtIGFkZCBtY2YtZWRtYSBhcyBtaW5pbWFsIGRpZmZl cmVudCBwYXJ0cyBmcm9tIGZzbC1lZG1hCj4gPj4gPj4+Cj4gPj4gPj4+IENoYW5nZXMgZm9yIHYz Ogo+ID4+ID4+PiBub25lCj4gPj4gPj4+Cj4gPj4gPj4+IENoYW5nZXMgZm9yIHY0Ogo+ID4+ID4+ PiAtIHBhdGNoIHNpbXBsaWZpZWQgZnJvbSA0LzQgaW50byAyLzIKPiA+PiA+Pj4gLSBjb2xsZWN0 aW5nIGFsbCB0aGUgbWNmLWVkbWEtcmVsYXRlZCBjaGFuZ2VzCj4gPj4gPj4+Cj4gPj4gPj4+IENo YW5nZXMgZm9yIHY1Ogo+ID4+ID4+PiBub25lCj4gPj4gPj4+Cj4gPj4gPj4+IENoYW5nZXMgZm9y IHY2Ogo+ID4+ID4+PiAtIGFkanVzdGVkIGNvbW1lbnQgaGVhZGVyCj4gPj4gPj4+IC0gZml4ZWQg Yml0IHNoaWZ0IHdpdGggQklUKCkKPiA+PiA+Pj4gLSB3ZSBuZWVkIHRvIGZyZWUgdGhlIGludGVy cnVwdHMgYXQgcmVtb3ZlKCksIHNvIHJlbW92ZWQgYWxsIGRldm1fCj4gPj4gPj4+ICAgaW50ZXJy dXB0IHJlbGF0ZWQgY2FsbHMKPiA+PiA+Pj4KPiA+PiA+Pj4gQ2hhbmdlcyBmb3Igdjc6Cj4gPj4g Pj4+IG5vbmUKPiA+PiA+Pj4KPiA+PiA+Pj4gQ2hhbmdlcyBmb3Igdjg6Cj4gPj4gPj4+IC0gcGF0 Y2ggcmV3cml0dGVuIGZyb20gc2NyYXRjaCwgc3BsaXR0ZWQgaW50byAzLCBjb21tb24gY29kZSBp c29sYXRlZCwKPiA+PiA+Pj4gICBtaW5pbWFsIGNoYW5nZXMgZnJvbSB0aGUgb3JpZ2luYWwgRnJl ZXNjYWxlIGNvZGUgaGF2ZSBiZWVuIGRvbmUuCj4gPj4gPj4+ICAgVGhlIHBhdGNoIGhhcyBiZWVu IHRlc3RlZCB3aXRoIGJvdGggSXJpcyArIENvbGlicmkgVnlicmlkIFZGNTAgYW5kCj4gPj4gPj4+ ICAgc3RtYXJrMi9tY2Y1NDQxNSBDb2xkZmlyZSBib2FyZHMuCj4gPj4gPj4+IC0tLQo+ID4+ID4+ PiAgZHJpdmVycy9kbWEvTWFrZWZpbGUgICAgICAgICAgfCAgIDIgKy0KPiA+PiA+Pj4gIGRyaXZl cnMvZG1hL2ZzbC1lZG1hLWNvbW1vbi5jIHwgNTc2ICsrKysrKysrKysrKysrKysrKysrKysrKysr KysKPiA+PiA+Pj4gIGRyaXZlcnMvZG1hL2ZzbC1lZG1hLWNvbW1vbi5oIHwgMTk2ICsrKysrKysr KysKPiA+PiA+Pj4gIGRyaXZlcnMvZG1hL2ZzbC1lZG1hLmMgICAgICAgIHwgNjk3ICstLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KPiA+PiA+Pj4gIDQgZmlsZXMgY2hhbmdlZCwgNzc0 IGluc2VydGlvbnMoKyksIDY5NyBkZWxldGlvbnMoLSkKPiA+PiA+Pj4gIGNyZWF0ZSBtb2RlIDEw MDY0NCBkcml2ZXJzL2RtYS9mc2wtZWRtYS1jb21tb24uYwo+ID4+ID4+PiAgY3JlYXRlIG1vZGUg MTAwNjQ0IGRyaXZlcnMvZG1hL2ZzbC1lZG1hLWNvbW1vbi5oCj4gPj4gPj4+Cj4gPj4gPj4+IGRp ZmYgLS1naXQgYS9kcml2ZXJzL2RtYS9NYWtlZmlsZSBiL2RyaXZlcnMvZG1hL01ha2VmaWxlCj4g Pj4gPj4+IGluZGV4IDIwM2E5OWQ2ODMxNS4uNjYwMjJmNTlmY2E0IDEwMDY0NAo+ID4+ID4+PiAt LS0gYS9kcml2ZXJzL2RtYS9NYWtlZmlsZQo+ID4+ID4+PiArKysgYi9kcml2ZXJzL2RtYS9NYWtl ZmlsZQo+ID4+ID4+PiBAQCAtMzEsNyArMzEsNyBAQCBvYmotJChDT05GSUdfRFdfQVhJX0RNQUMp ICs9IGR3LWF4aS1kbWFjLwo+ID4+ID4+PiAgb2JqLSQoQ09ORklHX0RXX0RNQUNfQ09SRSkgKz0g ZHcvCj4gPj4gPj4+ICBvYmotJChDT05GSUdfRVA5M1hYX0RNQSkgKz0gZXA5M3h4X2RtYS5vCj4g Pj4gPj4+ICBvYmotJChDT05GSUdfRlNMX0RNQSkgKz0gZnNsZG1hLm8KPiA+PiA+Pj4gLW9iai0k KENPTkZJR19GU0xfRURNQSkgKz0gZnNsLWVkbWEubwo+ID4+ID4+PiArb2JqLSQoQ09ORklHX0ZT TF9FRE1BKSArPSBmc2wtZWRtYS5vIGZzbC1lZG1hLWNvbW1vbi5vCj4gPj4gPj4+ICBvYmotJChD T05GSUdfRlNMX1JBSUQpICs9IGZzbF9yYWlkLm8KPiA+PiA+Pj4gIG9iai0kKENPTkZJR19IU1Vf RE1BKSArPSBoc3UvCj4gPj4gPj4+ICBvYmotJChDT05GSUdfSU1HX01EQ19ETUEpICs9IGltZy1t ZGMtZG1hLm8KPiA+PiA+Pj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZG1hL2ZzbC1lZG1hLWNvbW1v bi5jIGIvZHJpdmVycy9kbWEvZnNsLWVkbWEtY29tbW9uLmMKPiA+PiA+Pj4gbmV3IGZpbGUgbW9k ZSAxMDA2NDQKPiA+PiA+Pj4gaW5kZXggMDAwMDAwMDAwMDAwLi4wYWU3MDk0ZjQ3N2EKPiA+PiA+ Pj4gLS0tIC9kZXYvbnVsbAo+ID4+ID4+PiArKysgYi9kcml2ZXJzL2RtYS9mc2wtZWRtYS1jb21t b24uYwo+ID4+ID4+PiBAQCAtMCwwICsxLDU3NiBAQAo+ID4+ID4+PiArLy8gU1BEWC1MaWNlbnNl LUlkZW50aWZpZXI6IEdQTC0yLjAKPiA+PiA+Pj4gKy8vCj4gPj4gPj4+ICsvLyBDb3B5cmlnaHQg KGMpIDIwMTMtMjAxNCBGcmVlc2NhbGUgU2VtaWNvbmR1Y3RvciwgSW5jCj4gPj4gPj4+ICsvLyBD b3B5cmlnaHQgKGMpIDIwMTcgU3lzYW0sIEFuZ2VsbyBEdXJlZ2hlbGxvICA8YW5nZWxvQHN5c2Ft Lml0Pgo+ID4+ID4+PiArCj4gPj4gPj4+ICsjaW5jbHVkZSA8bGludXgvZG1hcG9vbC5oPgo+ID4+ ID4+PiArI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgo+ID4+ID4+PiArI2luY2x1ZGUgPGxpbnV4 L3NsYWIuaD4KPiA+PiA+Pj4gKwo+ID4+ID4+PiArI2luY2x1ZGUgImZzbC1lZG1hLWNvbW1vbi5o Igo+ID4+ID4+PiArCj4gPj4gPj4+ICsvKgo+ID4+ID4+PiArICogUi9XIGZ1bmN0aW9ucyBmb3Ig YmlnLSBvciBsaXR0bGUtZW5kaWFuIHJlZ2lzdGVyczoKPiA+PiA+Pj4gKyAqIFRoZSBlRE1BIGNv bnRyb2xsZXIncyBlbmRpYW4gaXMgaW5kZXBlbmRlbnQgb2YgdGhlIENQVSBjb3JlJ3MgZW5kaWFu Lgo+ID4+ID4+PiArICogRm9yIHRoZSBiaWctZW5kaWFuIElQIG1vZHVsZSwgdGhlIG9mZnNldCBm b3IgOC1iaXQgb3IgMTYtYml0IHJlZ2lzdGVycwo+ID4+ID4+PiArICogc2hvdWxkIGFsc28gYmUg c3dhcHBlZCBvcHBvc2l0ZSB0byB0aGF0IGluIGxpdHRsZS1lbmRpYW4gSVAuCj4gPj4gPj4+ICsg Ki8KPiA+PiA+Pj4gK3UzMiBlZG1hX3JlYWRsKHN0cnVjdCBmc2xfZWRtYV9lbmdpbmUgKmVkbWEs IHZvaWQgX19pb21lbSAqYWRkcikKPiA+PiA+Pj4gK3sKPiA+PiA+Pj4gKyAgICAgaWYgKGVkbWEt PmJpZ19lbmRpYW4pCj4gPj4gPj4+ICsgICAgICAgICAgICAgcmV0dXJuIGlvcmVhZDMyYmUoYWRk cik7Cj4gPj4gPj4+ICsgICAgIGVsc2UKPiA+PiA+Pj4gKyAgICAgICAgICAgICByZXR1cm4gaW9y ZWFkMzIoYWRkcik7Cj4gPj4gPj4+ICt9Cj4gPj4gPj4+ICtFWFBPUlRfU1lNQk9MX0dQTChlZG1h X3JlYWRsKTsKPiA+PiA+Pgo+ID4+ID4+IEluIDMvMyB5b3UgbGluayB0aGUgY29tbW9uIG9iamVj dCBpbnRvIHRoZSB0d28gbW9kdWxlcyBpbmRpdmlkdWFsbHk6Cj4gPj4gPj4KPiA+PiA+PiBvYmot JChDT05GSUdfRlNMX0VETUEpICs9IGZzbC1lZG1hLm8gZnNsLWVkbWEtY29tbW9uLm8KPiA+PiA+ PiBvYmotJChDT05GSUdfTUNGX0VETUEpICs9IG1jZi1lZG1hLm8gZnNsLWVkbWEtY29tbW9uLm8K PiA+PiA+Pgo+ID4+ID4+IFRoZXJlZm9yIHlvdSBkbyBub3QgYWNjZXNzIHRob3NlIGZ1bmN0aW9u cyBmcm9tIGFub3RoZXIgbW9kdWxlICh0aGV5IGFyZQo+ID4+ID4+IHdpdGhpbiB0aGUgbW9kdWxl KS4gTm8gZXhwb3J0aW5nIHNob3VsZCBiZSBuZWNlc3NhcnkuIERyb3AgYWxsIHRob3NlCj4gPj4g Pj4gZXhwb3J0cy4KPiA+PiA+Cj4gPj4gPiBUaGUgZnNsLWVkbWEtY29tbW9uIHdpbGwgYmUgaXRz IG93biBtb2R1bGUgc28gdGhlIGV4cG9ydHMgYXJlCj4gPj4gPiBuZWNlc3NhcnkgZm9yIHByb3Bl ciBsaW5raW5nL21vZHBvc3QuCj4gPj4KPiA+PiBIbSwgb2ggSSBzZWUsIEkgZ290IHRoYXQgd3Jv bmcuCj4gPj4KPiA+PiBXZSBjb3VsZCB1c2UKPiA+PiBmc2wtZWRtYS1hbGwteSA9IGZzbC1lZG1h Lm8gZnNsLWVkbWEtY29tbW9uLm8KPiA+PiBvYmotJChDT05GSUdfRlNMX0VETUEpICs9IGZzbC1l ZG1hLWFsbC5vCj4gPj4gbWNmLWVkbWEtYWxsLXkgPSBtY2YtZWRtYS5vIGZzbC1lZG1hLWNvbW1v bi5vCj4gPj4gb2JqLSQoQ09ORklHX01DRl9FRE1BKSArPSBtY2YtZWRtYS1hbGwubwo+ID4+Cj4g Pj4gdG8gY3JlYXRlIHR3byBtb2R1bGVzIGJ1dCB0aGF0IGR1cGxpY2F0ZXMgc29tZSBjb2RlLiBJ dCBwcm9iYWJseQo+ID4+IHdvdWxkbid0IG1hdHRlciBpbiBwcmFjdGlzZSBzaW5jZSB0aGUgdHdv IElQcyBhcmUgdXNlZCBvbiBkaWZmZXJlbnQKPiA+PiBhcmNoaXRlY3R1cmUuLi4KPiA+Pgo+ID4+ IEhvd2V2ZXIsIGlmIHdlIHN0YXkgd2l0aCB0aGUgdGhyZWUgbW9kdWxlcyBhcHByb2FjaCwgd2Ug c2hvdWxkIGludHJvZHVjZQo+ID4+IGEgaGlkZGVuIGNvbmZpZyBzeW1ib2wsIGUuZy4KPiA+Pgo+ ID4+IGNvbmZpZyBGU0xfRURNQV9DT01NT04KPiA+PiAJdHJpc3RhdGUKPiA+Pgo+ID4+IEluIEZT TF9FRE1BL01DRl9FRE1BIHVzZQo+ID4+IAlzZWxlY3QgRlNMX0VETUFfQ09NTU9OCj4gPj4KPiA+ PiBBbmQgaW4gdGhlIE1ha2VmaWxlCj4gPj4gb2JqLSQoQ09ORklHX0ZTTF9FRE1BX0NPTU1PTikg Kz0gZnNsLWVkbWEtY29tbW9uLm8KPiA+PiBvYmotJChDT05GSUdfRlNMX0VETUEpICs9IGZzbC1l ZG1hLm8KPiA+PiBvYmotJChDT05GSUdfTUNGX0VETUEpICs9IG1jZi1lZG1hLm8KPiA+Pgo+ID4+ Cj4gPiBUaGVyZSB3YXMgYWxyZWFkeSBhIGRpc2N1c3Npb24gd2l0aCBWaW5vZCBhbmQgR2VlcnQg b24gdGhpcywgYW5kIGkgCj4gPiBmaW5hbGx5IHByZXZpb3VzbHkgY2hhbmdlZCB0aGluZ3MgaW4g dGhpcyB3YXkgCj4gPiAKPiA+IG9iai0kKENPTkZJR19GU0xfRURNQSkgKz0gZnNsLWVkbWEubyBm c2wtZWRtYS1jb21tb24ubwo+ID4gCj4gPiBUaGUgaWRlYSB3YXMgdG8gc2ltcGxpZnkgdGhpbmdz IGF2b2lkaW5nIHRvIHVzZSBhbiBhZGRpdGlvbmFsCj4gPiBjb25maWcgc3ltYm9sLCBhcyBpIGRp ZCBpbml0aWFsbHkuIEl0J3MgYSBjb21tb24gcGF0dGVybiBpbiAKPiA+IHNldmVyYWwgTWFrZWZp bGVzIChlLmcuZHJpdmVycy9uZXQvZXRoZXJuZXQvODM5MC9NYWtlZmlsZSBhbmQgCj4gPiBkcml2 ZXJzL3Njc2kvTWFrZWZpbGUpLgo+ID4gQWxzbyB3ZSBoYXZlIGEgc2luZ2xlIGNvbW1vbiBjb2Rl IHBhcnQgc2luY2Ugb2JqLXkgaXMgYSBsaXN0LCAKPiA+IGFuZCBJSVJDIGl0J3MgZmlsdGVyZWQg Zm9yIGR1cGxpY2F0ZXMuCj4gPiBTbyBpZiBjYW4gYmUgb2sgZm9yIHlvdSB0b28sIGkgd291bGQg bm90IHJvbGwgYmFjayBhZ2Fpbi4KPiA+IAo+IAo+IEkgc2VlLCB5b3UgcmVmZXIgdG8gdGhpcyBk aXNjdXNzaW9uOgo+IGh0dHBzOi8vd3d3LnNwaW5pY3MubmV0L2xpc3RzL2RtYWVuZ2luZS9tc2cx NTg2My5odG1sCj4gCj4gU2hvdWxkIGhhdmUgZm9sbG93ZWQgdXAgb24gdGhvc2UgZGlzY3Vzc2lv bnMsIHNvcnJ5LiBMZWF2ZSBpdCBhcyBpcwo+IHRoZW4uCj4gCj4gPj4gSG93ZXZlciwgSSBkbyBu b3QgbGlrZSB0aGF0IHRoZSBjb21waWxlciBjYW4gbm8gbG9uZ2VyIGlubGluZSBzaW1wbGUKPiA+ PiBhY2Vzb3JzIGxpa2UgZWRtYV8ocmVhZGx8d3JpdGVsKS4gU28gaWYgd2Ugc3RheSB3aXRoIHRo ZSB0aHJlZSBtb2R1bGVzCj4gPj4gYXBwcm9hY2ggdGhlbiBtb3ZlIGF0IGxlYXN0IHRoZSBhY2Nl c29ycyBhbmQKPiA+PiB0b19mc2xfZWRtYV9jaGFuL3RvX2ZzbF9lZG1hX2Rlc2MgYXMgaW5saW5l IGZ1bmN0aW9ucyB0byB0aGUgaGVhZGVyCj4gPj4gZmlsZS4KPiA+Pgo+ID4gSSBhZ3JlZSB0b28s IG15IGluaXRpYWwgcGF0Y2ggd2FzIGEgc2luZ2xlIHNlcGFyYXRlIGRyaXZlci4gQnV0IGl0Cj4g PiByZXN1bHRlZCBpbiB0b28gbXVjaCBkdXBsaWNhdGVkIGNvZGUsIHNvIGEgY29tbW9uIG1vZHVs ZSBoYXMgYmVlbgo+ID4gcmVxdWlyZWQuIEJ0dywgc2VlbXMgaSBjYW5ub3QgaW5saW5lIHRob3Nl IGZ1bmN0aW9ucy4gZnNsLWVkbWEtY29tbW9uLmggCj4gPiBpcyBpbmNsdWRlZCBmcm9tIGJvdGgg ZnNsLWVkbWEtY29tbW9uLmMgYW5kIG1jZi9mc2wtZWRtYS5jIHJlc3VsdGluZwo+ID4gaW4gbXVs dGlwbGUgZGVmaW5pdGlvbnMgbGlua2luZyBlcnJvci4KPiAKPiBJIGFncmVlLCB3ZSBzaG91bGQg aW50cm9kdWNlIHRoZSBjb21tb24gbW9kdWxlIGFuZCBzaGFyZSBhcyBtdWNoIGFzCj4gcG9zc2li bGUuCj4gCj4gSnVzdCB0aG9zZSBzbWFsbCBhY2Nlc3NvcnMgdHlwaWNhbGx5IGdldCBpbmxpbmVk IGJ5IHRoZSBjb21waWxlciwgYW5kCj4gb2Z0ZW4gY29sbGFwc2UgY29tcGxldGVseSBpbiBvcHRp bWl6YXRpb24gcGhhc2VzIChlLmcuIGEgZnVuY3Rpb24gY2FsbAo+IGhhcyBtb3JlIG92ZXJoZWFk IHRoYW4ganVzdCBpbmxpbmluZyB0aGVtLCBtYWtpbmcgcmVzdWx0aW5nIGNvZGUgc21hbGxlcgo+ IGFuZCBmYXN0ZXIpLgo+IAo+IEp1c3QgZGVmaW5lIHRoZW0gYXMgc3RhdGljIGlubGluZSwgdGhl biBpdCB3b24ndCBsZWFkIHRvIGxpbmtpbmcgZXJyb3JzLgo+IAo+IEkgdHJpZWQgd2l0aCB0aGlz IGNoYW5nZSBpbiBmc2wtZWRtYS1jb21tb24uaCAoYW5kIHJlbW92ZSB0aGVtIGZyb20KPiBmc2wt ZWRtYS1jb21tb24uYyk6Cj4gCj4gLXUzMiBlZG1hX3JlYWRsKHN0cnVjdCBmc2xfZWRtYV9lbmdp bmUgKmVkbWEsIHZvaWQgX19pb21lbSAqYWRkcik7Cj4gLXZvaWQgZWRtYV93cml0ZWIoc3RydWN0 IGZzbF9lZG1hX2VuZ2luZSAqZWRtYSwgdTggdmFsLCB2b2lkIF9faW9tZW0KPiAqYWRkcik7Cj4g LXZvaWQgZWRtYV93cml0ZXcoc3RydWN0IGZzbF9lZG1hX2VuZ2luZSAqZWRtYSwgdTE2IHZhbCwg dm9pZCBfX2lvbWVtCj4gKmFkZHIpOwo+IC12b2lkIGVkbWFfd3JpdGVsKHN0cnVjdCBmc2xfZWRt YV9lbmdpbmUgKmVkbWEsIHUzMiB2YWwsIHZvaWQgX19pb21lbQo+ICphZGRyKTsKPiAtCj4gLXN0 cnVjdCBmc2xfZWRtYV9jaGFuICp0b19mc2xfZWRtYV9jaGFuKHN0cnVjdCBkbWFfY2hhbiAqY2hh bik7Cj4gLXN0cnVjdCBmc2xfZWRtYV9kZXNjICp0b19mc2xfZWRtYV9kZXNjKHN0cnVjdCB2aXJ0 X2RtYV9kZXNjICp2ZCk7Cj4gKy8qCj4gKyAqIFIvVyBmdW5jdGlvbnMgZm9yIGJpZy0gb3IgbGl0 dGxlLWVuZGlhbiByZWdpc3RlcnM6Cj4gKyAqIFRoZSBlRE1BIGNvbnRyb2xsZXIncyBlbmRpYW4g aXMgaW5kZXBlbmRlbnQgb2YgdGhlIENQVSBjb3JlJ3MKPiBlbmRpYW4uCj4gKyAqIEZvciB0aGUg YmlnLWVuZGlhbiBJUCBtb2R1bGUsIHRoZSBvZmZzZXQgZm9yIDgtYml0IG9yIDE2LWJpdAo+IHJl Z2lzdGVycwo+ICsgKiBzaG91bGQgYWxzbyBiZSBzd2FwcGVkIG9wcG9zaXRlIHRvIHRoYXQgaW4g bGl0dGxlLWVuZGlhbiBJUC4KPiArICovCj4gK3N0YXRpYyBpbmxpbmUgdTMyIGVkbWFfcmVhZGwo c3RydWN0IGZzbF9lZG1hX2VuZ2luZSAqZWRtYSwgdm9pZCBfX2lvbWVtCj4gKmFkZHIpCj4gK3sK PiArICAgICAgIGlmIChlZG1hLT5iaWdfZW5kaWFuKQo+ICsgICAgICAgICAgICAgICByZXR1cm4g aW9yZWFkMzJiZShhZGRyKTsKPiArICAgICAgIGVsc2UKPiArICAgICAgICAgICAgICAgcmV0dXJu IGlvcmVhZDMyKGFkZHIpOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW5saW5lIHZvaWQgZWRtYV93cml0 ZWIoc3RydWN0IGZzbF9lZG1hX2VuZ2luZSAqZWRtYSwgdTggdmFsLAo+IHZvaWQgX19pb21lbSAq YWRkcikKPiArewo+ICsgICAgICAgLyogc3dhcCB0aGUgcmVnIG9mZnNldCBmb3IgdGhlc2UgaW4g YmlnLWVuZGlhbiBtb2RlICovCj4gKyAgICAgICBpZiAoZWRtYS0+YmlnX2VuZGlhbikKPiArICAg ICAgICAgICAgICAgaW93cml0ZTgodmFsLCAodm9pZCBfX2lvbWVtICopKCh1bnNpZ25lZCBsb25n KWFkZHIgXgo+IDB4MykpOwo+ICsgICAgICAgZWxzZQo+ICsgICAgICAgICAgICAgICBpb3dyaXRl OCh2YWwsIGFkZHIpOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW5saW5lIHZvaWQgZWRtYV93cml0ZXco c3RydWN0IGZzbF9lZG1hX2VuZ2luZSAqZWRtYSwgdTE2IHZhbCwKPiB2b2lkIF9faW9tZW0gKmFk ZHIpCj4gK3sKPiArICAgICAgIC8qIHN3YXAgdGhlIHJlZyBvZmZzZXQgZm9yIHRoZXNlIGluIGJp Zy1lbmRpYW4gbW9kZSAqLwo+ICsgICAgICAgaWYgKGVkbWEtPmJpZ19lbmRpYW4pCj4gKyAgICAg ICAgICAgICAgIGlvd3JpdGUxNmJlKHZhbCwgKHZvaWQgX19pb21lbSAqKSgodW5zaWduZWQgbG9u ZylhZGRyIF4KPiAweDIpKTsKPiArICAgICAgIGVsc2UKPiArICAgICAgICAgICAgICAgaW93cml0 ZTE2KHZhbCwgYWRkcik7Cj4gK30KPiArCj4gK3N0YXRpYyBpbmxpbmUgdm9pZCBlZG1hX3dyaXRl bChzdHJ1Y3QgZnNsX2VkbWFfZW5naW5lICplZG1hLCB1MzIgdmFsLAo+IHZvaWQgX19pb21lbSAq YWRkcikKPiArewo+ICsgICAgICAgaWYgKGVkbWEtPmJpZ19lbmRpYW4pCj4gKyAgICAgICAgICAg ICAgIGlvd3JpdGUzMmJlKHZhbCwgYWRkcik7Cj4gKyAgICAgICBlbHNlCj4gKyAgICAgICAgICAg ICAgIGlvd3JpdGUzMih2YWwsIGFkZHIpOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW5saW5lIHN0cnVj dCBmc2xfZWRtYV9jaGFuICp0b19mc2xfZWRtYV9jaGFuKHN0cnVjdCBkbWFfY2hhbgo+ICpjaGFu KQo+ICt7Cj4gKyAgICAgICByZXR1cm4gY29udGFpbmVyX29mKGNoYW4sIHN0cnVjdCBmc2xfZWRt YV9jaGFuLCB2Y2hhbi5jaGFuKTsKPiArfQo+ICsKPiArc3RhdGljIGlubGluZSBzdHJ1Y3QgZnNs X2VkbWFfZGVzYyAqdG9fZnNsX2VkbWFfZGVzYyhzdHJ1Y3QKPiB2aXJ0X2RtYV9kZXNjICp2ZCkK PiArewo+ICsgICAgICAgcmV0dXJuIGNvbnRhaW5lcl9vZih2ZCwgc3RydWN0IGZzbF9lZG1hX2Rl c2MsIHZkZXNjKTsKPiArfQo+IAo+IAo+IEFsbCB0aHJlZSBrZXJuZWwgbW9kdWxlcyBlbmQgdXAg YmVpbmcgc21hbGxlciAob3ZlcmFsbCBtb3JlIHRoYW4gMWtCKSwKPiBzbyB0aGUgY29tcGlsZXIg cmVhbGx5IGRvZXMgaXRzIG1hZ2ljLgo+CkdyZWF0LCB3aWxsIGNoYW5nZSBhcyBhYm92ZS4KIAo+ ID4gCj4gPiBNYWlubHkgdW50aWwgdjcgdGhlcmUgd2FzIHNldmVyYWwgZGlzY3Vzc2lvbnMgYW5k IGEgZmlyc3QgYXBwcm92YWwsIAo+ID4gaWYgcG9zc2libGUgaSB3b3VsZCBub3QgY2hhbmdlIGFn YWluIGhlYXZpbHkgdGhlIHBhdGNoIHN0cnVjdHVyZSBmb3IKPiA+IGEgYnVnIHRoYXQgc2VlbXNz IGFscmVhZHkgYmVlbiBmaXhlZC4KPiA+IAo+ID4gU28gaSBmaXhlZCBhbGwgdGhlIHBvc3NpYmxl IHBvaW50cyBvZiB0aGlzIHRocmVhZCBhbmQgb3JnYW5pemVkIG5leHQgCj4gPiBwYXRjaCBhcyAK PiA+IAo+ID4gMS80IGRtYWVuZ2luZTogZnNsLWVkbWE6IGV4dHJhY3QgY29tbW9uIGZzbC1lZG1h IGNvZGUgKG5vIGNoYW5nZXMgLi4KPiA+IDIvNCBkbWFlbmdpbmU6IGZzbC1lZG1hOiBhZGQgZWRt YSB2ZXJzaW9uIGFuZCBjb25maWd1cmFibGUgcmVnaXN0ZXJzCj4gPiAzLzQgZG1hZW5naW5lOiBm c2wtZWRtYTogZml4IG1hY3Jvcwo+ID4gNC80IGRtYWVuZ2luZTogZnNsLWVkbWE6IGFkZCBDb2xk RmlyZSBtY2Y1NDQxeCBlZG1hIHN1cHBvcnQKPiAKPiBUaGF0IHNlZW1zIHNlbnNpYmxlLiBPbmUg bWlub3Igbml0IGluIEtjb25maWcgc3RpbGw6Cj4gCj4gLS0tIGEvZHJpdmVycy9kbWEvS2NvbmZp Zwo+ICsrKyBiL2RyaXZlcnMvZG1hL0tjb25maWcKPiBAQCAtMzIwLDYgKzMyMCwxNyBAQCBjb25m aWcgTFBDMThYWF9ETUFNVVgKPiAgICAgICAgRW5hYmxlIHN1cHBvcnQgZm9yIERNQSBvbiBOWFAg TFBDMTh4eC80M3h4IHBsYXRmb3Jtcwo+ICAgICAgICB3aXRoIFBMMDgwIGFuZCBtdWx0aXBsZXhl ZCBETUEgcmVxdWVzdCBsaW5lcy4KPiAgCj4gK2NvbmZpZyBNQ0ZfRURNQQo+ICsgICAgdHJpc3Rh dGUgIkZyZWVzY2FsZSBlRE1BIGVuZ2luZSBzdXBwb3J0LCBDb2xkRmlyZSBtY2Y1NDQxeCBTb0Nz Igo+ICsgICAgZGVwZW5kcyBvbiBNNTQ0MXgKPiAKPiBDYW4geW91IGFkZCAiIHx8IENPTVBJTEVf VEVTVCIgaGVyZSwgdGhpcyBoZWxwcyBmb3IgYXV0b21hdGVkIHRlc3RpbmcuCj4gCgpUaGUgY29t cGlsZSB0ZXN0IHJvYm90IGlzIGFscmVhZHkgYmVpbmcgcnVuLCBub3Qgc3VyZSB3aHkuIApJIGNh biBhZGQgaXQgYW55d2F5LgoKT2ssIHNvIGlmIG5vIG90aGVyIHBvaW50cywgaSB3aWxsIHByb2Nl ZWQgb24gYSB2OSBhZnRlciB0aGVzZSAyIGNoYW5nZXMuCgo+IC0tCj4gU3RlZmFuCj4gCj4gPiAK PiA+IExldCBtZSBrbm93IGlmIHlvdSBoYXZlIGFueSBvdGhlciBwb2ludCBvciBpZiBjYW4gcHJv Y2VlZC4KPiA+IAo+ID4gQmVzdCByZWdhcmRzLAo+ID4gQW5nZWxvIER1cmVnaGVsbG8KPiA+IAo+ ID4+IC0tCj4gPj4gU3RlZmFuCj4gPj4KPiA+PiA+Cj4gPj4gPiBCZXN0IHJlZ2FyZHMsCj4gPj4g PiBLcnp5c3p0b2YKPiA+PiA+Cj4gPj4gPj4gSWYgcG9zc2libGUgSSB3b3VsZCBwcmVmZXIgaWYg eW91IHN0YXJ0IHdpdGggY2xlYW51cC9jb252ZXJzaW9ucywgdGhlbgo+ID4+ID4+IHNwbGl0LXVw IGFuZCBmaW5hbGx5IGFkZCBmdW5jdGlvbmFsaXR5Lgo+ID4+ID4+Cj4gPj4gPj4gU28gaWRlYWxs eToKPiA+PiA+PiAxLiBVc2UgbWFjcm9zIGZvciBwcmVwcm9jZXNzb3IgZGVmaW5lcyAod2hlcmUg eW91IG1vdmUgdG8gQklUL0dFTk1BU0spCj4gPj4gPj4gMi4gU3BsaXQKPiA+PiA+PiAzLiBBZGQg RURNQSBtYWNyb3MgZXRjLgo+ID4+ID4+IDQuIEFkZCBDb2xkRmlyZSBtY2Y1NDQxeCBlZG1hIHN1 cHBvcnQKPiA+PiA+Pgo+ID4+IC0tCj4gPj4gVG8gdW5zdWJzY3JpYmUgZnJvbSB0aGlzIGxpc3Q6 IHNlbmQgdGhlIGxpbmUgInVuc3Vic2NyaWJlIGxpbnV4LW02OGsiIGluCj4gPj4gdGhlIGJvZHkg b2YgYSBtZXNzYWdlIHRvIG1ham9yZG9tb0B2Z2VyLmtlcm5lbC5vcmcKPiA+PiBNb3JlIG1ham9y ZG9tbyBpbmZvIGF0ICBodHRwOi8vdmdlci5rZXJuZWwub3JnL21ham9yZG9tby1pbmZvLmh0bWwK ClJlZ2FyZHMsCkFuZ2VsbyBEdXJlZ2hlbGxvCg== From mboxrd@z Thu Jan 1 00:00:00 1970 From: Angelo Dureghello Subject: Re: [PATCH v8 1/3] dmaengine: fsl-edma: extract common fsl-edma code (no changes in behavior intended) Date: Fri, 10 Aug 2018 10:43:27 +0200 Message-ID: <20180810084327.GA3296@jerusalem> References: <20180803193244.12084-1-angelo@sysam.it> <326d1fd7010c34488af6a874011d5280@agner.ch> <20180809223714.GA6467@jerusalem> <459738df7f6c9d439d968e4db67b1cd0@agner.ch> Mime-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Return-path: Content-Disposition: inline In-Reply-To: <459738df7f6c9d439d968e4db67b1cd0@agner.ch> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=m.gmane.org@lists.infradead.org To: Stefan Agner Cc: dmaengine@vger.kernel.org, linux-m68k@vger.kernel.org, vinod.koul@linaro.org, Krzysztof Kozlowski , linux-arm-kernel@lists.infradead.org List-Id: linux-m68k@vger.kernel.org Hi Stefan, On Fri, Aug 10, 2018 at 10:05:06AM +0200, Stefan Agner wrote: > On 10.08.2018 00:37, Angelo Dureghello wrote: > > Hi Stefan, > > > > i am about to post a v9 in short. > > > > On Tue, Aug 07, 2018 at 07:47:19PM +0200, Stefan Agner wrote: > >> On 07.08.2018 14:14, Krzysztof Kozlowski wrote: > >> > On 7 August 2018 at 10:08, Stefan Agner wrote: > >> >> On 03.08.2018 21:32, Angelo Dureghello wrote: > >> >>> This patch adds a new fsl-edma-common module to allow new > >> >>> mcf-edma module code to use most of the fsl-edma code. > >> >>> > >> >>> Signed-off-by: Angelo Dureghello > >> >>> --- > >> >>> Changes for v2: > >> >>> - patch splitted into 4 > >> >>> - add mcf-edma as minimal different parts from fsl-edma > >> >>> > >> >>> Changes for v3: > >> >>> none > >> >>> > >> >>> Changes for v4: > >> >>> - patch simplified from 4/4 into 2/2 > >> >>> - collecting all the mcf-edma-related changes > >> >>> > >> >>> Changes for v5: > >> >>> none > >> >>> > >> >>> Changes for v6: > >> >>> - adjusted comment header > >> >>> - fixed bit shift with BIT() > >> >>> - we need to free the interrupts at remove(), so removed all devm_ > >> >>> interrupt related calls > >> >>> > >> >>> Changes for v7: > >> >>> none > >> >>> > >> >>> Changes for v8: > >> >>> - patch rewritten from scratch, splitted into 3, common code isolated, > >> >>> minimal changes from the original Freescale code have been done. > >> >>> The patch has been tested with both Iris + Colibri Vybrid VF50 and > >> >>> stmark2/mcf54415 Coldfire boards. > >> >>> --- > >> >>> drivers/dma/Makefile | 2 +- > >> >>> drivers/dma/fsl-edma-common.c | 576 ++++++++++++++++++++++++++++ > >> >>> drivers/dma/fsl-edma-common.h | 196 ++++++++++ > >> >>> drivers/dma/fsl-edma.c | 697 +--------------------------------- > >> >>> 4 files changed, 774 insertions(+), 697 deletions(-) > >> >>> create mode 100644 drivers/dma/fsl-edma-common.c > >> >>> create mode 100644 drivers/dma/fsl-edma-common.h > >> >>> > >> >>> diff --git a/drivers/dma/Makefile b/drivers/dma/Makefile > >> >>> index 203a99d68315..66022f59fca4 100644 > >> >>> --- a/drivers/dma/Makefile > >> >>> +++ b/drivers/dma/Makefile > >> >>> @@ -31,7 +31,7 @@ obj-$(CONFIG_DW_AXI_DMAC) += dw-axi-dmac/ > >> >>> obj-$(CONFIG_DW_DMAC_CORE) += dw/ > >> >>> obj-$(CONFIG_EP93XX_DMA) += ep93xx_dma.o > >> >>> obj-$(CONFIG_FSL_DMA) += fsldma.o > >> >>> -obj-$(CONFIG_FSL_EDMA) += fsl-edma.o > >> >>> +obj-$(CONFIG_FSL_EDMA) += fsl-edma.o fsl-edma-common.o > >> >>> obj-$(CONFIG_FSL_RAID) += fsl_raid.o > >> >>> obj-$(CONFIG_HSU_DMA) += hsu/ > >> >>> obj-$(CONFIG_IMG_MDC_DMA) += img-mdc-dma.o > >> >>> diff --git a/drivers/dma/fsl-edma-common.c b/drivers/dma/fsl-edma-common.c > >> >>> new file mode 100644 > >> >>> index 000000000000..0ae7094f477a > >> >>> --- /dev/null > >> >>> +++ b/drivers/dma/fsl-edma-common.c > >> >>> @@ -0,0 +1,576 @@ > >> >>> +// SPDX-License-Identifier: GPL-2.0 > >> >>> +// > >> >>> +// Copyright (c) 2013-2014 Freescale Semiconductor, Inc > >> >>> +// Copyright (c) 2017 Sysam, Angelo Dureghello > >> >>> + > >> >>> +#include > >> >>> +#include > >> >>> +#include > >> >>> + > >> >>> +#include "fsl-edma-common.h" > >> >>> + > >> >>> +/* > >> >>> + * R/W functions for big- or little-endian registers: > >> >>> + * The eDMA controller's endian is independent of the CPU core's endian. > >> >>> + * For the big-endian IP module, the offset for 8-bit or 16-bit registers > >> >>> + * should also be swapped opposite to that in little-endian IP. > >> >>> + */ > >> >>> +u32 edma_readl(struct fsl_edma_engine *edma, void __iomem *addr) > >> >>> +{ > >> >>> + if (edma->big_endian) > >> >>> + return ioread32be(addr); > >> >>> + else > >> >>> + return ioread32(addr); > >> >>> +} > >> >>> +EXPORT_SYMBOL_GPL(edma_readl); > >> >> > >> >> In 3/3 you link the common object into the two modules individually: > >> >> > >> >> obj-$(CONFIG_FSL_EDMA) += fsl-edma.o fsl-edma-common.o > >> >> obj-$(CONFIG_MCF_EDMA) += mcf-edma.o fsl-edma-common.o > >> >> > >> >> Therefor you do not access those functions from another module (they are > >> >> within the module). No exporting should be necessary. Drop all those > >> >> exports. > >> > > >> > The fsl-edma-common will be its own module so the exports are > >> > necessary for proper linking/modpost. > >> > >> Hm, oh I see, I got that wrong. > >> > >> We could use > >> fsl-edma-all-y = fsl-edma.o fsl-edma-common.o > >> obj-$(CONFIG_FSL_EDMA) += fsl-edma-all.o > >> mcf-edma-all-y = mcf-edma.o fsl-edma-common.o > >> obj-$(CONFIG_MCF_EDMA) += mcf-edma-all.o > >> > >> to create two modules but that duplicates some code. It probably > >> wouldn't matter in practise since the two IPs are used on different > >> architecture... > >> > >> However, if we stay with the three modules approach, we should introduce > >> a hidden config symbol, e.g. > >> > >> config FSL_EDMA_COMMON > >> tristate > >> > >> In FSL_EDMA/MCF_EDMA use > >> select FSL_EDMA_COMMON > >> > >> And in the Makefile > >> obj-$(CONFIG_FSL_EDMA_COMMON) += fsl-edma-common.o > >> obj-$(CONFIG_FSL_EDMA) += fsl-edma.o > >> obj-$(CONFIG_MCF_EDMA) += mcf-edma.o > >> > >> > > There was already a discussion with Vinod and Geert on this, and i > > finally previously changed things in this way > > > > obj-$(CONFIG_FSL_EDMA) += fsl-edma.o fsl-edma-common.o > > > > The idea was to simplify things avoiding to use an additional > > config symbol, as i did initially. It's a common pattern in > > several Makefiles (e.g.drivers/net/ethernet/8390/Makefile and > > drivers/scsi/Makefile). > > Also we have a single common code part since obj-y is a list, > > and IIRC it's filtered for duplicates. > > So if can be ok for you too, i would not roll back again. > > > > I see, you refer to this discussion: > https://www.spinics.net/lists/dmaengine/msg15863.html > > Should have followed up on those discussions, sorry. Leave it as is > then. > > >> However, I do not like that the compiler can no longer inline simple > >> acesors like edma_(readl|writel). So if we stay with the three modules > >> approach then move at least the accesors and > >> to_fsl_edma_chan/to_fsl_edma_desc as inline functions to the header > >> file. > >> > > I agree too, my initial patch was a single separate driver. But it > > resulted in too much duplicated code, so a common module has been > > required. Btw, seems i cannot inline those functions. fsl-edma-common.h > > is included from both fsl-edma-common.c and mcf/fsl-edma.c resulting > > in multiple definitions linking error. > > I agree, we should introduce the common module and share as much as > possible. > > Just those small accessors typically get inlined by the compiler, and > often collapse completely in optimization phases (e.g. a function call > has more overhead than just inlining them, making resulting code smaller > and faster). > > Just define them as static inline, then it won't lead to linking errors. > > I tried with this change in fsl-edma-common.h (and remove them from > fsl-edma-common.c): > > -u32 edma_readl(struct fsl_edma_engine *edma, void __iomem *addr); > -void edma_writeb(struct fsl_edma_engine *edma, u8 val, void __iomem > *addr); > -void edma_writew(struct fsl_edma_engine *edma, u16 val, void __iomem > *addr); > -void edma_writel(struct fsl_edma_engine *edma, u32 val, void __iomem > *addr); > - > -struct fsl_edma_chan *to_fsl_edma_chan(struct dma_chan *chan); > -struct fsl_edma_desc *to_fsl_edma_desc(struct virt_dma_desc *vd); > +/* > + * R/W functions for big- or little-endian registers: > + * The eDMA controller's endian is independent of the CPU core's > endian. > + * For the big-endian IP module, the offset for 8-bit or 16-bit > registers > + * should also be swapped opposite to that in little-endian IP. > + */ > +static inline u32 edma_readl(struct fsl_edma_engine *edma, void __iomem > *addr) > +{ > + if (edma->big_endian) > + return ioread32be(addr); > + else > + return ioread32(addr); > +} > + > +static inline void edma_writeb(struct fsl_edma_engine *edma, u8 val, > void __iomem *addr) > +{ > + /* swap the reg offset for these in big-endian mode */ > + if (edma->big_endian) > + iowrite8(val, (void __iomem *)((unsigned long)addr ^ > 0x3)); > + else > + iowrite8(val, addr); > +} > + > +static inline void edma_writew(struct fsl_edma_engine *edma, u16 val, > void __iomem *addr) > +{ > + /* swap the reg offset for these in big-endian mode */ > + if (edma->big_endian) > + iowrite16be(val, (void __iomem *)((unsigned long)addr ^ > 0x2)); > + else > + iowrite16(val, addr); > +} > + > +static inline void edma_writel(struct fsl_edma_engine *edma, u32 val, > void __iomem *addr) > +{ > + if (edma->big_endian) > + iowrite32be(val, addr); > + else > + iowrite32(val, addr); > +} > + > +static inline struct fsl_edma_chan *to_fsl_edma_chan(struct dma_chan > *chan) > +{ > + return container_of(chan, struct fsl_edma_chan, vchan.chan); > +} > + > +static inline struct fsl_edma_desc *to_fsl_edma_desc(struct > virt_dma_desc *vd) > +{ > + return container_of(vd, struct fsl_edma_desc, vdesc); > +} > > > All three kernel modules end up being smaller (overall more than 1kB), > so the compiler really does its magic. > Great, will change as above. > > > > Mainly until v7 there was several discussions and a first approval, > > if possible i would not change again heavily the patch structure for > > a bug that seemss already been fixed. > > > > So i fixed all the possible points of this thread and organized next > > patch as > > > > 1/4 dmaengine: fsl-edma: extract common fsl-edma code (no changes .. > > 2/4 dmaengine: fsl-edma: add edma version and configurable registers > > 3/4 dmaengine: fsl-edma: fix macros > > 4/4 dmaengine: fsl-edma: add ColdFire mcf5441x edma support > > That seems sensible. One minor nit in Kconfig still: > > --- a/drivers/dma/Kconfig > +++ b/drivers/dma/Kconfig > @@ -320,6 +320,17 @@ config LPC18XX_DMAMUX > Enable support for DMA on NXP LPC18xx/43xx platforms > with PL080 and multiplexed DMA request lines. > > +config MCF_EDMA > + tristate "Freescale eDMA engine support, ColdFire mcf5441x SoCs" > + depends on M5441x > > Can you add " || COMPILE_TEST" here, this helps for automated testing. > The compile test robot is already being run, not sure why. I can add it anyway. Ok, so if no other points, i will proceed on a v9 after these 2 changes. > -- > Stefan > > > > > Let me know if you have any other point or if can proceed. > > > > Best regards, > > Angelo Dureghello > > > >> -- > >> Stefan > >> > >> > > >> > Best regards, > >> > Krzysztof > >> > > >> >> If possible I would prefer if you start with cleanup/conversions, then > >> >> split-up and finally add functionality. > >> >> > >> >> So ideally: > >> >> 1. Use macros for preprocessor defines (where you move to BIT/GENMASK) > >> >> 2. Split > >> >> 3. Add EDMA macros etc. > >> >> 4. Add ColdFire mcf5441x edma support > >> >> > >> -- > >> To unsubscribe from this list: send the line "unsubscribe linux-m68k" in > >> the body of a message to majordomo@vger.kernel.org > >> More majordomo info at http://vger.kernel.org/majordomo-info.html Regards, Angelo Dureghello From mboxrd@z Thu Jan 1 00:00:00 1970 From: angelo@sysam.it (Angelo Dureghello) Date: Fri, 10 Aug 2018 10:43:27 +0200 Subject: [PATCH v8 1/3] dmaengine: fsl-edma: extract common fsl-edma code (no changes in behavior intended) In-Reply-To: <459738df7f6c9d439d968e4db67b1cd0@agner.ch> References: <20180803193244.12084-1-angelo@sysam.it> <326d1fd7010c34488af6a874011d5280@agner.ch> <20180809223714.GA6467@jerusalem> <459738df7f6c9d439d968e4db67b1cd0@agner.ch> Message-ID: <20180810084327.GA3296@jerusalem> To: linux-arm-kernel@lists.infradead.org List-Id: linux-arm-kernel.lists.infradead.org Hi Stefan, On Fri, Aug 10, 2018 at 10:05:06AM +0200, Stefan Agner wrote: > On 10.08.2018 00:37, Angelo Dureghello wrote: > > Hi Stefan, > > > > i am about to post a v9 in short. > > > > On Tue, Aug 07, 2018 at 07:47:19PM +0200, Stefan Agner wrote: > >> On 07.08.2018 14:14, Krzysztof Kozlowski wrote: > >> > On 7 August 2018 at 10:08, Stefan Agner wrote: > >> >> On 03.08.2018 21:32, Angelo Dureghello wrote: > >> >>> This patch adds a new fsl-edma-common module to allow new > >> >>> mcf-edma module code to use most of the fsl-edma code. > >> >>> > >> >>> Signed-off-by: Angelo Dureghello > >> >>> --- > >> >>> Changes for v2: > >> >>> - patch splitted into 4 > >> >>> - add mcf-edma as minimal different parts from fsl-edma > >> >>> > >> >>> Changes for v3: > >> >>> none > >> >>> > >> >>> Changes for v4: > >> >>> - patch simplified from 4/4 into 2/2 > >> >>> - collecting all the mcf-edma-related changes > >> >>> > >> >>> Changes for v5: > >> >>> none > >> >>> > >> >>> Changes for v6: > >> >>> - adjusted comment header > >> >>> - fixed bit shift with BIT() > >> >>> - we need to free the interrupts at remove(), so removed all devm_ > >> >>> interrupt related calls > >> >>> > >> >>> Changes for v7: > >> >>> none > >> >>> > >> >>> Changes for v8: > >> >>> - patch rewritten from scratch, splitted into 3, common code isolated, > >> >>> minimal changes from the original Freescale code have been done. > >> >>> The patch has been tested with both Iris + Colibri Vybrid VF50 and > >> >>> stmark2/mcf54415 Coldfire boards. > >> >>> --- > >> >>> drivers/dma/Makefile | 2 +- > >> >>> drivers/dma/fsl-edma-common.c | 576 ++++++++++++++++++++++++++++ > >> >>> drivers/dma/fsl-edma-common.h | 196 ++++++++++ > >> >>> drivers/dma/fsl-edma.c | 697 +--------------------------------- > >> >>> 4 files changed, 774 insertions(+), 697 deletions(-) > >> >>> create mode 100644 drivers/dma/fsl-edma-common.c > >> >>> create mode 100644 drivers/dma/fsl-edma-common.h > >> >>> > >> >>> diff --git a/drivers/dma/Makefile b/drivers/dma/Makefile > >> >>> index 203a99d68315..66022f59fca4 100644 > >> >>> --- a/drivers/dma/Makefile > >> >>> +++ b/drivers/dma/Makefile > >> >>> @@ -31,7 +31,7 @@ obj-$(CONFIG_DW_AXI_DMAC) += dw-axi-dmac/ > >> >>> obj-$(CONFIG_DW_DMAC_CORE) += dw/ > >> >>> obj-$(CONFIG_EP93XX_DMA) += ep93xx_dma.o > >> >>> obj-$(CONFIG_FSL_DMA) += fsldma.o > >> >>> -obj-$(CONFIG_FSL_EDMA) += fsl-edma.o > >> >>> +obj-$(CONFIG_FSL_EDMA) += fsl-edma.o fsl-edma-common.o > >> >>> obj-$(CONFIG_FSL_RAID) += fsl_raid.o > >> >>> obj-$(CONFIG_HSU_DMA) += hsu/ > >> >>> obj-$(CONFIG_IMG_MDC_DMA) += img-mdc-dma.o > >> >>> diff --git a/drivers/dma/fsl-edma-common.c b/drivers/dma/fsl-edma-common.c > >> >>> new file mode 100644 > >> >>> index 000000000000..0ae7094f477a > >> >>> --- /dev/null > >> >>> +++ b/drivers/dma/fsl-edma-common.c > >> >>> @@ -0,0 +1,576 @@ > >> >>> +// SPDX-License-Identifier: GPL-2.0 > >> >>> +// > >> >>> +// Copyright (c) 2013-2014 Freescale Semiconductor, Inc > >> >>> +// Copyright (c) 2017 Sysam, Angelo Dureghello > >> >>> + > >> >>> +#include > >> >>> +#include > >> >>> +#include > >> >>> + > >> >>> +#include "fsl-edma-common.h" > >> >>> + > >> >>> +/* > >> >>> + * R/W functions for big- or little-endian registers: > >> >>> + * The eDMA controller's endian is independent of the CPU core's endian. > >> >>> + * For the big-endian IP module, the offset for 8-bit or 16-bit registers > >> >>> + * should also be swapped opposite to that in little-endian IP. > >> >>> + */ > >> >>> +u32 edma_readl(struct fsl_edma_engine *edma, void __iomem *addr) > >> >>> +{ > >> >>> + if (edma->big_endian) > >> >>> + return ioread32be(addr); > >> >>> + else > >> >>> + return ioread32(addr); > >> >>> +} > >> >>> +EXPORT_SYMBOL_GPL(edma_readl); > >> >> > >> >> In 3/3 you link the common object into the two modules individually: > >> >> > >> >> obj-$(CONFIG_FSL_EDMA) += fsl-edma.o fsl-edma-common.o > >> >> obj-$(CONFIG_MCF_EDMA) += mcf-edma.o fsl-edma-common.o > >> >> > >> >> Therefor you do not access those functions from another module (they are > >> >> within the module). No exporting should be necessary. Drop all those > >> >> exports. > >> > > >> > The fsl-edma-common will be its own module so the exports are > >> > necessary for proper linking/modpost. > >> > >> Hm, oh I see, I got that wrong. > >> > >> We could use > >> fsl-edma-all-y = fsl-edma.o fsl-edma-common.o > >> obj-$(CONFIG_FSL_EDMA) += fsl-edma-all.o > >> mcf-edma-all-y = mcf-edma.o fsl-edma-common.o > >> obj-$(CONFIG_MCF_EDMA) += mcf-edma-all.o > >> > >> to create two modules but that duplicates some code. It probably > >> wouldn't matter in practise since the two IPs are used on different > >> architecture... > >> > >> However, if we stay with the three modules approach, we should introduce > >> a hidden config symbol, e.g. > >> > >> config FSL_EDMA_COMMON > >> tristate > >> > >> In FSL_EDMA/MCF_EDMA use > >> select FSL_EDMA_COMMON > >> > >> And in the Makefile > >> obj-$(CONFIG_FSL_EDMA_COMMON) += fsl-edma-common.o > >> obj-$(CONFIG_FSL_EDMA) += fsl-edma.o > >> obj-$(CONFIG_MCF_EDMA) += mcf-edma.o > >> > >> > > There was already a discussion with Vinod and Geert on this, and i > > finally previously changed things in this way > > > > obj-$(CONFIG_FSL_EDMA) += fsl-edma.o fsl-edma-common.o > > > > The idea was to simplify things avoiding to use an additional > > config symbol, as i did initially. It's a common pattern in > > several Makefiles (e.g.drivers/net/ethernet/8390/Makefile and > > drivers/scsi/Makefile). > > Also we have a single common code part since obj-y is a list, > > and IIRC it's filtered for duplicates. > > So if can be ok for you too, i would not roll back again. > > > > I see, you refer to this discussion: > https://www.spinics.net/lists/dmaengine/msg15863.html > > Should have followed up on those discussions, sorry. Leave it as is > then. > > >> However, I do not like that the compiler can no longer inline simple > >> acesors like edma_(readl|writel). So if we stay with the three modules > >> approach then move at least the accesors and > >> to_fsl_edma_chan/to_fsl_edma_desc as inline functions to the header > >> file. > >> > > I agree too, my initial patch was a single separate driver. But it > > resulted in too much duplicated code, so a common module has been > > required. Btw, seems i cannot inline those functions. fsl-edma-common.h > > is included from both fsl-edma-common.c and mcf/fsl-edma.c resulting > > in multiple definitions linking error. > > I agree, we should introduce the common module and share as much as > possible. > > Just those small accessors typically get inlined by the compiler, and > often collapse completely in optimization phases (e.g. a function call > has more overhead than just inlining them, making resulting code smaller > and faster). > > Just define them as static inline, then it won't lead to linking errors. > > I tried with this change in fsl-edma-common.h (and remove them from > fsl-edma-common.c): > > -u32 edma_readl(struct fsl_edma_engine *edma, void __iomem *addr); > -void edma_writeb(struct fsl_edma_engine *edma, u8 val, void __iomem > *addr); > -void edma_writew(struct fsl_edma_engine *edma, u16 val, void __iomem > *addr); > -void edma_writel(struct fsl_edma_engine *edma, u32 val, void __iomem > *addr); > - > -struct fsl_edma_chan *to_fsl_edma_chan(struct dma_chan *chan); > -struct fsl_edma_desc *to_fsl_edma_desc(struct virt_dma_desc *vd); > +/* > + * R/W functions for big- or little-endian registers: > + * The eDMA controller's endian is independent of the CPU core's > endian. > + * For the big-endian IP module, the offset for 8-bit or 16-bit > registers > + * should also be swapped opposite to that in little-endian IP. > + */ > +static inline u32 edma_readl(struct fsl_edma_engine *edma, void __iomem > *addr) > +{ > + if (edma->big_endian) > + return ioread32be(addr); > + else > + return ioread32(addr); > +} > + > +static inline void edma_writeb(struct fsl_edma_engine *edma, u8 val, > void __iomem *addr) > +{ > + /* swap the reg offset for these in big-endian mode */ > + if (edma->big_endian) > + iowrite8(val, (void __iomem *)((unsigned long)addr ^ > 0x3)); > + else > + iowrite8(val, addr); > +} > + > +static inline void edma_writew(struct fsl_edma_engine *edma, u16 val, > void __iomem *addr) > +{ > + /* swap the reg offset for these in big-endian mode */ > + if (edma->big_endian) > + iowrite16be(val, (void __iomem *)((unsigned long)addr ^ > 0x2)); > + else > + iowrite16(val, addr); > +} > + > +static inline void edma_writel(struct fsl_edma_engine *edma, u32 val, > void __iomem *addr) > +{ > + if (edma->big_endian) > + iowrite32be(val, addr); > + else > + iowrite32(val, addr); > +} > + > +static inline struct fsl_edma_chan *to_fsl_edma_chan(struct dma_chan > *chan) > +{ > + return container_of(chan, struct fsl_edma_chan, vchan.chan); > +} > + > +static inline struct fsl_edma_desc *to_fsl_edma_desc(struct > virt_dma_desc *vd) > +{ > + return container_of(vd, struct fsl_edma_desc, vdesc); > +} > > > All three kernel modules end up being smaller (overall more than 1kB), > so the compiler really does its magic. > Great, will change as above. > > > > Mainly until v7 there was several discussions and a first approval, > > if possible i would not change again heavily the patch structure for > > a bug that seemss already been fixed. > > > > So i fixed all the possible points of this thread and organized next > > patch as > > > > 1/4 dmaengine: fsl-edma: extract common fsl-edma code (no changes .. > > 2/4 dmaengine: fsl-edma: add edma version and configurable registers > > 3/4 dmaengine: fsl-edma: fix macros > > 4/4 dmaengine: fsl-edma: add ColdFire mcf5441x edma support > > That seems sensible. One minor nit in Kconfig still: > > --- a/drivers/dma/Kconfig > +++ b/drivers/dma/Kconfig > @@ -320,6 +320,17 @@ config LPC18XX_DMAMUX > Enable support for DMA on NXP LPC18xx/43xx platforms > with PL080 and multiplexed DMA request lines. > > +config MCF_EDMA > + tristate "Freescale eDMA engine support, ColdFire mcf5441x SoCs" > + depends on M5441x > > Can you add " || COMPILE_TEST" here, this helps for automated testing. > The compile test robot is already being run, not sure why. I can add it anyway. Ok, so if no other points, i will proceed on a v9 after these 2 changes. > -- > Stefan > > > > > Let me know if you have any other point or if can proceed. > > > > Best regards, > > Angelo Dureghello > > > >> -- > >> Stefan > >> > >> > > >> > Best regards, > >> > Krzysztof > >> > > >> >> If possible I would prefer if you start with cleanup/conversions, then > >> >> split-up and finally add functionality. > >> >> > >> >> So ideally: > >> >> 1. Use macros for preprocessor defines (where you move to BIT/GENMASK) > >> >> 2. Split > >> >> 3. Add EDMA macros etc. > >> >> 4. Add ColdFire mcf5441x edma support > >> >> > >> -- > >> To unsubscribe from this list: send the line "unsubscribe linux-m68k" in > >> the body of a message to majordomo at vger.kernel.org > >> More majordomo info at http://vger.kernel.org/majordomo-info.html Regards, Angelo Dureghello