From mboxrd@z Thu Jan 1 00:00:00 1970 From: Nicolas Ferre Subject: Re: [PATCH v4 4/5] tty/serial: at91: add support to FIFOs Date: Wed, 29 Jul 2015 17:09:59 +0200 Message-ID: <55B8ECC7.6010304@atmel.com> References: <4d8e90ad2cbb0d020dae4a4806ffc8864b5b22b6.1435842688.git.cyrille.pitchen@atmel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: 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: Andy Shevchenko , Cyrille Pitchen , Greg Kroah-Hartman , Hans-Christian Egtvedt Cc: Mark Rutland , devicetree , Pawel Moll , ijc+devicetree , "linux-kernel@vger.kernel.org" , Rob Herring , wenyou.yang@atmel.com, josh.wu@atmel.com, "ludovic.desroches" , alexandre.belloni@free-electrons.com, "linux-serial@vger.kernel.org" , Kumar Gala , leilei.zhao@atmel.com, linux-arm Mailing List List-Id: linux-serial@vger.kernel.org TGUgMjkvMDcvMjAxNSAxNjo1MSwgQW5keSBTaGV2Y2hlbmtvIGEgw6ljcml0IDoKPiBPbiBUaHUs IEp1bCAyLCAyMDE1IGF0IDQ6MTggUE0sIEN5cmlsbGUgUGl0Y2hlbgo+IDxjeXJpbGxlLnBpdGNo ZW5AYXRtZWwuY29tPiB3cm90ZToKPj4gRGVwZW5kaW5nIG9uIHRoZSBoYXJkd2FyZSwgVFggYW5k IFJYIEZJRk9zIG1heSBiZSBhdmFpbGFibGUuIFRoZSBSWAo+PiBGSUZPIGNhbiBhdm9pZCByZWNl aXZlIG92ZXJydW5zLCBlc3BlY2lhbGx5IHdoZW4gRE1BIHRyYW5zZmVycyBhcmUKPj4gbm90IHVz ZWQgdG8gcmVhZCBkYXRhIGZyb20gdGhlIFJlY2VpdmUgSG9sZGluZyBSZWdpc3Rlci4gRm9yIGhl YXZ5Cj4+IHN5c3RlbSBsb2FkLCBUaGUgQ1BVIGlzIGxpa2VseSBub3QgYmUgYWJsZSB0byBmZXRj aCBkYXRhIGZhc3QgZW5vdWdoCj4+IGZyb20gdGhlIFJIUi4KPiAKPiBUaGlzIHBhdGNoIGJyb2tl IGF2cjMyIGNvbnNvbGUgKGFzIHNlZW4gaW4gdG9kYXkncyBsaW51eC1uZXh0KSBvbiBBVE5HVzEw MC4KPiBSZXZlcnRpbmcgaGVscHMuIEknbSBwcmV0dHkgc3VyZSB0aGUgaXNzdWUgaXMgaW4gOCBi aXQgdnMuIDMyIGJpdCBJL08gYWNjZXNzLgoKSSB3b3VsZCBsaWtlIHRoYXQgd2UgZG9uJ3QgcmV2 ZXJ0IHRoZSBwYXRjaC4KV2UnbGwgdHJ5IHRvIGJsaW5kbHkgZmluZCB0aGUgY2F1c2UgZm9yIHRo aXMgaXNzdWUuCgo+ICMgdW5hbWUgLWEKPiBMaW51eCBidWlsZHJvb3QgNC4yLjAtcmM0LW5leHQt MjAxNTA3MjkrICM5NyBXZWQgSnVsIDI5IDE3OjUwOjExIEVFU1QKPiAyMDE1IGF2cjMyIEdOVS9M aW51eAo+IAo+IERvIHlvdSwgZ3V5cywgaGF2ZSB0aGF0IGJvYXJkIChOR1cxMDApIG9yIGl0J3Mg b2ZmaWNpYWxseSB1bnN1cHBvcnRlZD8KClNvcnJ5IGJ1dCB3ZSBkb24ndCBoYXZlIEFWUjMyLWJh c2VkIGJvYXJkIGluIG91ciBvZmZpY2UuIEhhbnMtQ2hyaXN0aWFuCmtpbmRseSBoZWxwcyB1cyBm aXhpbmcgdGhlIGlzc3VlcyB0aGF0IHdlIGZpbmQgYW5kIHdlIHRlbmQgdG8gcmVseSBvbgp0aGUg Y29tbXVuaXR5IGZvciB0aGlzIGFyY2hpdGVjdHVyZSBzdXBwb3J0Li4uCgo+IElmIHRoZSBsYXR0 ZXIgaXMgdGhlIGNhc2UgSSB3b3VsZCByZWFsbHkgYXBwcmVjaWF0ZSBpZiB5b3UgcmVtb3ZlIHRo ZQo+IHN1cHBvcnQgZnJvbSB0aGUga2VybmVsIHNpZGUuCgpJIHdvbid0IGRlY2lkZSBmb3IgaXRz IHJlbW92YWwuIE9ubHkgdGhlIG1haW50YWluZXJzIHdpdGggZmVlZGJhY2sgZnJvbQp0aGUgdXNl ciBiYXNlIGNhbi4KCj4+IEluIGFkZGl0aW9uLCB0aGUgUlggRklGTyBjYW4gc3VwZXJzZWRlIHRo ZSBETUEvUERDIHRvIGNvbnRyb2wgdGhlIFJUUwo+PiBsaW5lIHdoZW4gdGhlIEhhcmR3YXJlIEhh bmRzaGFraW5nIG1vZGUgaXMgZW5hYmxlZC4gVHdvIHRocmVzaG9sZHMKPj4gYXJlIHRvIGJlIHNl dCBmb3IgdGhhdCBwdXJwb3NlOgo+PiAtIFdoZW4gdGhlIG51bWJlciBvZiBkYXRhIGluIHRoZSBS WCBGSUZPIGNyb3NzZXMgYW5kIGJlY29tZXMgbG93ZXIKPj4gICB0aGFuIG9yIGVxdWFsIHRvIHRo ZSBsb3cgdGhyZXNob2xkLCB0aGUgUlRTIGxpbmUgaXMgc2V0IHRvIGxvdwo+PiAgIGxldmVsOiB0 aGUgcmVtb3RlIHBlZXIgaXMgcmVxdWVzdGVkIHRvIHNlbmQgZGF0YS4KPj4gLSBXaGVuIHRoZSBu dW1iZXIgb2YgZGF0YSBpbiB0aGUgUlggRklGTyBjcm9zc2VzIGFuZCBiZWNvbWVzIGdyZWF0ZXIK Pj4gICB0aGFuIG9yIGVxdWFsIHRvIHRoZSBoaWdoIHRocmVzaG9sZCwgdGhlIFJUUyBsaW5lIGlz IHNldCB0byBoaWdoCj4+ICAgbGV2ZWw6IHRoZSByZW1vdGUgcGVlciBzaG91bGQgc3RvcCBzZW5k aW5nIG5ldyBkYXRhLgo+PiAtIGxvdyB0aHJlc2hvbGQgPD0gaGlnaCB0aHJlc2hvbGQKPj4gT25j ZSB0aGVzZSB0d28gdGhyZXNob2xkcyBhcmUgc2V0IHByb3Blcmx5LCB0aGlzIG5ldyBmZWF0dXJl IGlzCj4+IGVuYWJsZWQgYnkgc2V0dGluZyB0aGUgRklGTyBSVFMgQ29udHJvbCBiaXQgb2YgdGhl IEZJRk8gTW9kZSBSZWdpc3Rlci4KPj4KPj4gRklGT3MgYWxzbyBpbnRyb2R1Y2UgYSBuZXcgbXVs dGlwbGUgZGF0YSBtb2RlOiB0aGUgVVNBUlQgd29ya3MgZWl0aGVyCj4+IGluIG11bHRpcGxlIGRh dGEgbW9kZSBvciBpbiBzaW5nbGUgZGF0YSAobGVnYWN5KSBtb2RlLgo+Pgo+PiBJZiBNT0RFOSBi aXQgaXMgc2V0IGludG8gdGhlIE1vZGUgUmVnaXN0ZXIgb3IgaWYgVVNNT0RFIGlzIHNldCB0bwo+ PiBlaXRoZXIgTElOX01BU1RFUiwgTElOX1NMQVZFIG9yIExPTl9NT0RFLCBGSUZPcyBvcGVyYXRl IGluIHNpbmdsZQo+PiBkYXRhIG1vZGUuIE90aGVyd2lzZSwgdGhleSBvcGVyYXRlIGluIG11bHRp cGxlIGRhdGEgbW9kZS4KPj4KPj4gSW4gdGhpcyBuZXcgbXVsdGlwbGUgZGF0YSBtb2RlLCBhY2Nl c3NlcyB0byB0aGUgUmVjZWl2ZSBIb2xkaW5nCj4+IFJlZ2lzdGVyIG9yIFRyYW5zbWl0IEhvbGRp bmcgUmVnaXN0ZXIgc2xpZ2h0bHkgY2hhbmdlLgo+Pgo+PiBTaW5jZSB0aGlzIGRyaXZlciBpbXBs ZW1lbnRzIG5laXRoZXIgdGhlIDliaXQgZGF0YSBmZWF0dXJlIChNT0RFOSBiaXQKPj4gc2V0IGlu dG8gdGhlIE1vZGUgUmVnaXN0ZXIpIG5vciBMSU4gbW9kZXMsIHRoZSBVU0FSVCB3b3JrcyBpbgo+ PiBtdWx0aXBsZSBkYXRhIG1vZGUgd2hlbmV2ZXIgRklGT3MgYXJlIGF2YWlsYWJsZSBhbmQgZW5h YmxlZC4gV2UgYWxzbwo+PiBhc3N1bWUgdGhhdCBkYXRhIGFyZSA4Yml0IHdpZGUuCj4+Cj4+IElu IHNpbmdsZSBkYXRhIG1vZGUsIDMyYml0IGFjY2VzcyBDQU4gYmUgdXNlZCB0byByZWFkIGEgc2lu Z2xlIGRhdGEKPj4gZnJvbSBSSFIgb3Igd3JpdGUgYSBzaW5nbGUgZGF0YSBpbnRvIFRIUi4KPj4g SG93ZXZlciBpbiBtdWx0aXBsZSBkYXRhIG1vZGUsIGEgMzJiaXQgYWNjZXNzIHRvIFJIUiBub3cg YWxsb3dzIHVzIHRvCj4+IHJlYWQgZm91ciBjb25zZWN1dGl2ZSBkYXRhIGZyb20gUlggRklGTy4g QWxzbyBhIDMyYml0IGFjY2VzcyB0byBUSFIKPj4gbm93IGFsbG93cyB0byB3cml0ZSBmb3VyIGNv bnNlY3V0aXZlIGRhdGEgaW50byBUWCBGSUZPLiBTbyB3ZSBNVVNUCj4+IHVzZSA4Yml0IGFjY2Vz cyB3aGVuZXZlciBvbmx5IG9uZSBkYXRhIGhhdmUgdG8gYmUgcmVhZC93cml0dGVuIGF0IGEKPj4g dGltZS4KPj4KPj4gU2lnbmVkLW9mZi1ieTogQ3lyaWxsZSBQaXRjaGVuIDxjeXJpbGxlLnBpdGNo ZW5AYXRtZWwuY29tPgo+PiAtLS0KPj4gIGRyaXZlcnMvdHR5L3NlcmlhbC9hdG1lbF9zZXJpYWwu YyB8IDEwMCArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKy0tLQo+PiAgaW5jbHVk ZS9saW51eC9hdG1lbF9zZXJpYWwuaCAgICAgIHwgIDM2ICsrKysrKysrKysrKysrCj4+ICAyIGZp bGVzIGNoYW5nZWQsIDEzMCBpbnNlcnRpb25zKCspLCA2IGRlbGV0aW9ucygtKQo+Pgo+PiBkaWZm IC0tZ2l0IGEvZHJpdmVycy90dHkvc2VyaWFsL2F0bWVsX3NlcmlhbC5jIGIvZHJpdmVycy90dHkv c2VyaWFsL2F0bWVsX3NlcmlhbC5jCj4+IGluZGV4IGU3YzMzN2RlMzFkMS4uODdkZTIxZjBjN2Ez IDEwMDY0NAo+PiAtLS0gYS9kcml2ZXJzL3R0eS9zZXJpYWwvYXRtZWxfc2VyaWFsLmMKPj4gKysr IGIvZHJpdmVycy90dHkvc2VyaWFsL2F0bWVsX3NlcmlhbC5jCj4+IEBAIC01Niw2ICs1NiwxNSBA QAo+PiAgLyogUmV2aXNpdDogV2Ugc2hvdWxkIGNhbGN1bGF0ZSB0aGlzIGJhc2VkIG9uIHRoZSBh Y3R1YWwgcG9ydCBzZXR0aW5ncyAqLwo+PiAgI2RlZmluZSBQRENfUlhfVElNRU9VVCAgICAgICAg ICgzICogMTApICAgICAgICAgICAgICAgIC8qIDMgYnl0ZXMgKi8KPj4KPj4gKy8qIFRoZSBtaW5p dW0gbnVtYmVyIG9mIGRhdGEgRklGT3Mgc2hvdWxkIGJlIGFibGUgdG8gY29udGFpbiAqLwo+PiAr I2RlZmluZSBBVE1FTF9NSU5fRklGT19TSVpFICAgIDgKPj4gKy8qCj4+ICsgKiBUaGVzZSB0d28g b2Zmc2V0cyBhcmUgc3Vic3RyYWN0ZWQgZnJvbSB0aGUgUlggRklGTyBzaXplIHRvIGRlZmluZSB0 aGUgUlRTCj4+ICsgKiBoaWdoIGFuZCBsb3cgdGhyZXNob2xkcwo+PiArICovCj4+ICsjZGVmaW5l IEFUTUVMX1JUU19ISUdIX09GRlNFVCAgMTYKPj4gKyNkZWZpbmUgQVRNRUxfUlRTX0xPV19PRkZT RVQgICAyMAo+PiArCj4+ICAjaWYgZGVmaW5lZChDT05GSUdfU0VSSUFMX0FUTUVMX0NPTlNPTEUp ICYmIGRlZmluZWQoQ09ORklHX01BR0lDX1NZU1JRKQo+PiAgI2RlZmluZSBTVVBQT1JUX1NZU1JR Cj4+ICAjZW5kaWYKPj4gQEAgLTE0MSw2ICsxNTAsOSBAQCBzdHJ1Y3QgYXRtZWxfdWFydF9wb3J0 IHsKPj4gICAgICAgICBzdHJ1Y3QgbWN0cmxfZ3Bpb3MgICAgICAqZ3Bpb3M7Cj4+ICAgICAgICAg aW50ICAgICAgICAgICAgICAgICAgICAgZ3Bpb19pcnFbVUFSVF9HUElPX01BWF07Cj4+ICAgICAg ICAgdW5zaWduZWQgaW50ICAgICAgICAgICAgdHhfZG9uZV9tYXNrOwo+PiArICAgICAgIHUzMiAg ICAgICAgICAgICAgICAgICAgIGZpZm9fc2l6ZTsKPj4gKyAgICAgICB1MzIgICAgICAgICAgICAg ICAgICAgICBydHNfaGlnaDsKPj4gKyAgICAgICB1MzIgICAgICAgICAgICAgICAgICAgICBydHNf bG93Owo+PiAgICAgICAgIGJvb2wgICAgICAgICAgICAgICAgICAgIG1zX2lycV9lbmFibGVkOwo+ PiAgICAgICAgIGJvb2wgICAgICAgICAgICAgICAgICAgIGlzX3VzYXJ0OyAgICAgICAvKiB1c2Fy dCBvciB1YXJ0ICovCj4+ICAgICAgICAgc3RydWN0IHRpbWVyX2xpc3QgICAgICAgdWFydF90aW1l cjsgICAgIC8qIHVhcnQgdGltZXIgKi8KPj4gQEAgLTE5MSw2ICsyMDMsMTYgQEAgc3RhdGljIGlu bGluZSB2b2lkIGF0bWVsX3VhcnRfd3JpdGVsKHN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQsIHUzMiBy ZWcsIHUzMiB2YWx1ZSkKPj4gICAgICAgICBfX3Jhd193cml0ZWwodmFsdWUsIHBvcnQtPm1lbWJh c2UgKyByZWcpOwo+PiAgfQo+Pgo+PiArc3RhdGljIGlubGluZSB1OCBhdG1lbF91YXJ0X3JlYWRi KHN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQsIHUzMiByZWcpCj4+ICt7Cj4+ICsgICAgICAgcmV0dXJu IF9fcmF3X3JlYWRiKHBvcnQtPm1lbWJhc2UgKyByZWcpOwo+PiArfQo+PiArCj4+ICtzdGF0aWMg aW5saW5lIHZvaWQgYXRtZWxfdWFydF93cml0ZWIoc3RydWN0IHVhcnRfcG9ydCAqcG9ydCwgdTMy IHJlZywgdTggdmFsdWUpCj4+ICt7Cj4+ICsgICAgICAgX19yYXdfd3JpdGViKHZhbHVlLCBwb3J0 LT5tZW1iYXNlICsgcmVnKTsKPj4gK30KPj4gKwo+PiAgI2lmZGVmIENPTkZJR19TRVJJQUxfQVRN RUxfUERDCj4+ICBzdGF0aWMgYm9vbCBhdG1lbF91c2VfcGRjX3J4KHN0cnVjdCB1YXJ0X3BvcnQg KnBvcnQpCj4+ICB7Cj4+IEBAIC02MzUsNyArNjU3LDcgQEAgc3RhdGljIHZvaWQgYXRtZWxfcnhf Y2hhcnMoc3RydWN0IHVhcnRfcG9ydCAqcG9ydCkKPj4KPj4gICAgICAgICBzdGF0dXMgPSBhdG1l bF91YXJ0X3JlYWRsKHBvcnQsIEFUTUVMX1VTX0NTUik7Cj4+ICAgICAgICAgd2hpbGUgKHN0YXR1 cyAmIEFUTUVMX1VTX1JYUkRZKSB7Cj4+IC0gICAgICAgICAgICAgICBjaCA9IGF0bWVsX3VhcnRf cmVhZGwocG9ydCwgQVRNRUxfVVNfUkhSKTsKPj4gKyAgICAgICAgICAgICAgIGNoID0gYXRtZWxf dWFydF9yZWFkYihwb3J0LCBBVE1FTF9VU19SSFIpOwo+Pgo+PiAgICAgICAgICAgICAgICAgLyoK Pj4gICAgICAgICAgICAgICAgICAqIG5vdGUgdGhhdCB0aGUgZXJyb3IgaGFuZGxpbmcgY29kZSBp cwo+PiBAQCAtNjg2LDcgKzcwOCw3IEBAIHN0YXRpYyB2b2lkIGF0bWVsX3R4X2NoYXJzKHN0cnVj dCB1YXJ0X3BvcnQgKnBvcnQpCj4+Cj4+ICAgICAgICAgaWYgKHBvcnQtPnhfY2hhciAmJgo+PiAg ICAgICAgICAgICAoYXRtZWxfdWFydF9yZWFkbChwb3J0LCBBVE1FTF9VU19DU1IpICYgYXRtZWxf cG9ydC0+dHhfZG9uZV9tYXNrKSkgewo+PiAtICAgICAgICAgICAgICAgYXRtZWxfdWFydF93cml0 ZWwocG9ydCwgQVRNRUxfVVNfVEhSLCBwb3J0LT54X2NoYXIpOwo+PiArICAgICAgICAgICAgICAg YXRtZWxfdWFydF93cml0ZWIocG9ydCwgQVRNRUxfVVNfVEhSLCBwb3J0LT54X2NoYXIpOwo+PiAg ICAgICAgICAgICAgICAgcG9ydC0+aWNvdW50LnR4Kys7Cj4+ICAgICAgICAgICAgICAgICBwb3J0 LT54X2NoYXIgPSAwOwo+PiAgICAgICAgIH0KPj4gQEAgLTY5NSw3ICs3MTcsNyBAQCBzdGF0aWMg dm9pZCBhdG1lbF90eF9jaGFycyhzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0KQo+Pgo+PiAgICAgICAg IHdoaWxlIChhdG1lbF91YXJ0X3JlYWRsKHBvcnQsIEFUTUVMX1VTX0NTUikgJgo+PiAgICAgICAg ICAgICAgICBhdG1lbF9wb3J0LT50eF9kb25lX21hc2spIHsKPj4gLSAgICAgICAgICAgICAgIGF0 bWVsX3VhcnRfd3JpdGVsKHBvcnQsIEFUTUVMX1VTX1RIUiwgeG1pdC0+YnVmW3htaXQtPnRhaWxd KTsKPj4gKyAgICAgICAgICAgICAgIGF0bWVsX3VhcnRfd3JpdGViKHBvcnQsIEFUTUVMX1VTX1RI UiwgeG1pdC0+YnVmW3htaXQtPnRhaWxdKTsKPj4gICAgICAgICAgICAgICAgIHhtaXQtPnRhaWwg PSAoeG1pdC0+dGFpbCArIDEpICYgKFVBUlRfWE1JVF9TSVpFIC0gMSk7Cj4+ICAgICAgICAgICAg ICAgICBwb3J0LT5pY291bnQudHgrKzsKPj4gICAgICAgICAgICAgICAgIGlmICh1YXJ0X2NpcmNf ZW1wdHkoeG1pdCkpCj4+IEBAIC0xNzk2LDYgKzE4MTgsMjkgQEAgc3RhdGljIGludCBhdG1lbF9z dGFydHVwKHN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQpCj4+ICAgICAgICAgICAgICAgICAgICAgICAg IGF0bWVsX3NldF9vcHMocG9ydCk7Cj4+ICAgICAgICAgfQo+Pgo+PiArICAgICAgIC8qCj4+ICsg ICAgICAgICogRW5hYmxlIEZJRk8gd2hlbiBhdmFpbGFibGUKPj4gKyAgICAgICAgKi8KPj4gKyAg ICAgICBpZiAoYXRtZWxfcG9ydC0+Zmlmb19zaXplKSB7Cj4+ICsgICAgICAgICAgICAgICB1bnNp Z25lZCBpbnQgdHhyZHltID0gQVRNRUxfVVNfT05FX0RBVEE7Cj4+ICsgICAgICAgICAgICAgICB1 bnNpZ25lZCBpbnQgcnhyZHltID0gQVRNRUxfVVNfT05FX0RBVEE7Cj4+ICsgICAgICAgICAgICAg ICB1bnNpZ25lZCBpbnQgZm1yOwo+PiArCj4+ICsgICAgICAgICAgICAgICBhdG1lbF91YXJ0X3dy aXRlbChwb3J0LCBBVE1FTF9VU19DUiwKPj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIEFUTUVMX1VTX0ZJRk9FTiB8Cj4+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBBVE1FTF9VU19SWEZDTFIgfAo+PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg QVRNRUxfVVNfVFhGTENMUik7Cj4+ICsKPj4gKyAgICAgICAgICAgICAgIGZtciA9IEFUTUVMX1VT X1RYUkRZTSh0eHJkeW0pIHwgQVRNRUxfVVNfUlhSRFlNKHJ4cmR5bSk7Cj4+ICsgICAgICAgICAg ICAgICBpZiAoYXRtZWxfcG9ydC0+cnRzX2hpZ2ggJiYKPj4gKyAgICAgICAgICAgICAgICAgICBh dG1lbF9wb3J0LT5ydHNfbG93KQo+PiArICAgICAgICAgICAgICAgICAgICAgICBmbXIgfD0gIEFU TUVMX1VTX0ZSVFNDIHwKPj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVE1FTF9V U19SWEZUSFJFUyhhdG1lbF9wb3J0LT5ydHNfaGlnaCkgfAo+PiArICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIEFUTUVMX1VTX1JYRlRIUkVTMihhdG1lbF9wb3J0LT5ydHNfbG93KTsKPj4g Kwo+PiArICAgICAgICAgICAgICAgYXRtZWxfdWFydF93cml0ZWwocG9ydCwgQVRNRUxfVVNfRk1S LCBmbXIpOwo+PiArICAgICAgIH0KPj4gKwo+PiAgICAgICAgIC8qIFNhdmUgY3VycmVudCBDU1Ig Zm9yIGNvbXBhcmlzb24gaW4gYXRtZWxfdGFza2xldF9mdW5jKCkgKi8KPj4gICAgICAgICBhdG1l bF9wb3J0LT5pcnFfc3RhdHVzX3ByZXYgPSBhdG1lbF9nZXRfbGluZXNfc3RhdHVzKHBvcnQpOwo+ PiAgICAgICAgIGF0bWVsX3BvcnQtPmlycV9zdGF0dXMgPSBhdG1lbF9wb3J0LT5pcnFfc3RhdHVz X3ByZXY7Cj4+IEBAIC0yMjEzLDcgKzIyNTgsNyBAQCBzdGF0aWMgaW50IGF0bWVsX3BvbGxfZ2V0 X2NoYXIoc3RydWN0IHVhcnRfcG9ydCAqcG9ydCkKPj4gICAgICAgICB3aGlsZSAoIShhdG1lbF91 YXJ0X3JlYWRsKHBvcnQsIEFUTUVMX1VTX0NTUikgJiBBVE1FTF9VU19SWFJEWSkpCj4+ICAgICAg ICAgICAgICAgICBjcHVfcmVsYXgoKTsKPj4KPj4gLSAgICAgICByZXR1cm4gYXRtZWxfdWFydF9y ZWFkbChwb3J0LCBBVE1FTF9VU19SSFIpOwo+PiArICAgICAgIHJldHVybiBhdG1lbF91YXJ0X3Jl YWRiKHBvcnQsIEFUTUVMX1VTX1JIUik7Cj4+ICB9Cj4+Cj4+ICBzdGF0aWMgdm9pZCBhdG1lbF9w b2xsX3B1dF9jaGFyKHN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQsIHVuc2lnbmVkIGNoYXIgY2gpCj4+ IEBAIC0yMjIxLDcgKzIyNjYsNyBAQCBzdGF0aWMgdm9pZCBhdG1lbF9wb2xsX3B1dF9jaGFyKHN0 cnVjdCB1YXJ0X3BvcnQgKnBvcnQsIHVuc2lnbmVkIGNoYXIgY2gpCj4+ICAgICAgICAgd2hpbGUg KCEoYXRtZWxfdWFydF9yZWFkbChwb3J0LCBBVE1FTF9VU19DU1IpICYgQVRNRUxfVVNfVFhSRFkp KQo+PiAgICAgICAgICAgICAgICAgY3B1X3JlbGF4KCk7Cj4+Cj4+IC0gICAgICAgYXRtZWxfdWFy dF93cml0ZWwocG9ydCwgQVRNRUxfVVNfVEhSLCBjaCk7Cj4+ICsgICAgICAgYXRtZWxfdWFydF93 cml0ZWIocG9ydCwgQVRNRUxfVVNfVEhSLCBjaCk7Cj4+ICB9Cj4+ICAjZW5kaWYKPj4KPj4gQEAg LTIzMjgsNyArMjM3Myw3IEBAIHN0YXRpYyB2b2lkIGF0bWVsX2NvbnNvbGVfcHV0Y2hhcihzdHJ1 Y3QgdWFydF9wb3J0ICpwb3J0LCBpbnQgY2gpCj4+ICB7Cj4+ICAgICAgICAgd2hpbGUgKCEoYXRt ZWxfdWFydF9yZWFkbChwb3J0LCBBVE1FTF9VU19DU1IpICYgQVRNRUxfVVNfVFhSRFkpKQo+PiAg ICAgICAgICAgICAgICAgY3B1X3JlbGF4KCk7Cj4+IC0gICAgICAgYXRtZWxfdWFydF93cml0ZWwo cG9ydCwgQVRNRUxfVVNfVEhSLCBjaCk7Cj4+ICsgICAgICAgYXRtZWxfdWFydF93cml0ZWIocG9y dCwgQVRNRUxfVVNfVEhSLCBjaCk7Cj4+ICB9Cj4+Cj4+ICAvKgo+PiBAQCAtMjYwMyw2ICsyNjQ4 LDQ4IEBAIHN0YXRpYyBpbnQgYXRtZWxfaW5pdF9ncGlvcyhzdHJ1Y3QgYXRtZWxfdWFydF9wb3J0 ICpwLCBzdHJ1Y3QgZGV2aWNlICpkZXYpCj4+ICAgICAgICAgcmV0dXJuIDA7Cj4+ICB9Cj4+Cj4+ ICtzdGF0aWMgdm9pZCBhdG1lbF9zZXJpYWxfcHJvYmVfZmlmb3Moc3RydWN0IGF0bWVsX3VhcnRf cG9ydCAqcG9ydCwKPj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVj dCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCj4+ICt7Cj4+ICsgICAgICAgcG9ydC0+Zmlmb19zaXpl ID0gMDsKPj4gKyAgICAgICBwb3J0LT5ydHNfbG93ID0gMDsKPj4gKyAgICAgICBwb3J0LT5ydHNf aGlnaCA9IDA7Cj4+ICsKPj4gKyAgICAgICBpZiAob2ZfcHJvcGVydHlfcmVhZF91MzIocGRldi0+ ZGV2Lm9mX25vZGUsCj4+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJhdG1lbCxm aWZvLXNpemUiLAo+PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmcG9ydC0+Zmlm b19zaXplKSkKPj4gKyAgICAgICAgICAgICAgIHJldHVybjsKPj4gKwo+PiArICAgICAgIGlmICgh cG9ydC0+Zmlmb19zaXplKQo+PiArICAgICAgICAgICAgICAgcmV0dXJuOwo+PiArCj4+ICsgICAg ICAgaWYgKHBvcnQtPmZpZm9fc2l6ZSA8IEFUTUVMX01JTl9GSUZPX1NJWkUpIHsKPj4gKyAgICAg ICAgICAgICAgIHBvcnQtPmZpZm9fc2l6ZSA9IDA7Cj4+ICsgICAgICAgICAgICAgICBkZXZfZXJy KCZwZGV2LT5kZXYsICJJbnZhbGlkIEZJRk8gc2l6ZVxuIik7Cj4+ICsgICAgICAgICAgICAgICBy ZXR1cm47Cj4+ICsgICAgICAgfQo+PiArCj4+ICsgICAgICAgLyoKPj4gKyAgICAgICAgKiAwIDw9 IHJ0c19sb3cgPD0gcnRzX2hpZ2ggPD0gZmlmb19zaXplCj4+ICsgICAgICAgICogT25jZSB0aGVp ciBDVFMgbGluZSBhc3NlcnRlZCBieSB0aGUgcmVtb3RlIHBlZXIsIHNvbWUgeDg2IFVBUlRzIHRl bmQKPj4gKyAgICAgICAgKiB0byBmbHVzaCB0aGVpciBpbnRlcm5hbCBUWCBGSUZPLCBjb21tb25s eSB1cCB0byAxNiBkYXRhLCBiZWZvcmUKPj4gKyAgICAgICAgKiBhY3R1YWxseSBzdG9wcGluZyB0 byBzZW5kIG5ldyBkYXRhLiBTbyB3ZSB0cnkgdG8gc2V0IHRoZSBSVFMgSGlnaAo+PiArICAgICAg ICAqIFRocmVzaG9sZCB0byBhIHJlYXNvbmFibHkgaGlnaCB2YWx1ZSByZXNwZWN0aW5nIHRoaXMg MTYgZGF0YQo+PiArICAgICAgICAqIGVtcGlyaWNhbCBydWxlIHdoZW4gcG9zc2libGUuCj4+ICsg ICAgICAgICovCj4+ICsgICAgICAgcG9ydC0+cnRzX2hpZ2ggPSBtYXhfdChpbnQsIHBvcnQtPmZp Zm9fc2l6ZSA+PiAxLAo+PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9ydC0+Zmlm b19zaXplIC0gQVRNRUxfUlRTX0hJR0hfT0ZGU0VUKTsKPj4gKyAgICAgICBwb3J0LT5ydHNfbG93 ICA9IG1heF90KGludCwgcG9ydC0+Zmlmb19zaXplID4+IDIsCj4+ICsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBwb3J0LT5maWZvX3NpemUgLSBBVE1FTF9SVFNfTE9XX09GRlNFVCk7Cj4+ ICsKPj4gKyAgICAgICBkZXZfaW5mbygmcGRldi0+ZGV2LCAiVXNpbmcgRklGTyAoJXUgZGF0YSlc biIsCj4+ICsgICAgICAgICAgICAgICAgcG9ydC0+Zmlmb19zaXplKTsKPj4gKyAgICAgICBkZXZf ZGJnKCZwZGV2LT5kZXYsICJSVFMgSGlnaCBUaHJlc2hvbGQgOiAlMnUgZGF0YVxuIiwKPj4gKyAg ICAgICAgICAgICAgIHBvcnQtPnJ0c19oaWdoKTsKPj4gKyAgICAgICBkZXZfZGJnKCZwZGV2LT5k ZXYsICJSVFMgTG93IFRocmVzaG9sZCAgOiAlMnUgZGF0YVxuIiwKPj4gKyAgICAgICAgICAgICAg IHBvcnQtPnJ0c19sb3cpOwo+PiArfQo+PiArCj4+ICBzdGF0aWMgaW50IGF0bWVsX3NlcmlhbF9w cm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQo+PiAgewo+PiAgICAgICAgIHN0cnVj dCBhdG1lbF91YXJ0X3BvcnQgKnBvcnQ7Cj4+IEBAIC0yNjM5LDYgKzI3MjYsNyBAQCBzdGF0aWMg aW50IGF0bWVsX3NlcmlhbF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQo+PiAg ICAgICAgIHBvcnQgPSAmYXRtZWxfcG9ydHNbcmV0XTsKPj4gICAgICAgICBwb3J0LT5iYWNrdXBf aW1yID0gMDsKPj4gICAgICAgICBwb3J0LT51YXJ0LmxpbmUgPSByZXQ7Cj4+ICsgICAgICAgYXRt ZWxfc2VyaWFsX3Byb2JlX2ZpZm9zKHBvcnQsIHBkZXYpOwo+Pgo+PiAgICAgICAgIHNwaW5fbG9j a19pbml0KCZwb3J0LT5sb2NrX3N1c3BlbmRlZCk7Cj4+Cj4+IGRpZmYgLS1naXQgYS9pbmNsdWRl L2xpbnV4L2F0bWVsX3NlcmlhbC5oIGIvaW5jbHVkZS9saW51eC9hdG1lbF9zZXJpYWwuaAo+PiBp bmRleCBjMzg0YzIxZDY1ZjAuLmVlNjk2ZDdlOGE0MyAxMDA2NDQKPj4gLS0tIGEvaW5jbHVkZS9s aW51eC9hdG1lbF9zZXJpYWwuaAo+PiArKysgYi9pbmNsdWRlL2xpbnV4L2F0bWVsX3NlcmlhbC5o Cj4+IEBAIC0zNSw2ICszNSwxMSBAQAo+PiAgI2RlZmluZSAgICAgICAgQVRNRUxfVVNfRFRSRElT ICAgICAgICAgQklUKDE3KSAvKiBEYXRhIFRlcm1pbmFsIFJlYWR5IERpc2FibGUgKi8KPj4gICNk ZWZpbmUgICAgICAgIEFUTUVMX1VTX1JUU0VOICAgICAgICAgIEJJVCgxOCkgLyogUmVxdWVzdCBU byBTZW5kIEVuYWJsZSAqLwo+PiAgI2RlZmluZSAgICAgICAgQVRNRUxfVVNfUlRTRElTICAgICAg ICAgQklUKDE5KSAvKiBSZXF1ZXN0IFRvIFNlbmQgRGlzYWJsZSAqLwo+PiArI2RlZmluZSAgICAg ICAgQVRNRUxfVVNfVFhGQ0xSICAgICAgICAgQklUKDI0KSAvKiBUcmFuc21pdCBGSUZPIENsZWFy ICovCj4+ICsjZGVmaW5lICAgICAgICBBVE1FTF9VU19SWEZDTFIgICAgICAgICBCSVQoMjUpIC8q IFJlY2VpdmUgRklGTyBDbGVhciAqLwo+PiArI2RlZmluZSAgICAgICAgQVRNRUxfVVNfVFhGTENM UiAgICAgICAgQklUKDI2KSAvKiBUcmFuc21pdCBGSUZPIExvY2sgQ2xlYXIgKi8KPj4gKyNkZWZp bmUgICAgICAgIEFUTUVMX1VTX0ZJRk9FTiAgICAgICAgIEJJVCgzMCkgLyogRklGTyBlbmFibGUg Ki8KPj4gKyNkZWZpbmUgICAgICAgIEFUTUVMX1VTX0ZJRk9ESVMgICAgICAgIEJJVCgzMSkgLyog RklGTyBkaXNhYmxlICovCj4+Cj4+ICAjZGVmaW5lIEFUTUVMX1VTX01SICAgICAgICAgICAgMHgw NCAgICAvKiBNb2RlIFJlZ2lzdGVyICovCj4+ICAjZGVmaW5lICAgICAgICBBVE1FTF9VU19VU01P REUgICAgICAgICBHRU5NQVNLKDMsIDApICAgLyogTW9kZSBvZiB0aGUgVVNBUlQgKi8KPj4gQEAg LTEyNCw2ICsxMjksMzcgQEAKPj4gICNkZWZpbmUgQVRNRUxfVVNfTkVSICAgICAgICAgICAweDQ0 ICAgIC8qIE51bWJlciBvZiBFcnJvcnMgUmVnaXN0ZXIgKi8KPj4gICNkZWZpbmUgQVRNRUxfVVNf SUYgICAgICAgICAgICAweDRjICAgIC8qIElyREEgRmlsdGVyIFJlZ2lzdGVyICovCj4+Cj4+ICsj ZGVmaW5lIEFUTUVMX1VTX0NNUFIgICAgICAgICAgMHg5MCAgICAvKiBDb21wYXJhaXNvbiBSZWdp c3RlciAqLwo+PiArI2RlZmluZSBBVE1FTF9VU19GTVIgICAgICAgICAgIDB4YTAgICAgLyogRklG TyBNb2RlIFJlZ2lzdGVyICovCj4+ICsjZGVmaW5lICAgICAgICBBVE1FTF9VU19UWFJEWU0oZGF0 YSkgICAoKChkYXRhKSAmIDB4MykgPDwgMCkgICAvKiBUWCBSZWFkeSBNb2RlICovCj4+ICsjZGVm aW5lICAgICAgICBBVE1FTF9VU19SWFJEWU0oZGF0YSkgICAoKChkYXRhKSAmIDB4MykgPDwgNCkg ICAvKiBSWCBSZWFkeSBNb2RlICovCj4+ICsjZGVmaW5lICAgICAgICAgICAgICAgIEFUTUVMX1VT X09ORV9EQVRBICAgICAgIDB4MAo+PiArI2RlZmluZSAgICAgICAgICAgICAgICBBVE1FTF9VU19U V09fREFUQSAgICAgICAweDEKPj4gKyNkZWZpbmUgICAgICAgICAgICAgICAgQVRNRUxfVVNfRk9V Ul9EQVRBICAgICAgMHgyCj4+ICsjZGVmaW5lICAgICAgICBBVE1FTF9VU19GUlRTQyAgICAgICAg ICBCSVQoNykgIC8qIEZJRk8gUlRTIHBpbiBDb250cm9sICovCj4+ICsjZGVmaW5lICAgICAgICBB VE1FTF9VU19UWEZUSFJFUyh0aHIpICAoKCh0aHIpICYgMHgzZikgPDwgOCkgICAvKiBUWCBGSUZP IFRocmVzaG9sZCAqLwo+PiArI2RlZmluZSAgICAgICAgQVRNRUxfVVNfUlhGVEhSRVModGhyKSAg KCgodGhyKSAmIDB4M2YpIDw8IDE2KSAgLyogUlggRklGTyBUaHJlc2hvbGQgKi8KPj4gKyNkZWZp bmUgICAgICAgIEFUTUVMX1VTX1JYRlRIUkVTMih0aHIpICgoKHRocikgJiAweDNmKSA8PCAyNCkg IC8qIFJYIEZJRk8gVGhyZXNob2xkMiAqLwo+PiArCj4+ICsjZGVmaW5lIEFUTUVMX1VTX0ZMUiAg ICAgICAgICAgMHhhNCAgICAvKiBGSUZPIExldmVsIFJlZ2lzdGVyICovCj4+ICsjZGVmaW5lICAg ICAgICBBVE1FTF9VU19UWEZMKHJlZykgICAgICAoKChyZWcpID4+IDApICYgMHgzZikgICAvKiBU WCBGSUZPIExldmVsICovCj4+ICsjZGVmaW5lICAgICAgICBBVE1FTF9VU19SWEZMKHJlZykgICAg ICAoKChyZWcpID4+IDE2KSAmIDB4M2YpICAvKiBSWCBGSUZPIExldmVsICovCj4+ICsKPj4gKyNk ZWZpbmUgQVRNRUxfVVNfRklFUiAgICAgICAgICAweGE4ICAgIC8qIEZJRk8gSW50ZXJydXB0IEVu YWJsZSBSZWdpc3RlciAqLwo+PiArI2RlZmluZSBBVE1FTF9VU19GSURSICAgICAgICAgIDB4YWMg ICAgLyogRklGTyBJbnRlcnJ1cHQgRGlzYWJsZSBSZWdpc3RlciAqLwo+PiArI2RlZmluZSBBVE1F TF9VU19GSU1SICAgICAgICAgIDB4YjAgICAgLyogRklGTyBJbnRlcnJ1cHQgTWFzayBSZWdpc3Rl ciAqLwo+PiArI2RlZmluZSBBVE1FTF9VU19GRVNSICAgICAgICAgIDB4YjQgICAgLyogRklGTyBF dmVudCBTdGF0dXMgUmVnaXN0ZXIgKi8KPj4gKyNkZWZpbmUgICAgICAgIEFUTUVMX1VTX1RYRkVG ICAgICAgICAgIEJJVCgwKSAgLyogVHJhbnNtaXQgRklGTyBFbXB0eSBGbGFnICovCj4+ICsjZGVm aW5lICAgICAgICBBVE1FTF9VU19UWEZGRiAgICAgICAgICBCSVQoMSkgIC8qIFRyYW5zbWl0IEZJ Rk8gRnVsbCBGbGFnICovCj4+ICsjZGVmaW5lICAgICAgICBBVE1FTF9VU19UWEZUSEYgICAgICAg ICBCSVQoMikgIC8qIFRyYW5zbWl0IEZJRk8gVGhyZXNob2xkIEZsYWcgKi8KPj4gKyNkZWZpbmUg ICAgICAgIEFUTUVMX1VTX1JYRkVGICAgICAgICAgIEJJVCgzKSAgLyogUmVjZWl2ZSBGSUZPIEVt cHR5IEZsYWcgKi8KPj4gKyNkZWZpbmUgICAgICAgIEFUTUVMX1VTX1JYRkZGICAgICAgICAgIEJJ VCg0KSAgLyogUmVjZWl2ZSBGSUZPIEZ1bGwgRmxhZyAqLwo+PiArI2RlZmluZSAgICAgICAgQVRN RUxfVVNfUlhGVEhGICAgICAgICAgQklUKDUpICAvKiBSZWNlaXZlIEZJRk8gVGhyZXNob2xkIEZs YWcgKi8KPj4gKyNkZWZpbmUgICAgICAgIEFUTUVMX1VTX1RYRlBURUYgICAgICAgIEJJVCg2KSAg LyogVHJhbnNtaXQgRklGTyBQb2ludGVyIEVycm9yIEZsYWcgKi8KPj4gKyNkZWZpbmUgICAgICAg IEFUTUVMX1VTX1JYRlBURUYgICAgICAgIEJJVCg3KSAgLyogUmVjZWl2ZSBGSUZPIFBvaW50ZXIg RXJyb3IgRmxhZyAqLwo+PiArI2RlZmluZSAgICAgICAgQVRNRUxfVVNfVFhGTE9DSyAgICAgICAg QklUKDgpICAvKiBUcmFuc21pdCBGSUZPIExvY2sgKEZFU1Igb25seSkgKi8KPj4gKyNkZWZpbmUg ICAgICAgIEFUTUVMX1VTX1JYRlRIRjIgICAgICAgIEJJVCg5KSAgLyogUmVjZWl2ZSBGSUZPIFRo cmVzaG9sZCBGbGFnIDIgKi8KPj4gKwo+PiAgI2RlZmluZSBBVE1FTF9VU19OQU1FICAgICAgICAg IDB4ZjAgICAgLyogSXAgTmFtZSAqLwo+PiAgI2RlZmluZSBBVE1FTF9VU19WRVJTSU9OICAgICAg IDB4ZmMgICAgLyogSXAgVmVyc2lvbiAqLwo+Pgo+PiAtLQo+PiAxLjguMi4yCj4+Cj4+IC0tCj4+ IFRvIHVuc3Vic2NyaWJlIGZyb20gdGhpcyBsaXN0OiBzZW5kIHRoZSBsaW5lICJ1bnN1YnNjcmli ZSBsaW51eC1rZXJuZWwiIGluCj4+IHRoZSBib2R5IG9mIGEgbWVzc2FnZSB0byBtYWpvcmRvbW9A dmdlci5rZXJuZWwub3JnCj4+IE1vcmUgbWFqb3Jkb21vIGluZm8gYXQgIGh0dHA6Ly92Z2VyLmtl cm5lbC5vcmcvbWFqb3Jkb21vLWluZm8uaHRtbAo+PiBQbGVhc2UgcmVhZCB0aGUgRkFRIGF0ICBo dHRwOi8vd3d3LnR1eC5vcmcvbGttbC8KPiAKPiAKPiAKCgotLSAKTmljb2xhcyBGZXJyZQoKX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KbGludXgtYXJtLWtl cm5lbCBtYWlsaW5nIGxpc3QKbGludXgtYXJtLWtlcm5lbEBsaXN0cy5pbmZyYWRlYWQub3JnCmh0 dHA6Ly9saXN0cy5pbmZyYWRlYWQub3JnL21haWxtYW4vbGlzdGluZm8vbGludXgtYXJtLWtlcm5l bAo= From mboxrd@z Thu Jan 1 00:00:00 1970 From: nicolas.ferre@atmel.com (Nicolas Ferre) Date: Wed, 29 Jul 2015 17:09:59 +0200 Subject: [PATCH v4 4/5] tty/serial: at91: add support to FIFOs In-Reply-To: References: <4d8e90ad2cbb0d020dae4a4806ffc8864b5b22b6.1435842688.git.cyrille.pitchen@atmel.com> Message-ID: <55B8ECC7.6010304@atmel.com> To: linux-arm-kernel@lists.infradead.org List-Id: linux-arm-kernel.lists.infradead.org Le 29/07/2015 16:51, Andy Shevchenko a ?crit : > On Thu, Jul 2, 2015 at 4:18 PM, Cyrille Pitchen > wrote: >> Depending on the hardware, TX and RX FIFOs may be available. The RX >> FIFO can avoid receive overruns, especially when DMA transfers are >> not used to read data from the Receive Holding Register. For heavy >> system load, The CPU is likely not be able to fetch data fast enough >> from the RHR. > > This patch broke avr32 console (as seen in today's linux-next) on ATNGW100. > Reverting helps. I'm pretty sure the issue is in 8 bit vs. 32 bit I/O access. I would like that we don't revert the patch. We'll try to blindly find the cause for this issue. > # uname -a > Linux buildroot 4.2.0-rc4-next-20150729+ #97 Wed Jul 29 17:50:11 EEST > 2015 avr32 GNU/Linux > > Do you, guys, have that board (NGW100) or it's officially unsupported? Sorry but we don't have AVR32-based board in our office. Hans-Christian kindly helps us fixing the issues that we find and we tend to rely on the community for this architecture support... > If the latter is the case I would really appreciate if you remove the > support from the kernel side. I won't decide for its removal. Only the maintainers with feedback from the user base can. >> In addition, the RX FIFO can supersede the DMA/PDC to control the RTS >> line when the Hardware Handshaking mode is enabled. Two thresholds >> are to be set for that purpose: >> - When the number of data in the RX FIFO crosses and becomes lower >> than or equal to the low threshold, the RTS line is set to low >> level: the remote peer is requested to send data. >> - When the number of data in the RX FIFO crosses and becomes greater >> than or equal to the high threshold, the RTS line is set to high >> level: the remote peer should stop sending new data. >> - low threshold <= high threshold >> Once these two thresholds are set properly, this new feature is >> enabled by setting the FIFO RTS Control bit of the FIFO Mode Register. >> >> FIFOs also introduce a new multiple data mode: the USART works either >> in multiple data mode or in single data (legacy) mode. >> >> If MODE9 bit is set into the Mode Register or if USMODE is set to >> either LIN_MASTER, LIN_SLAVE or LON_MODE, FIFOs operate in single >> data mode. Otherwise, they operate in multiple data mode. >> >> In this new multiple data mode, accesses to the Receive Holding >> Register or Transmit Holding Register slightly change. >> >> Since this driver implements neither the 9bit data feature (MODE9 bit >> set into the Mode Register) nor LIN modes, the USART works in >> multiple data mode whenever FIFOs are available and enabled. We also >> assume that data are 8bit wide. >> >> In single data mode, 32bit access CAN be used to read a single data >> from RHR or write a single data into THR. >> However in multiple data mode, a 32bit access to RHR now allows us to >> read four consecutive data from RX FIFO. Also a 32bit access to THR >> now allows to write four consecutive data into TX FIFO. So we MUST >> use 8bit access whenever only one data have to be read/written at a >> time. >> >> Signed-off-by: Cyrille Pitchen >> --- >> drivers/tty/serial/atmel_serial.c | 100 +++++++++++++++++++++++++++++++++++--- >> include/linux/atmel_serial.h | 36 ++++++++++++++ >> 2 files changed, 130 insertions(+), 6 deletions(-) >> >> diff --git a/drivers/tty/serial/atmel_serial.c b/drivers/tty/serial/atmel_serial.c >> index e7c337de31d1..87de21f0c7a3 100644 >> --- a/drivers/tty/serial/atmel_serial.c >> +++ b/drivers/tty/serial/atmel_serial.c >> @@ -56,6 +56,15 @@ >> /* Revisit: We should calculate this based on the actual port settings */ >> #define PDC_RX_TIMEOUT (3 * 10) /* 3 bytes */ >> >> +/* The minium number of data FIFOs should be able to contain */ >> +#define ATMEL_MIN_FIFO_SIZE 8 >> +/* >> + * These two offsets are substracted from the RX FIFO size to define the RTS >> + * high and low thresholds >> + */ >> +#define ATMEL_RTS_HIGH_OFFSET 16 >> +#define ATMEL_RTS_LOW_OFFSET 20 >> + >> #if defined(CONFIG_SERIAL_ATMEL_CONSOLE) && defined(CONFIG_MAGIC_SYSRQ) >> #define SUPPORT_SYSRQ >> #endif >> @@ -141,6 +150,9 @@ struct atmel_uart_port { >> struct mctrl_gpios *gpios; >> int gpio_irq[UART_GPIO_MAX]; >> unsigned int tx_done_mask; >> + u32 fifo_size; >> + u32 rts_high; >> + u32 rts_low; >> bool ms_irq_enabled; >> bool is_usart; /* usart or uart */ >> struct timer_list uart_timer; /* uart timer */ >> @@ -191,6 +203,16 @@ static inline void atmel_uart_writel(struct uart_port *port, u32 reg, u32 value) >> __raw_writel(value, port->membase + reg); >> } >> >> +static inline u8 atmel_uart_readb(struct uart_port *port, u32 reg) >> +{ >> + return __raw_readb(port->membase + reg); >> +} >> + >> +static inline void atmel_uart_writeb(struct uart_port *port, u32 reg, u8 value) >> +{ >> + __raw_writeb(value, port->membase + reg); >> +} >> + >> #ifdef CONFIG_SERIAL_ATMEL_PDC >> static bool atmel_use_pdc_rx(struct uart_port *port) >> { >> @@ -635,7 +657,7 @@ static void atmel_rx_chars(struct uart_port *port) >> >> status = atmel_uart_readl(port, ATMEL_US_CSR); >> while (status & ATMEL_US_RXRDY) { >> - ch = atmel_uart_readl(port, ATMEL_US_RHR); >> + ch = atmel_uart_readb(port, ATMEL_US_RHR); >> >> /* >> * note that the error handling code is >> @@ -686,7 +708,7 @@ static void atmel_tx_chars(struct uart_port *port) >> >> if (port->x_char && >> (atmel_uart_readl(port, ATMEL_US_CSR) & atmel_port->tx_done_mask)) { >> - atmel_uart_writel(port, ATMEL_US_THR, port->x_char); >> + atmel_uart_writeb(port, ATMEL_US_THR, port->x_char); >> port->icount.tx++; >> port->x_char = 0; >> } >> @@ -695,7 +717,7 @@ static void atmel_tx_chars(struct uart_port *port) >> >> while (atmel_uart_readl(port, ATMEL_US_CSR) & >> atmel_port->tx_done_mask) { >> - atmel_uart_writel(port, ATMEL_US_THR, xmit->buf[xmit->tail]); >> + atmel_uart_writeb(port, ATMEL_US_THR, xmit->buf[xmit->tail]); >> xmit->tail = (xmit->tail + 1) & (UART_XMIT_SIZE - 1); >> port->icount.tx++; >> if (uart_circ_empty(xmit)) >> @@ -1796,6 +1818,29 @@ static int atmel_startup(struct uart_port *port) >> atmel_set_ops(port); >> } >> >> + /* >> + * Enable FIFO when available >> + */ >> + if (atmel_port->fifo_size) { >> + unsigned int txrdym = ATMEL_US_ONE_DATA; >> + unsigned int rxrdym = ATMEL_US_ONE_DATA; >> + unsigned int fmr; >> + >> + atmel_uart_writel(port, ATMEL_US_CR, >> + ATMEL_US_FIFOEN | >> + ATMEL_US_RXFCLR | >> + ATMEL_US_TXFLCLR); >> + >> + fmr = ATMEL_US_TXRDYM(txrdym) | ATMEL_US_RXRDYM(rxrdym); >> + if (atmel_port->rts_high && >> + atmel_port->rts_low) >> + fmr |= ATMEL_US_FRTSC | >> + ATMEL_US_RXFTHRES(atmel_port->rts_high) | >> + ATMEL_US_RXFTHRES2(atmel_port->rts_low); >> + >> + atmel_uart_writel(port, ATMEL_US_FMR, fmr); >> + } >> + >> /* Save current CSR for comparison in atmel_tasklet_func() */ >> atmel_port->irq_status_prev = atmel_get_lines_status(port); >> atmel_port->irq_status = atmel_port->irq_status_prev; >> @@ -2213,7 +2258,7 @@ static int atmel_poll_get_char(struct uart_port *port) >> while (!(atmel_uart_readl(port, ATMEL_US_CSR) & ATMEL_US_RXRDY)) >> cpu_relax(); >> >> - return atmel_uart_readl(port, ATMEL_US_RHR); >> + return atmel_uart_readb(port, ATMEL_US_RHR); >> } >> >> static void atmel_poll_put_char(struct uart_port *port, unsigned char ch) >> @@ -2221,7 +2266,7 @@ static void atmel_poll_put_char(struct uart_port *port, unsigned char ch) >> while (!(atmel_uart_readl(port, ATMEL_US_CSR) & ATMEL_US_TXRDY)) >> cpu_relax(); >> >> - atmel_uart_writel(port, ATMEL_US_THR, ch); >> + atmel_uart_writeb(port, ATMEL_US_THR, ch); >> } >> #endif >> >> @@ -2328,7 +2373,7 @@ static void atmel_console_putchar(struct uart_port *port, int ch) >> { >> while (!(atmel_uart_readl(port, ATMEL_US_CSR) & ATMEL_US_TXRDY)) >> cpu_relax(); >> - atmel_uart_writel(port, ATMEL_US_THR, ch); >> + atmel_uart_writeb(port, ATMEL_US_THR, ch); >> } >> >> /* >> @@ -2603,6 +2648,48 @@ static int atmel_init_gpios(struct atmel_uart_port *p, struct device *dev) >> return 0; >> } >> >> +static void atmel_serial_probe_fifos(struct atmel_uart_port *port, >> + struct platform_device *pdev) >> +{ >> + port->fifo_size = 0; >> + port->rts_low = 0; >> + port->rts_high = 0; >> + >> + if (of_property_read_u32(pdev->dev.of_node, >> + "atmel,fifo-size", >> + &port->fifo_size)) >> + return; >> + >> + if (!port->fifo_size) >> + return; >> + >> + if (port->fifo_size < ATMEL_MIN_FIFO_SIZE) { >> + port->fifo_size = 0; >> + dev_err(&pdev->dev, "Invalid FIFO size\n"); >> + return; >> + } >> + >> + /* >> + * 0 <= rts_low <= rts_high <= fifo_size >> + * Once their CTS line asserted by the remote peer, some x86 UARTs tend >> + * to flush their internal TX FIFO, commonly up to 16 data, before >> + * actually stopping to send new data. So we try to set the RTS High >> + * Threshold to a reasonably high value respecting this 16 data >> + * empirical rule when possible. >> + */ >> + port->rts_high = max_t(int, port->fifo_size >> 1, >> + port->fifo_size - ATMEL_RTS_HIGH_OFFSET); >> + port->rts_low = max_t(int, port->fifo_size >> 2, >> + port->fifo_size - ATMEL_RTS_LOW_OFFSET); >> + >> + dev_info(&pdev->dev, "Using FIFO (%u data)\n", >> + port->fifo_size); >> + dev_dbg(&pdev->dev, "RTS High Threshold : %2u data\n", >> + port->rts_high); >> + dev_dbg(&pdev->dev, "RTS Low Threshold : %2u data\n", >> + port->rts_low); >> +} >> + >> static int atmel_serial_probe(struct platform_device *pdev) >> { >> struct atmel_uart_port *port; >> @@ -2639,6 +2726,7 @@ static int atmel_serial_probe(struct platform_device *pdev) >> port = &atmel_ports[ret]; >> port->backup_imr = 0; >> port->uart.line = ret; >> + atmel_serial_probe_fifos(port, pdev); >> >> spin_lock_init(&port->lock_suspended); >> >> diff --git a/include/linux/atmel_serial.h b/include/linux/atmel_serial.h >> index c384c21d65f0..ee696d7e8a43 100644 >> --- a/include/linux/atmel_serial.h >> +++ b/include/linux/atmel_serial.h >> @@ -35,6 +35,11 @@ >> #define ATMEL_US_DTRDIS BIT(17) /* Data Terminal Ready Disable */ >> #define ATMEL_US_RTSEN BIT(18) /* Request To Send Enable */ >> #define ATMEL_US_RTSDIS BIT(19) /* Request To Send Disable */ >> +#define ATMEL_US_TXFCLR BIT(24) /* Transmit FIFO Clear */ >> +#define ATMEL_US_RXFCLR BIT(25) /* Receive FIFO Clear */ >> +#define ATMEL_US_TXFLCLR BIT(26) /* Transmit FIFO Lock Clear */ >> +#define ATMEL_US_FIFOEN BIT(30) /* FIFO enable */ >> +#define ATMEL_US_FIFODIS BIT(31) /* FIFO disable */ >> >> #define ATMEL_US_MR 0x04 /* Mode Register */ >> #define ATMEL_US_USMODE GENMASK(3, 0) /* Mode of the USART */ >> @@ -124,6 +129,37 @@ >> #define ATMEL_US_NER 0x44 /* Number of Errors Register */ >> #define ATMEL_US_IF 0x4c /* IrDA Filter Register */ >> >> +#define ATMEL_US_CMPR 0x90 /* Comparaison Register */ >> +#define ATMEL_US_FMR 0xa0 /* FIFO Mode Register */ >> +#define ATMEL_US_TXRDYM(data) (((data) & 0x3) << 0) /* TX Ready Mode */ >> +#define ATMEL_US_RXRDYM(data) (((data) & 0x3) << 4) /* RX Ready Mode */ >> +#define ATMEL_US_ONE_DATA 0x0 >> +#define ATMEL_US_TWO_DATA 0x1 >> +#define ATMEL_US_FOUR_DATA 0x2 >> +#define ATMEL_US_FRTSC BIT(7) /* FIFO RTS pin Control */ >> +#define ATMEL_US_TXFTHRES(thr) (((thr) & 0x3f) << 8) /* TX FIFO Threshold */ >> +#define ATMEL_US_RXFTHRES(thr) (((thr) & 0x3f) << 16) /* RX FIFO Threshold */ >> +#define ATMEL_US_RXFTHRES2(thr) (((thr) & 0x3f) << 24) /* RX FIFO Threshold2 */ >> + >> +#define ATMEL_US_FLR 0xa4 /* FIFO Level Register */ >> +#define ATMEL_US_TXFL(reg) (((reg) >> 0) & 0x3f) /* TX FIFO Level */ >> +#define ATMEL_US_RXFL(reg) (((reg) >> 16) & 0x3f) /* RX FIFO Level */ >> + >> +#define ATMEL_US_FIER 0xa8 /* FIFO Interrupt Enable Register */ >> +#define ATMEL_US_FIDR 0xac /* FIFO Interrupt Disable Register */ >> +#define ATMEL_US_FIMR 0xb0 /* FIFO Interrupt Mask Register */ >> +#define ATMEL_US_FESR 0xb4 /* FIFO Event Status Register */ >> +#define ATMEL_US_TXFEF BIT(0) /* Transmit FIFO Empty Flag */ >> +#define ATMEL_US_TXFFF BIT(1) /* Transmit FIFO Full Flag */ >> +#define ATMEL_US_TXFTHF BIT(2) /* Transmit FIFO Threshold Flag */ >> +#define ATMEL_US_RXFEF BIT(3) /* Receive FIFO Empty Flag */ >> +#define ATMEL_US_RXFFF BIT(4) /* Receive FIFO Full Flag */ >> +#define ATMEL_US_RXFTHF BIT(5) /* Receive FIFO Threshold Flag */ >> +#define ATMEL_US_TXFPTEF BIT(6) /* Transmit FIFO Pointer Error Flag */ >> +#define ATMEL_US_RXFPTEF BIT(7) /* Receive FIFO Pointer Error Flag */ >> +#define ATMEL_US_TXFLOCK BIT(8) /* Transmit FIFO Lock (FESR only) */ >> +#define ATMEL_US_RXFTHF2 BIT(9) /* Receive FIFO Threshold Flag 2 */ >> + >> #define ATMEL_US_NAME 0xf0 /* Ip Name */ >> #define ATMEL_US_VERSION 0xfc /* Ip Version */ >> >> -- >> 1.8.2.2 >> >> -- >> To unsubscribe from this list: send the line "unsubscribe linux-kernel" in >> the body of a message to majordomo at vger.kernel.org >> More majordomo info at http://vger.kernel.org/majordomo-info.html >> Please read the FAQ at http://www.tux.org/lkml/ > > > -- Nicolas Ferre