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: [v3] dmaengine: pl330: flush before wait, and add dev burst support. From: Vinod Koul Message-Id: <20180311150151.GB15443@localhost> Date: Sun, 11 Mar 2018 20:31:51 +0530 To: fmhess@users.sourceforge.net Cc: dmaengine@vger.kernel.org, Dan Williams , linux-kernel@vger.kernel.org List-ID: T24gVHVlLCBNYXIgMDYsIDIwMTggYXQgMTE6MDM6MjJBTSAtMDUwMCwgRnJhbmsgTW9yaSBIZXNz IHdyb3RlOgo+IERvIERNQUZMVVNIUCBfYmVmb3JlXyB0aGUgZmlyc3QgRE1BV0ZQIHRvIGVuc3Vy ZSBjb250cm9sbGVyCj4gYW5kIHBlcmlwaGVyYWwgYXJlIGluIGFncmVlbWVudCBhYm91dCBkbWEg cmVxdWVzdCBzdGF0ZSBiZWZvcmUgZmlyc3QKPiB0cmFuc2Zlci4gIEFkZCBzdXBwb3J0IGZvciBi dXJzdCB0cmFuc2ZlcnMgdG8vZnJvbSBwZXJpcGhlcmFscy4gSW4gdGhlIG5ldwo+IHNjaGVtZSwg dGhlIGNvbnRyb2xsZXIgZG9lcyBhcyBtYW55IGJ1cnN0IHRyYW5zZmVycyBhcyBpdCBjYW4gdGhl bgo+IHRyYW5zZmVycyB0aGUgcmVtYWluaW5nIGRyZWdzIHdpdGggZWl0aGVyIHNpbmdsZSB0cmFu c2ZlcnMgZm9yCj4gcGVyaXBoZXJhbHMsIG9yIHdpdGggYSByZWR1Y2VkIHNpemUgYnVyc3QgZm9y IG1lbW9yeS10by1tZW1vcnkgdHJhbnNmZXJzLgo+IAo+IFNpZ25lZC1vZmYtYnk6IEZyYW5rIE1v cmkgSGVzcyA8Zm1oNmpqQGdtYWlsLmNvbT4KPiBUZXN0ZWQtYnk6IEZyYW5rIE1vcmkgSGVzcyA8 Zm1oNmpqQGdtYWlsLmNvbT4KCnNvcnJ5IGlmIGl0IHdhc250IGNsZWFyIGVhcmxpZXIsIHRoZSBs aW5lcyBiZWxvdyBzaG91bGQgY29tZSBhZnRlciB0aGUgLS0tCmxpbmUuIGdpdC1hbSBza2lwcyB0 aGF0IHBhcnQgd2hpbGUgYXBwbHlpbmcuLgoKPiAKPiBJIHRlc3RlZCBkbWEgdHJhbnNmZXJzIHRv IHBlcmlwaGVyYWxzIHdpdGggZGVzaWdud2FyZSBzZXJpYWwgcG9ydAo+IChkcml2ZXJzL3R0eS9z ZXJpYWwvODI1MC84MjUwX2R3LmMpIGFuZCBhIEdQSUIgaW50ZXJmYWNlCj4gKGh0dHBzOi8vZ2l0 aHViLmNvbS9mbWhlc3MvZm1oX2dwaWJfY29yZSkuICBJIHRlc3RlZCBtZW1vcnktdG8tbWVtb3J5 Cj4gdHJhbnNmZXJzIHVzaW5nIHRoZSBkbWF0ZXN0IG1vZHVsZS4KPiAKPiB2MyBvZiB0aGlzIHBh dGNoIHNob3VsZCBiZSB0aGUgc2FtZSBhcyB2MiBleGNlcHQgd2l0aCBjaGVja3BhdGNoLnBsCj4g d2FybmluZ3MgYW5kIGVycm9ycyBjbGVhbmVkIHVwLgo+IAo+IC0tLQo+ICBkcml2ZXJzL2RtYS9w bDMzMC5jIHwgMTQ2ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKystLS0tLS0t LS0tLS0tLS0KPiAgMSBmaWxlIGNoYW5nZWQsIDEwNCBpbnNlcnRpb25zKCspLCA0MiBkZWxldGlv bnMoLSkKPiAKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9kbWEvcGwzMzAuYyBiL2RyaXZlcnMvZG1h L3BsMzMwLmMKPiBpbmRleCBkNzMyN2ZkNWY0NDUuLmNjMmU0NDU2YmVjMSAxMDA2NDQKPiAtLS0g YS9kcml2ZXJzL2RtYS9wbDMzMC5jCj4gKysrIGIvZHJpdmVycy9kbWEvcGwzMzAuYwo+IEBAIC0x MDk0LDI2ICsxMDk0LDMzIEBAIHN0YXRpYyBpbmxpbmUgaW50IF9sZHN0X21lbXRvbWVtKHVuc2ln bmVkIGRyeV9ydW4sIHU4IGJ1ZltdLAo+ICAJcmV0dXJuIG9mZjsKPiAgfQo+ICAKPiAtc3RhdGlj IGlubGluZSBpbnQgX2xkc3RfZGV2dG9tZW0oc3RydWN0IHBsMzMwX2RtYWMgKnBsMzMwLCB1bnNp Z25lZCBkcnlfcnVuLAo+IC0JCQkJIHU4IGJ1ZltdLCBjb25zdCBzdHJ1Y3QgX3hmZXJfc3BlYyAq cHhzLAo+IC0JCQkJIGludCBjeWMpCj4gK3N0YXRpYyBpbmxpbmUgaW50IF9sZHN0X2RldnRvbWVt KHN0cnVjdCBwbDMzMF9kbWFjICpwbDMzMCwKPiArCQkJCXVuc2lnbmVkIGludCBkcnlfcnVuLCB1 OCBidWZbXSwKPiArCQkJCWNvbnN0IHN0cnVjdCBfeGZlcl9zcGVjICpweHMsCj4gKwkJCQlpbnQg Y3ljLCBlbnVtIHBsMzMwX2NvbmQgY29uZCkKPiAgewo+ICAJaW50IG9mZiA9IDA7Cj4gLQllbnVt IHBsMzMwX2NvbmQgY29uZDsKPiAgCj4gIAlpZiAocGwzMzAtPnF1aXJrcyAmIFBMMzMwX1FVSVJL X0JST0tFTl9OT19GTFVTSFApCj4gIAkJY29uZCA9IEJVUlNUOwo+IC0JZWxzZQo+IC0JCWNvbmQg PSBTSU5HTEU7Cj4gIAo+ICsJLyogZG8gRkxVU0hQIGF0IGJlZ2lubmluZyB0byBjbGVhciBhbnkg c3RhbGUgZG1hIHJlcXVlc3RzIGJlZm9yZSB0aGUKPiArCSAqIGZpcnN0IFdGUC4KPiArCSAqLwoK bXVsdGlsaW5lIGNvbW1lbnRzIHNob3VsZCBiZToKCi8qCiAqIHRoaXMgaXMgYW4gZXhhbXBsZSBv ZiBtdWx0aS1saW5lCiAqIGNvbW1lbnQKICovCgpQbHMgZml4IGF0IHRoaXMgYW5kIG90aGVyIHBs YWNlcy4uLgoKPiAgc3RhdGljIGlubGluZSBpbnQgX2xkc3RfbWVtdG9kZXYoc3RydWN0IHBsMzMw X2RtYWMgKnBsMzMwLAo+ICAJCQkJIHVuc2lnbmVkIGRyeV9ydW4sIHU4IGJ1ZltdLAo+IC0JCQkJ IGNvbnN0IHN0cnVjdCBfeGZlcl9zcGVjICpweHMsIGludCBjeWMpCj4gKwkJCQkgY29uc3Qgc3Ry dWN0IF94ZmVyX3NwZWMgKnB4cywgaW50IGN5YywKPiArCQkJCSBlbnVtIHBsMzMwX2NvbmQgY29u ZCkKPiAgewo+ICAJaW50IG9mZiA9IDA7Cj4gLQllbnVtIHBsMzMwX2NvbmQgY29uZDsKPiAgCj4g IAlpZiAocGwzMzAtPnF1aXJrcyAmIFBMMzMwX1FVSVJLX0JST0tFTl9OT19GTFVTSFApCj4gIAkJ Y29uZCA9IEJVUlNUOwo+IC0JZWxzZQo+IC0JCWNvbmQgPSBTSU5HTEU7Cj4gIAo+ICsJLyogZG8g RkxVU0hQIGF0IGJlZ2lubmluZyB0byBjbGVhciBhbnkgc3RhbGUgZG1hIHJlcXVlc3RzIGJlZm9y ZSB0aGUKPiArCSAqIGZpcnN0IFdGUC4KPiArCSAqLwo+ICsJaWYgKCEocGwzMzAtPnF1aXJrcyAm IFBMMzMwX1FVSVJLX0JST0tFTl9OT19GTFVTSFApKQo+ICsJCW9mZiArPSBfZW1pdF9GTFVTSFAo ZHJ5X3J1biwgJmJ1ZltvZmZdLCBweHMtPmRlc2MtPnBlcmkpOwo+ICAJd2hpbGUgKGN5Yy0tKSB7 Cj4gIAkJb2ZmICs9IF9lbWl0X1dGUChkcnlfcnVuLCAmYnVmW29mZl0sIGNvbmQsIHB4cy0+ZGVz Yy0+cGVyaSk7Cj4gIAkJb2ZmICs9IF9lbWl0X0xEKGRyeV9ydW4sICZidWZbb2ZmXSwgQUxXQVlT KTsKPiAtCQlvZmYgKz0gX2VtaXRfU1RQKGRyeV9ydW4sICZidWZbb2ZmXSwgY29uZCwgcHhzLT5k ZXNjLT5wZXJpKTsKPiAtCj4gLQkJaWYgKCEocGwzMzAtPnF1aXJrcyAmIFBMMzMwX1FVSVJLX0JS T0tFTl9OT19GTFVTSFApKQo+IC0JCQlvZmYgKz0gX2VtaXRfRkxVU0hQKGRyeV9ydW4sICZidWZb b2ZmXSwKPiAtCQkJCQkgICAgcHhzLT5kZXNjLT5wZXJpKTsKPiArCQlpZiAoY29uZCA9PSBBTFdB WVMpIHsKPiArCQkJb2ZmICs9IF9lbWl0X1NUUChkcnlfcnVuLCAmYnVmW29mZl0sIFNJTkdMRSwK PiArCQkJCXB4cy0+ZGVzYy0+cGVyaSk7Cj4gKwkJCW9mZiArPSBfZW1pdF9TVFAoZHJ5X3J1biwg JmJ1ZltvZmZdLCBCVVJTVCwKPiArCQkJCXB4cy0+ZGVzYy0+cGVyaSk7Cj4gKwkJfSBlbHNlIHsK PiArCQkJb2ZmICs9IF9lbWl0X1NUUChkcnlfcnVuLCAmYnVmW29mZl0sIGNvbmQsCj4gKwkJCQlw eHMtPmRlc2MtPnBlcmkpOwo+ICsJCX0KCnRoaXMgbG9va3MgcXVpdGUgc2ltaWxhciB0byBwcmV2 aW91cyByb3V0aW5lIGFib3ZlLCBpZiBzbyBjYW4gd2UgcGxlYXNlIG1ha2UKaXQgY29tbW9uIGZ1 bmN0aW9uIGFuZCBpbnZva2UgZnJvbSBib3RoIG9mIHRoZXNlLi4uCgo+ICtzdGF0aWMgaW50IF9k cmVncyhzdHJ1Y3QgcGwzMzBfZG1hYyAqcGwzMzAsIHVuc2lnbmVkIGludCBkcnlfcnVuLCB1OCBi dWZbXSwKPiArCQljb25zdCBzdHJ1Y3QgX3hmZXJfc3BlYyAqcHhzLCBpbnQgdHJhbnNmZXJfbGVu Z3RoKQo+ICt7Cj4gKwlpbnQgb2ZmID0gMDsKPiArCWludCBkcmVnc19jY3I7Cj4gKwo+ICsJaWYg KHRyYW5zZmVyX2xlbmd0aCA9PSAwKQo+ICsJCXJldHVybiBvZmY7Cj4gKwo+ICsJc3dpdGNoIChw eHMtPmRlc2MtPnJxdHlwZSkgewo+ICsJY2FzZSBETUFfTUVNX1RPX0RFVjoKPiArCQlvZmYgKz0g X2xkc3RfbWVtdG9kZXYocGwzMzAsIGRyeV9ydW4sICZidWZbb2ZmXSwgcHhzLAo+ICsJCQl0cmFu c2Zlcl9sZW5ndGgsIFNJTkdMRSk7Cj4gKwkJYnJlYWs7CgplbXB0eSBsaW5lIGFmdGVyIGVhY2gg Y2FzZSBwbHMKCj4gKwljYXNlIERNQV9ERVZfVE9fTUVNOgo+ICsJCW9mZiArPSBfbGRzdF9kZXZ0 b21lbShwbDMzMCwgZHJ5X3J1biwgJmJ1ZltvZmZdLCBweHMsCj4gKwkJCXRyYW5zZmVyX2xlbmd0 aCwgU0lOR0xFKTsKPiArCQlicmVhazsKPiArCWNhc2UgRE1BX01FTV9UT19NRU06Cj4gKwkJZHJl Z3NfY2NyID0gcHhzLT5jY3I7Cj4gKwkJZHJlZ3NfY2NyICY9IH4oKDB4ZiA8PCBDQ19TUkNCUlNU TEVOX1NIRlQpIHwKPiArCQkJKDB4ZiA8PCBDQ19EU1RCUlNUTEVOX1NIRlQpKTsKPiArCQlkcmVn c19jY3IgfD0gKCgodHJhbnNmZXJfbGVuZ3RoIC0gMSkgJiAweGYpIDw8Cj4gKwkJCUNDX1NSQ0JS U1RMRU5fU0hGVCk7Cj4gKwkJZHJlZ3NfY2NyIHw9ICgoKHRyYW5zZmVyX2xlbmd0aCAtIDEpICYg MHhmKSA8PAo+ICsJCQlDQ19EU1RCUlNUTEVOX1NIRlQpOwo+ICsJCW9mZiArPSBfZW1pdF9NT1Yo ZHJ5X3J1biwgJmJ1ZltvZmZdLCBDQ1IsIGRyZWdzX2Njcik7Cj4gKwkJb2ZmICs9IF9sZHN0X21l bXRvbWVtKGRyeV9ydW4sICZidWZbb2ZmXSwgcHhzLCAxKTsKPiArCQlicmVhazsKPiArCWRlZmF1 bHQ6Cj4gKwkJb2ZmICs9IDB4NDAwMDAwMDA7IC8qIFNjYXJlIG9mZiB0aGUgQ2xpZW50ICovCgpD YW4geW91IGV4cGxhaW4gdGhpcyBiaXQsIHNob3VsZG50IHRoaXMgYmUgZXJyPwoKPiBAQCAtMTMw MywxMSArMTM2Miw2IEBAIHN0YXRpYyBpbnQgX3NldHVwX3JlcShzdHJ1Y3QgcGwzMzBfZG1hYyAq cGwzMzAsIHVuc2lnbmVkIGRyeV9ydW4sCj4gIAkvKiBETUFNT1YgQ0NSLCBjY3IgKi8KPiAgCW9m ZiArPSBfZW1pdF9NT1YoZHJ5X3J1biwgJmJ1ZltvZmZdLCBDQ1IsIHB4cy0+Y2NyKTsKPiAgCj4g LQl4ID0gJnB4cy0+ZGVzYy0+cHg7Cj4gLQkvKiBFcnJvciBpZiB4ZmVyIGxlbmd0aCBpcyBub3Qg YWxpZ25lZCBhdCBidXJzdCBzaXplICovCj4gLQlpZiAoeC0+Ynl0ZXMgJSAoQlJTVF9TSVpFKHB4 cy0+Y2NyKSAqIEJSU1RfTEVOKHB4cy0+Y2NyKSkpCj4gLQkJcmV0dXJuIC1FSU5WQUw7Cj4gLQo+ ICAJb2ZmICs9IF9zZXR1cF94ZmVyKHBsMzMwLCBkcnlfcnVuLCAmYnVmW29mZl0sIHB4cyk7Cj4g IAo+ICAJLyogRE1BU0VWIHBlcmlwaGVyYWwvZXZlbnQgKi8KPiBAQCAtMjExNSwxNSArMjE2OSwy OSBAQCBzdGF0aWMgaW50IHBsMzMwX2NvbmZpZyhzdHJ1Y3QgZG1hX2NoYW4gKmNoYW4sCj4gIAkJ CXBjaC0+Zmlmb19hZGRyID0gc2xhdmVfY29uZmlnLT5kc3RfYWRkcjsKPiAgCQlpZiAoc2xhdmVf Y29uZmlnLT5kc3RfYWRkcl93aWR0aCkKPiAgCQkJcGNoLT5idXJzdF9zeiA9IF9fZmZzKHNsYXZl X2NvbmZpZy0+ZHN0X2FkZHJfd2lkdGgpOwo+IC0JCWlmIChzbGF2ZV9jb25maWctPmRzdF9tYXhi dXJzdCkKPiAtCQkJcGNoLT5idXJzdF9sZW4gPSBzbGF2ZV9jb25maWctPmRzdF9tYXhidXJzdDsK PiArCQlpZiAocGNoLT5kbWFjLT5xdWlya3MgJiBQTDMzMF9RVUlSS19CUk9LRU5fTk9fRkxVU0hQ KQo+ICsJCQlwY2gtPmJ1cnN0X2xlbiA9IDE7CgpzbyBpbiB0aGlzIGNhc2Ugd2UgZG9uJ3QgaG9u b3VyIHRoZSByZXF1ZXN0ZWQgYnVyc3QgbGVuZ3RoPwoKPiArCQllbHNlIGlmIChzbGF2ZV9jb25m aWctPmRzdF9tYXhidXJzdCkgewo+ICsJCQlpZiAoc2xhdmVfY29uZmlnLT5kc3RfbWF4YnVyc3Qg PiBQTDMzMF9NQVhfQlVSU1QpCj4gKwkJCQlwY2gtPmJ1cnN0X2xlbiA9IFBMMzMwX01BWF9CVVJT VDsKPiArCQkJZWxzZQo+ICsJCQkJcGNoLT5idXJzdF9sZW4gPSBzbGF2ZV9jb25maWctPmRzdF9t YXhidXJzdDsKPiArCQl9IGVsc2UKPiArCQkJcGNoLT5idXJzdF9sZW4gPSAxOwo+ICAJfSBlbHNl IGlmIChzbGF2ZV9jb25maWctPmRpcmVjdGlvbiA9PSBETUFfREVWX1RPX01FTSkgewo+ICAJCWlm IChzbGF2ZV9jb25maWctPnNyY19hZGRyKQo+ICAJCQlwY2gtPmZpZm9fYWRkciA9IHNsYXZlX2Nv bmZpZy0+c3JjX2FkZHI7Cj4gIAkJaWYgKHNsYXZlX2NvbmZpZy0+c3JjX2FkZHJfd2lkdGgpCj4g IAkJCXBjaC0+YnVyc3Rfc3ogPSBfX2ZmcyhzbGF2ZV9jb25maWctPnNyY19hZGRyX3dpZHRoKTsK PiAtCQlpZiAoc2xhdmVfY29uZmlnLT5zcmNfbWF4YnVyc3QpCj4gLQkJCXBjaC0+YnVyc3RfbGVu ID0gc2xhdmVfY29uZmlnLT5zcmNfbWF4YnVyc3Q7Cj4gKwkJaWYgKHBjaC0+ZG1hYy0+cXVpcmtz ICYgUEwzMzBfUVVJUktfQlJPS0VOX05PX0ZMVVNIUCkKPiArCQkJcGNoLT5idXJzdF9sZW4gPSAx Owo+ICsJCWVsc2UgaWYgKHNsYXZlX2NvbmZpZy0+c3JjX21heGJ1cnN0KSB7Cj4gKwkJCWlmIChz bGF2ZV9jb25maWctPnNyY19tYXhidXJzdCA+IFBMMzMwX01BWF9CVVJTVCkKPiArCQkJCXBjaC0+ YnVyc3RfbGVuID0gUEwzMzBfTUFYX0JVUlNUOwo+ICsJCQllbHNlCj4gKwkJCQlwY2gtPmJ1cnN0 X2xlbiA9IHNsYXZlX2NvbmZpZy0+c3JjX21heGJ1cnN0Owo+ICsJCX0gZWxzZQo+ICsJCQlwY2gt PmJ1cnN0X2xlbiA9IDE7CgphZ2FpbiB0aGlzIGxvb2tzIGR1cGxpY2F0ZS4uCg== From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S932268AbeCKO54 (ORCPT ); Sun, 11 Mar 2018 10:57:56 -0400 Received: from mga17.intel.com ([192.55.52.151]:30407 "EHLO mga17.intel.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S932144AbeCKO5y (ORCPT ); Sun, 11 Mar 2018 10:57:54 -0400 X-Amp-Result: UNKNOWN X-Amp-Original-Verdict: FILE UNKNOWN X-Amp-File-Uploaded: False X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.47,455,1515484800"; d="scan'208";a="41016630" Date: Sun, 11 Mar 2018 20:31:51 +0530 From: Vinod Koul To: fmhess@users.sourceforge.net Cc: dmaengine@vger.kernel.org, Dan Williams , linux-kernel@vger.kernel.org Subject: Re: [PATCH v3] dmaengine: pl330: flush before wait, and add dev burst support. Message-ID: <20180311150151.GB15443@localhost> References: <1957017.QzKNMJJqD6@bear> <20180306120259.GT15443@localhost> <23394379.8nZhno5foU@bear> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <23394379.8nZhno5foU@bear> User-Agent: Mutt/1.5.24 (2015-08-30) Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Tue, Mar 06, 2018 at 11:03:22AM -0500, Frank Mori Hess wrote: > Do DMAFLUSHP _before_ the first DMAWFP to ensure controller > and peripheral are in agreement about dma request state before first > transfer. Add support for burst transfers to/from peripherals. In the new > scheme, the controller does as many burst transfers as it can then > transfers the remaining dregs with either single transfers for > peripherals, or with a reduced size burst for memory-to-memory transfers. > > Signed-off-by: Frank Mori Hess > Tested-by: Frank Mori Hess sorry if it wasnt clear earlier, the lines below should come after the --- line. git-am skips that part while applying.. > > I tested dma transfers to peripherals with designware serial port > (drivers/tty/serial/8250/8250_dw.c) and a GPIB interface > (https://github.com/fmhess/fmh_gpib_core). I tested memory-to-memory > transfers using the dmatest module. > > v3 of this patch should be the same as v2 except with checkpatch.pl > warnings and errors cleaned up. > > --- > drivers/dma/pl330.c | 146 +++++++++++++++++++++++++++++++++++++--------------- > 1 file changed, 104 insertions(+), 42 deletions(-) > > diff --git a/drivers/dma/pl330.c b/drivers/dma/pl330.c > index d7327fd5f445..cc2e4456bec1 100644 > --- a/drivers/dma/pl330.c > +++ b/drivers/dma/pl330.c > @@ -1094,26 +1094,33 @@ static inline int _ldst_memtomem(unsigned dry_run, u8 buf[], > return off; > } > > -static inline int _ldst_devtomem(struct pl330_dmac *pl330, unsigned dry_run, > - u8 buf[], const struct _xfer_spec *pxs, > - int cyc) > +static inline int _ldst_devtomem(struct pl330_dmac *pl330, > + unsigned int dry_run, u8 buf[], > + const struct _xfer_spec *pxs, > + int cyc, enum pl330_cond cond) > { > int off = 0; > - enum pl330_cond cond; > > if (pl330->quirks & PL330_QUIRK_BROKEN_NO_FLUSHP) > cond = BURST; > - else > - cond = SINGLE; > > + /* do FLUSHP at beginning to clear any stale dma requests before the > + * first WFP. > + */ multiline comments should be: /* * this is an example of multi-line * comment */ Pls fix at this and other places... > static inline int _ldst_memtodev(struct pl330_dmac *pl330, > unsigned dry_run, u8 buf[], > - const struct _xfer_spec *pxs, int cyc) > + const struct _xfer_spec *pxs, int cyc, > + enum pl330_cond cond) > { > int off = 0; > - enum pl330_cond cond; > > if (pl330->quirks & PL330_QUIRK_BROKEN_NO_FLUSHP) > cond = BURST; > - else > - cond = SINGLE; > > + /* do FLUSHP at beginning to clear any stale dma requests before the > + * first WFP. > + */ > + if (!(pl330->quirks & PL330_QUIRK_BROKEN_NO_FLUSHP)) > + off += _emit_FLUSHP(dry_run, &buf[off], pxs->desc->peri); > while (cyc--) { > off += _emit_WFP(dry_run, &buf[off], cond, pxs->desc->peri); > off += _emit_LD(dry_run, &buf[off], ALWAYS); > - off += _emit_STP(dry_run, &buf[off], cond, pxs->desc->peri); > - > - if (!(pl330->quirks & PL330_QUIRK_BROKEN_NO_FLUSHP)) > - off += _emit_FLUSHP(dry_run, &buf[off], > - pxs->desc->peri); > + if (cond == ALWAYS) { > + off += _emit_STP(dry_run, &buf[off], SINGLE, > + pxs->desc->peri); > + off += _emit_STP(dry_run, &buf[off], BURST, > + pxs->desc->peri); > + } else { > + off += _emit_STP(dry_run, &buf[off], cond, > + pxs->desc->peri); > + } this looks quite similar to previous routine above, if so can we please make it common function and invoke from both of these... > +static int _dregs(struct pl330_dmac *pl330, unsigned int dry_run, u8 buf[], > + const struct _xfer_spec *pxs, int transfer_length) > +{ > + int off = 0; > + int dregs_ccr; > + > + if (transfer_length == 0) > + return off; > + > + switch (pxs->desc->rqtype) { > + case DMA_MEM_TO_DEV: > + off += _ldst_memtodev(pl330, dry_run, &buf[off], pxs, > + transfer_length, SINGLE); > + break; empty line after each case pls > + case DMA_DEV_TO_MEM: > + off += _ldst_devtomem(pl330, dry_run, &buf[off], pxs, > + transfer_length, SINGLE); > + break; > + case DMA_MEM_TO_MEM: > + dregs_ccr = pxs->ccr; > + dregs_ccr &= ~((0xf << CC_SRCBRSTLEN_SHFT) | > + (0xf << CC_DSTBRSTLEN_SHFT)); > + dregs_ccr |= (((transfer_length - 1) & 0xf) << > + CC_SRCBRSTLEN_SHFT); > + dregs_ccr |= (((transfer_length - 1) & 0xf) << > + CC_DSTBRSTLEN_SHFT); > + off += _emit_MOV(dry_run, &buf[off], CCR, dregs_ccr); > + off += _ldst_memtomem(dry_run, &buf[off], pxs, 1); > + break; > + default: > + off += 0x40000000; /* Scare off the Client */ Can you explain this bit, shouldnt this be err? > @@ -1303,11 +1362,6 @@ static int _setup_req(struct pl330_dmac *pl330, unsigned dry_run, > /* DMAMOV CCR, ccr */ > off += _emit_MOV(dry_run, &buf[off], CCR, pxs->ccr); > > - x = &pxs->desc->px; > - /* Error if xfer length is not aligned at burst size */ > - if (x->bytes % (BRST_SIZE(pxs->ccr) * BRST_LEN(pxs->ccr))) > - return -EINVAL; > - > off += _setup_xfer(pl330, dry_run, &buf[off], pxs); > > /* DMASEV peripheral/event */ > @@ -2115,15 +2169,29 @@ static int pl330_config(struct dma_chan *chan, > pch->fifo_addr = slave_config->dst_addr; > if (slave_config->dst_addr_width) > pch->burst_sz = __ffs(slave_config->dst_addr_width); > - if (slave_config->dst_maxburst) > - pch->burst_len = slave_config->dst_maxburst; > + if (pch->dmac->quirks & PL330_QUIRK_BROKEN_NO_FLUSHP) > + pch->burst_len = 1; so in this case we don't honour the requested burst length? > + else if (slave_config->dst_maxburst) { > + if (slave_config->dst_maxburst > PL330_MAX_BURST) > + pch->burst_len = PL330_MAX_BURST; > + else > + pch->burst_len = slave_config->dst_maxburst; > + } else > + pch->burst_len = 1; > } else if (slave_config->direction == DMA_DEV_TO_MEM) { > if (slave_config->src_addr) > pch->fifo_addr = slave_config->src_addr; > if (slave_config->src_addr_width) > pch->burst_sz = __ffs(slave_config->src_addr_width); > - if (slave_config->src_maxburst) > - pch->burst_len = slave_config->src_maxburst; > + if (pch->dmac->quirks & PL330_QUIRK_BROKEN_NO_FLUSHP) > + pch->burst_len = 1; > + else if (slave_config->src_maxburst) { > + if (slave_config->src_maxburst > PL330_MAX_BURST) > + pch->burst_len = PL330_MAX_BURST; > + else > + pch->burst_len = slave_config->src_maxburst; > + } else > + pch->burst_len = 1; again this looks duplicate.. -- ~Vinod