From mboxrd@z Thu Jan 1 00:00:00 1970 From: Jun Nie Subject: Re: [PATCH v2] serial: amba-pl011: complete support to ZTE uart Date: Tue, 12 Apr 2016 21:01:39 +0800 Message-ID: <570CF1B3.8080305@linaro.org> References: <1458717126-20814-1-git-send-email-jun.nie@linaro.org> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8"; Format="flowed" 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: Timur Tabi , Russell King - ARM Linux , linux-arm-kernel@lists.infradead.org, linux-serial@vger.kernel.org Cc: Jason Liu , Andre Przywara , Shawn Guo , Peter Hurley , G Gregory List-Id: linux-serial@vger.kernel.org T24gMjAxNuW5tDA05pyIMDHml6UgMTc6NTMsIEp1biBOaWUgd3JvdGU6Cj4gMjAxNi0wMy0yMyAx NToxMiBHTVQrMDg6MDAgSnVuIE5pZSA8anVuLm5pZUBsaW5hcm8ub3JnPjoKPj4gQ29tcGxldGUg c3VwcG9ydCB0byBaVEUgdWFydCB3aXRoIGFkZGluZyBzcGVjaWZpYyByZWdpc3RlcnMKPj4gbWFz ay4KPj4gV2UgdXNlIGEgbWFnaWMgYW1iYSBwZXJpcGhpZCB2YWx1ZSBhcyBwbDAxMSBkZXZpY2Ug b24gWlRFCj4+IGRvZXMgbm90IGhhdmUgYSBwZXJpcGhpZCB2YWx1ZSBpbiByZWdpc3Rlci4gVGhl IG1hZ2ljIHZhbHVlCj4+IHNob3VsZCBhbHNvIGJlIGZlZWQgdmlhIGRldmljZSB0cmVlICJhcm0s cHJpbWVjZWxsLXBlcmlwaGlkIgo+PiBwcm9wZXJ0eSB0byBtYXRjaCBwbDAxMSBkcml2ZXIgYW5k IGdldCBaVEUgdWFydCBkYXRhLgo+Pgo+PiBTaWduZWQtb2ZmLWJ5OiBKdW4gTmllIDxqdW4ubmll QGxpbmFyby5vcmc+Cj4+IC0tLQo+PiAgIGRyaXZlcnMvdHR5L3NlcmlhbC9hbWJhLXBsMDExLmMg fCA3MyArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKystLS0tLS0tLQo+PiAgIGluY2x1 ZGUvbGludXgvYW1iYS9zZXJpYWwuaCAgICAgfCAgNCArKysKPj4gICAyIGZpbGVzIGNoYW5nZWQs IDY0IGluc2VydGlvbnMoKyksIDEzIGRlbGV0aW9ucygtKQo+Pgo+PiBkaWZmIC0tZ2l0IGEvZHJp dmVycy90dHkvc2VyaWFsL2FtYmEtcGwwMTEuYyBiL2RyaXZlcnMvdHR5L3NlcmlhbC9hbWJhLXBs MDExLmMKPj4gaW5kZXggN2MxOThlMC4uNjk2ZWUwYyAxMDA2NDQKPj4gLS0tIGEvZHJpdmVycy90 dHkvc2VyaWFsL2FtYmEtcGwwMTEuYwo+PiArKysgYi9kcml2ZXJzL3R0eS9zZXJpYWwvYW1iYS1w bDAxMS5jCj4+IEBAIC05Myw2ICs5MywxMCBAQCBzdGF0aWMgdTE2IHBsMDExX3N0ZF9vZmZzZXRz W1JFR19BUlJBWV9TSVpFXSA9IHsKPj4gICBzdHJ1Y3QgdmVuZG9yX2RhdGEgewo+PiAgICAgICAg ICBjb25zdCB1MTYgICAgICAgICAgICAgICAqcmVnX29mZnNldDsKPj4gICAgICAgICAgdW5zaWdu ZWQgaW50ICAgICAgICAgICAgaWZsczsKPj4gKyAgICAgICB1bnNpZ25lZCBpbnQgICAgICAgICAg ICBmcl9idXN5Owo+PiArICAgICAgIHVuc2lnbmVkIGludCAgICAgICAgICAgIGZyX2RzcjsKPj4g KyAgICAgICB1bnNpZ25lZCBpbnQgICAgICAgICAgICBmcl9jdHM7Cj4+ICsgICAgICAgdW5zaWdu ZWQgaW50ICAgICAgICAgICAgZnJfcmk7Cj4+ICAgICAgICAgIGJvb2wgICAgICAgICAgICAgICAg ICAgIGFjY2Vzc18zMmI7Cj4+ICAgICAgICAgIGJvb2wgICAgICAgICAgICAgICAgICAgIG92ZXJz YW1wbGluZzsKPj4gICAgICAgICAgYm9vbCAgICAgICAgICAgICAgICAgICAgZG1hX3RocmVzaG9s ZDsKPj4gQEAgLTExMSw2ICsxMTUsMTAgQEAgc3RhdGljIHVuc2lnbmVkIGludCBnZXRfZmlmb3Np emVfYXJtKHN0cnVjdCBhbWJhX2RldmljZSAqZGV2KQo+PiAgIHN0YXRpYyBzdHJ1Y3QgdmVuZG9y X2RhdGEgdmVuZG9yX2FybSA9IHsKPj4gICAgICAgICAgLnJlZ19vZmZzZXQgICAgICAgICAgICAg PSBwbDAxMV9zdGRfb2Zmc2V0cywKPj4gICAgICAgICAgLmlmbHMgICAgICAgICAgICAgICAgICAg PSBVQVJUMDExX0lGTFNfUlg0Xzh8VUFSVDAxMV9JRkxTX1RYNF84LAo+PiArICAgICAgIC5mcl9i dXN5ICAgICAgICAgICAgICAgID0gVUFSVDAxeF9GUl9CVVNZLAo+PiArICAgICAgIC5mcl9kc3Ig ICAgICAgICAgICAgICAgID0gVUFSVDAxeF9GUl9EU1IsCj4+ICsgICAgICAgLmZyX2N0cyAgICAg ICAgICAgICAgICAgPSBVQVJUMDF4X0ZSX0NUUywKPj4gKyAgICAgICAuZnJfcmkgICAgICAgICAg ICAgICAgICA9IFVBUlQwMTFfRlJfUkksCj4+ICAgICAgICAgIC5vdmVyc2FtcGxpbmcgICAgICAg ICAgID0gZmFsc2UsCj4+ICAgICAgICAgIC5kbWFfdGhyZXNob2xkICAgICAgICAgID0gZmFsc2Us Cj4+ICAgICAgICAgIC5jdHNfZXZlbnRfd29ya2Fyb3VuZCAgID0gZmFsc2UsCj4+IEBAIC0xMjEs NiArMTI5LDEwIEBAIHN0YXRpYyBzdHJ1Y3QgdmVuZG9yX2RhdGEgdmVuZG9yX2FybSA9IHsKPj4K Pj4gICBzdGF0aWMgc3RydWN0IHZlbmRvcl9kYXRhIHZlbmRvcl9zYnNhID0gewo+PiAgICAgICAg ICAucmVnX29mZnNldCAgICAgICAgICAgICA9IHBsMDExX3N0ZF9vZmZzZXRzLAo+PiArICAgICAg IC5mcl9idXN5ICAgICAgICAgICAgICAgID0gVUFSVDAxeF9GUl9CVVNZLAo+PiArICAgICAgIC5m cl9kc3IgICAgICAgICAgICAgICAgID0gVUFSVDAxeF9GUl9EU1IsCj4+ICsgICAgICAgLmZyX2N0 cyAgICAgICAgICAgICAgICAgPSBVQVJUMDF4X0ZSX0NUUywKPj4gKyAgICAgICAuZnJfcmkgICAg ICAgICAgICAgICAgICA9IFVBUlQwMTFfRlJfUkksCj4+ICAgICAgICAgIC5vdmVyc2FtcGxpbmcg ICAgICAgICAgID0gZmFsc2UsCj4+ICAgICAgICAgIC5kbWFfdGhyZXNob2xkICAgICAgICAgID0g ZmFsc2UsCj4+ICAgICAgICAgIC5jdHNfZXZlbnRfd29ya2Fyb3VuZCAgID0gZmFsc2UsCj4+IEBA IC0xNjMsNiArMTc1LDEwIEBAIHN0YXRpYyB1bnNpZ25lZCBpbnQgZ2V0X2ZpZm9zaXplX3N0KHN0 cnVjdCBhbWJhX2RldmljZSAqZGV2KQo+PiAgIHN0YXRpYyBzdHJ1Y3QgdmVuZG9yX2RhdGEgdmVu ZG9yX3N0ID0gewo+PiAgICAgICAgICAucmVnX29mZnNldCAgICAgICAgICAgICA9IHBsMDExX3N0 X29mZnNldHMsCj4+ICAgICAgICAgIC5pZmxzICAgICAgICAgICAgICAgICAgID0gVUFSVDAxMV9J RkxTX1JYX0hBTEZ8VUFSVDAxMV9JRkxTX1RYX0hBTEYsCj4+ICsgICAgICAgLmZyX2J1c3kgICAg ICAgICAgICAgICAgPSBVQVJUMDF4X0ZSX0JVU1ksCj4+ICsgICAgICAgLmZyX2RzciAgICAgICAg ICAgICAgICAgPSBVQVJUMDF4X0ZSX0RTUiwKPj4gKyAgICAgICAuZnJfY3RzICAgICAgICAgICAg ICAgICA9IFVBUlQwMXhfRlJfQ1RTLAo+PiArICAgICAgIC5mcl9yaSAgICAgICAgICAgICAgICAg ID0gVUFSVDAxMV9GUl9SSSwKPj4gICAgICAgICAgLm92ZXJzYW1wbGluZyAgICAgICAgICAgPSB0 cnVlLAo+PiAgICAgICAgICAuZG1hX3RocmVzaG9sZCAgICAgICAgICA9IHRydWUsCj4+ICAgICAg ICAgIC5jdHNfZXZlbnRfd29ya2Fyb3VuZCAgID0gdHJ1ZSwKPj4gQEAgLTE4NywxMSArMjAzLDI1 IEBAIHN0YXRpYyBjb25zdCB1MTYgcGwwMTFfenRlX29mZnNldHNbUkVHX0FSUkFZX1NJWkVdID0g ewo+PiAgICAgICAgICBbUkVHX0RNQUNSXSA9IFpYX1VBUlQwMTFfRE1BQ1IsCj4+ICAgfTsKPj4K Pj4gK3N0YXRpYyB1bnNpZ25lZCBpbnQgZ2V0X2ZpZm9zaXplX3p0ZShzdHJ1Y3QgYW1iYV9kZXZp Y2UgKmRldikKPj4gK3sKPj4gKyAgICAgICByZXR1cm4gMTY7Cj4+ICt9Cj4+ICsKPj4gICBzdGF0 aWMgc3RydWN0IHZlbmRvcl9kYXRhIHZlbmRvcl96dGUgX19tYXliZV91bnVzZWQgPSB7Cj4+ICAg ICAgICAgIC5yZWdfb2Zmc2V0ICAgICAgICAgICAgID0gcGwwMTFfenRlX29mZnNldHMsCj4+ICAg ICAgICAgIC5hY2Nlc3NfMzJiICAgICAgICAgICAgID0gdHJ1ZSwKPj4gICAgICAgICAgLmlmbHMg ICAgICAgICAgICAgICAgICAgPSBVQVJUMDExX0lGTFNfUlg0Xzh8VUFSVDAxMV9JRkxTX1RYNF84 LAo+PiAtICAgICAgIC5nZXRfZmlmb3NpemUgICAgICAgICAgID0gZ2V0X2ZpZm9zaXplX2FybSwK Pj4gKyAgICAgICAuZnJfYnVzeSAgICAgICAgICAgICAgICA9IFpYX1VBUlQwMXhfRlJfQlVTWSwK Pj4gKyAgICAgICAuZnJfZHNyICAgICAgICAgICAgICAgICA9IFpYX1VBUlQwMXhfRlJfRFNSLAo+ PiArICAgICAgIC5mcl9jdHMgICAgICAgICAgICAgICAgID0gWlhfVUFSVDAxeF9GUl9DVFMsCj4+ ICsgICAgICAgLmZyX3JpICAgICAgICAgICAgICAgICAgPSBaWF9VQVJUMDExX0ZSX1JJLAo+PiAr ICAgICAgIC5vdmVyc2FtcGxpbmcgICAgICAgICAgID0gZmFsc2UsCj4+ICsgICAgICAgLmRtYV90 aHJlc2hvbGQgICAgICAgICAgPSBmYWxzZSwKPj4gKyAgICAgICAuY3RzX2V2ZW50X3dvcmthcm91 bmQgICA9IGZhbHNlLAo+PiArICAgICAgIC5hbHdheXNfZW5hYmxlZCAgICAgICAgID0gZmFsc2Us Cj4+ICsgICAgICAgLmZpeGVkX29wdGlvbnMgICAgICAgICAgPSBmYWxzZSwKPj4gKyAgICAgICAu Z2V0X2ZpZm9zaXplICAgICAgICAgICA9IGdldF9maWZvc2l6ZV96dGUsCj4+ICAgfTsKPj4KPj4g ICAvKiBEZWFscyB3aXRoIERNQSB0cmFuc2FjdGlvbnMgKi8KPj4gQEAgLTIzNiw2ICsyNjYsMTAg QEAgc3RydWN0IHVhcnRfYW1iYV9wb3J0IHsKPj4gICAgICAgICAgdW5zaWduZWQgaW50ICAgICAg ICAgICAgaW07ICAgICAgICAgICAgIC8qIGludGVycnVwdCBtYXNrICovCj4+ICAgICAgICAgIHVu c2lnbmVkIGludCAgICAgICAgICAgIG9sZF9zdGF0dXM7Cj4+ICAgICAgICAgIHVuc2lnbmVkIGlu dCAgICAgICAgICAgIGZpZm9zaXplOyAgICAgICAvKiB2ZW5kb3Itc3BlY2lmaWMgKi8KPj4gKyAg ICAgICB1bnNpZ25lZCBpbnQgICAgICAgICAgICBmcl9idXN5OyAgICAgICAgLyogdmVuZG9yLXNw ZWNpZmljICovCj4+ICsgICAgICAgdW5zaWduZWQgaW50ICAgICAgICAgICAgZnJfZHNyOyAgICAg ICAgIC8qIHZlbmRvci1zcGVjaWZpYyAqLwo+PiArICAgICAgIHVuc2lnbmVkIGludCAgICAgICAg ICAgIGZyX2N0czsgICAgICAgICAvKiB2ZW5kb3Itc3BlY2lmaWMgKi8KPj4gKyAgICAgICB1bnNp Z25lZCBpbnQgICAgICAgICAgICBmcl9yaTsgICAgICAgICAgLyogdmVuZG9yLXNwZWNpZmljICov Cj4+ICAgICAgICAgIHVuc2lnbmVkIGludCAgICAgICAgICAgIG9sZF9jcjsgICAgICAgICAvKiBz dGF0ZSBkdXJpbmcgc2h1dGRvd24gKi8KPj4gICAgICAgICAgYm9vbCAgICAgICAgICAgICAgICAg ICAgYXV0b3J0czsKPj4gICAgICAgICAgdW5zaWduZWQgaW50ICAgICAgICAgICAgZml4ZWRfYmF1 ZDsgICAgIC8qIHZlbmRvci1zZXQgZml4ZWQgYmF1ZCByYXRlICovCj4+IEBAIC0xMTY2LDcgKzEy MDAsNyBAQCBzdGF0aWMgdm9pZCBwbDAxMV9kbWFfc2h1dGRvd24oc3RydWN0IHVhcnRfYW1iYV9w b3J0ICp1YXApCj4+ICAgICAgICAgICAgICAgICAgcmV0dXJuOwo+Pgo+PiAgICAgICAgICAvKiBE aXNhYmxlIFJYIGFuZCBUWCBETUEgKi8KPj4gLSAgICAgICB3aGlsZSAocGwwMTFfcmVhZCh1YXAs IFJFR19GUikgJiBVQVJUMDF4X0ZSX0JVU1kpCj4+ICsgICAgICAgd2hpbGUgKHBsMDExX3JlYWQo dWFwLCBSRUdfRlIpICYgdWFwLT5mcl9idXN5KQo+PiAgICAgICAgICAgICAgICAgIGNwdV9yZWxh eCgpOwo+Pgo+PiAgICAgICAgICBzcGluX2xvY2tfaXJxKCZ1YXAtPnBvcnQubG9jayk7Cj4+IEBA IC0xNDE1LDExICsxNDQ5LDExIEBAIHN0YXRpYyB2b2lkIHBsMDExX21vZGVtX3N0YXR1cyhzdHJ1 Y3QgdWFydF9hbWJhX3BvcnQgKnVhcCkKPj4gICAgICAgICAgaWYgKGRlbHRhICYgVUFSVDAxeF9G Ul9EQ0QpCj4+ICAgICAgICAgICAgICAgICAgdWFydF9oYW5kbGVfZGNkX2NoYW5nZSgmdWFwLT5w b3J0LCBzdGF0dXMgJiBVQVJUMDF4X0ZSX0RDRCk7Cj4+Cj4+IC0gICAgICAgaWYgKGRlbHRhICYg VUFSVDAxeF9GUl9EU1IpCj4+ICsgICAgICAgaWYgKGRlbHRhICYgdWFwLT5mcl9kc3IpCj4+ICAg ICAgICAgICAgICAgICAgdWFwLT5wb3J0Lmljb3VudC5kc3IrKzsKPj4KPj4gLSAgICAgICBpZiAo ZGVsdGEgJiBVQVJUMDF4X0ZSX0NUUykKPj4gLSAgICAgICAgICAgICAgIHVhcnRfaGFuZGxlX2N0 c19jaGFuZ2UoJnVhcC0+cG9ydCwgc3RhdHVzICYgVUFSVDAxeF9GUl9DVFMpOwo+PiArICAgICAg IGlmIChkZWx0YSAmIHVhcC0+ZnJfY3RzKQo+PiArICAgICAgICAgICAgICAgdWFydF9oYW5kbGVf Y3RzX2NoYW5nZSgmdWFwLT5wb3J0LCBzdGF0dXMgJiB1YXAtPmZyX2N0cyk7Cj4+Cj4+ICAgICAg ICAgIHdha2VfdXBfaW50ZXJydXB0aWJsZSgmdWFwLT5wb3J0LnN0YXRlLT5wb3J0LmRlbHRhX21z cl93YWl0KTsKPj4gICB9Cj4+IEBAIC0xNDkyLDcgKzE1MjYsNyBAQCBzdGF0aWMgdW5zaWduZWQg aW50IHBsMDExX3R4X2VtcHR5KHN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQpCj4+ICAgICAgICAgIHN0 cnVjdCB1YXJ0X2FtYmFfcG9ydCAqdWFwID0KPj4gICAgICAgICAgICAgIGNvbnRhaW5lcl9vZihw b3J0LCBzdHJ1Y3QgdWFydF9hbWJhX3BvcnQsIHBvcnQpOwo+PiAgICAgICAgICB1bnNpZ25lZCBp bnQgc3RhdHVzID0gcGwwMTFfcmVhZCh1YXAsIFJFR19GUik7Cj4+IC0gICAgICAgcmV0dXJuIHN0 YXR1cyAmIChVQVJUMDF4X0ZSX0JVU1l8VUFSVDAxeF9GUl9UWEZGKSA/IDAgOiBUSU9DU0VSX1RF TVQ7Cj4+ICsgICAgICAgcmV0dXJuIHN0YXR1cyAmICh1YXAtPmZyX2J1c3kgfCBVQVJUMDF4X0ZS X1RYRkYpID8gMCA6IFRJT0NTRVJfVEVNVDsKPj4gICB9Cj4+Cj4+ICAgc3RhdGljIHVuc2lnbmVk IGludCBwbDAxMV9nZXRfbWN0cmwoc3RydWN0IHVhcnRfcG9ydCAqcG9ydCkKPj4gQEAgLTE1MDcs OSArMTU0MSw5IEBAIHN0YXRpYyB1bnNpZ25lZCBpbnQgcGwwMTFfZ2V0X21jdHJsKHN0cnVjdCB1 YXJ0X3BvcnQgKnBvcnQpCj4+ICAgICAgICAgICAgICAgICAgcmVzdWx0IHw9IHRpb2NtYml0Cj4+ Cj4+ICAgICAgICAgIFRJT0NNQklUKFVBUlQwMXhfRlJfRENELCBUSU9DTV9DQVIpOwo+PiAtICAg ICAgIFRJT0NNQklUKFVBUlQwMXhfRlJfRFNSLCBUSU9DTV9EU1IpOwo+PiAtICAgICAgIFRJT0NN QklUKFVBUlQwMXhfRlJfQ1RTLCBUSU9DTV9DVFMpOwo+PiAtICAgICAgIFRJT0NNQklUKFVBUlQw MTFfRlJfUkksIFRJT0NNX1JORyk7Cj4+ICsgICAgICAgVElPQ01CSVQodWFwLT5mcl9kc3IsIFRJ T0NNX0RTUik7Cj4+ICsgICAgICAgVElPQ01CSVQodWFwLT5mcl9jdHMsIFRJT0NNX0NUUyk7Cj4+ ICsgICAgICAgVElPQ01CSVQodWFwLT5mcl9yaSwgVElPQ01fUk5HKTsKPj4gICAjdW5kZWYgVElP Q01CSVQKPj4gICAgICAgICAgcmV0dXJuIHJlc3VsdDsKPj4gICB9Cj4+IEBAIC0yMDg2LDcgKzIx MjAsNyBAQCBzdGF0aWMgaW50IHBsMDExX3ZlcmlmeV9wb3J0KHN0cnVjdCB1YXJ0X3BvcnQgKnBv cnQsIHN0cnVjdCBzZXJpYWxfc3RydWN0ICpzZXIpCj4+ICAgICAgICAgIHJldHVybiByZXQ7Cj4+ ICAgfQo+Pgo+PiAtc3RhdGljIHN0cnVjdCB1YXJ0X29wcyBhbWJhX3BsMDExX3BvcHMgPSB7Cj4+ ICtzdGF0aWMgY29uc3Qgc3RydWN0IHVhcnRfb3BzIGFtYmFfcGwwMTFfcG9wcyA9IHsKPj4gICAg ICAgICAgLnR4X2VtcHR5ICAgICAgID0gcGwwMTFfdHhfZW1wdHksCj4+ICAgICAgICAgIC5zZXRf bWN0cmwgICAgICA9IHBsMDExX3NldF9tY3RybCwKPj4gICAgICAgICAgLmdldF9tY3RybCAgICAg ID0gcGwwMTFfZ2V0X21jdHJsLAo+PiBAQCAtMjE5MCw3ICsyMjI0LDcgQEAgcGwwMTFfY29uc29s ZV93cml0ZShzdHJ1Y3QgY29uc29sZSAqY28sIGNvbnN0IGNoYXIgKnMsIHVuc2lnbmVkIGludCBj b3VudCkKPj4gICAgICAgICAgICogICAgICBGaW5hbGx5LCB3YWl0IGZvciB0cmFuc21pdHRlciB0 byBiZWNvbWUgZW1wdHkKPj4gICAgICAgICAgICogICAgICBhbmQgcmVzdG9yZSB0aGUgVENSCj4+ ICAgICAgICAgICAqLwo+PiAtICAgICAgIHdoaWxlIChwbDAxMV9yZWFkKHVhcCwgUkVHX0ZSKSAm IFVBUlQwMXhfRlJfQlVTWSkKPj4gKyAgICAgICB3aGlsZSAocGwwMTFfcmVhZCh1YXAsIFJFR19G UikgJiB1YXAtPmZyX2J1c3kpCj4+ICAgICAgICAgICAgICAgICAgY3B1X3JlbGF4KCk7Cj4+ICAg ICAgICAgIGlmICghdWFwLT52ZW5kb3ItPmFsd2F5c19lbmFibGVkKQo+PiAgICAgICAgICAgICAg ICAgIHBsMDExX3dyaXRlKG9sZF9jciwgdWFwLCBSRUdfQ1IpOwo+PiBAQCAtMjQ3Miw4ICsyNTA2 LDEyIEBAIHN0YXRpYyBpbnQgcGwwMTFfcHJvYmUoc3RydWN0IGFtYmFfZGV2aWNlICpkZXYsIGNv bnN0IHN0cnVjdCBhbWJhX2lkICppZCkKPj4gICAgICAgICAgICAgICAgICByZXR1cm4gUFRSX0VS Uih1YXAtPmNsayk7Cj4+Cj4+ICAgICAgICAgIHVhcC0+cmVnX29mZnNldCA9IHZlbmRvci0+cmVn X29mZnNldDsKPj4gLSAgICAgICB1YXAtPnZlbmRvciA9IHZlbmRvcjsKPj4gLSAgICAgICB1YXAt PmZpZm9zaXplID0gdmVuZG9yLT5nZXRfZmlmb3NpemUoZGV2KTsKPj4gKyAgICAgICB1YXAtPnZl bmRvciAgICAgPSB2ZW5kb3I7Cj4+ICsgICAgICAgdWFwLT5maWZvc2l6ZSAgID0gdmVuZG9yLT5n ZXRfZmlmb3NpemUoZGV2KTsKPj4gKyAgICAgICB1YXAtPmZyX2J1c3kgICAgPSB2ZW5kb3ItPmZy X2J1c3k7Cj4+ICsgICAgICAgdWFwLT5mcl9kc3IgICAgID0gdmVuZG9yLT5mcl9kc3I7Cj4+ICsg ICAgICAgdWFwLT5mcl9jdHMgICAgID0gdmVuZG9yLT5mcl9jdHM7Cj4+ICsgICAgICAgdWFwLT5m cl9yaSAgICAgID0gdmVuZG9yLT5mcl9yaTsKPj4gICAgICAgICAgdWFwLT5wb3J0LmlvdHlwZSA9 IHZlbmRvci0+YWNjZXNzXzMyYiA/IFVQSU9fTUVNMzIgOiBVUElPX01FTTsKPj4gICAgICAgICAg dWFwLT5wb3J0LmlycSA9IGRldi0+aXJxWzBdOwo+PiAgICAgICAgICB1YXAtPnBvcnQub3BzID0g JmFtYmFfcGwwMTFfcG9wczsKPj4gQEAgLTI1NTUsNiArMjU5MywxMCBAQCBzdGF0aWMgaW50IHNi c2FfdWFydF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQo+PiAgICAgICAgICB1 YXAtPnJlZ19vZmZzZXQgPSB2ZW5kb3Jfc2JzYS5yZWdfb2Zmc2V0Owo+PiAgICAgICAgICB1YXAt PnZlbmRvciAgICAgPSAmdmVuZG9yX3Nic2E7Cj4+ICAgICAgICAgIHVhcC0+Zmlmb3NpemUgICA9 IDMyOwo+PiArICAgICAgIHVhcC0+ZnJfYnVzeSAgICA9IHZlbmRvcl9zYnNhLmZyX2J1c3k7Cj4+ ICsgICAgICAgdWFwLT5mcl9kc3IgICAgID0gdmVuZG9yX3Nic2EuZnJfZHNyOwo+PiArICAgICAg IHVhcC0+ZnJfY3RzICAgICA9IHZlbmRvcl9zYnNhLmZyX2N0czsKPj4gKyAgICAgICB1YXAtPmZy X3JpICAgICAgPSB2ZW5kb3Jfc2JzYS5mcl9yaTsKPj4gICAgICAgICAgdWFwLT5wb3J0LmlvdHlw ZSA9IHZlbmRvcl9zYnNhLmFjY2Vzc18zMmIgPyBVUElPX01FTTMyIDogVVBJT19NRU07Cj4+ICAg ICAgICAgIHVhcC0+cG9ydC5pcnEgICA9IHBsYXRmb3JtX2dldF9pcnEocGRldiwgMCk7Cj4+ICAg ICAgICAgIHVhcC0+cG9ydC5vcHMgICA9ICZzYnNhX3VhcnRfcG9wczsKPj4gQEAgLTI2MTUsNiAr MjY1NywxMSBAQCBzdGF0aWMgc3RydWN0IGFtYmFfaWQgcGwwMTFfaWRzW10gPSB7Cj4+ICAgICAg ICAgICAgICAgICAgLm1hc2sgICA9IDB4MDBmZmZmZmYsCj4+ICAgICAgICAgICAgICAgICAgLmRh dGEgICA9ICZ2ZW5kb3Jfc3QsCj4+ICAgICAgICAgIH0sCj4+ICsgICAgICAgewo+PiArICAgICAg ICAgICAgICAgLmlkICAgICA9IDB4ZmVmZWZlLAo+PiArICAgICAgICAgICAgICAgLm1hc2sgICA9 IDB4ZmZmZmZmLAo+PiArICAgICAgICAgICAgICAgLmRhdGEgICA9ICZ2ZW5kb3JfenRlLAo+PiAr ICAgICAgIH0sCj4+ICAgICAgICAgIHsgMCwgMCB9LAo+PiAgIH07Cj4+Cj4+IGRpZmYgLS1naXQg YS9pbmNsdWRlL2xpbnV4L2FtYmEvc2VyaWFsLmggYi9pbmNsdWRlL2xpbnV4L2FtYmEvc2VyaWFs LmgKPj4gaW5kZXggZDc2YTE5Yi4uNzUwZjJlZiAxMDA2NDQKPj4gLS0tIGEvaW5jbHVkZS9saW51 eC9hbWJhL3NlcmlhbC5oCj4+ICsrKyBiL2luY2x1ZGUvbGludXgvYW1iYS9zZXJpYWwuaAo+PiBA QCAtMTAzLDYgKzEwMywxMCBAQAo+PiAgICNkZWZpbmUgVUFSVDAxeF9GUl9EU1IgICAgICAgICAg ICAgICAgIDB4MDAyCj4+ICAgI2RlZmluZSBVQVJUMDF4X0ZSX0NUUyAgICAgICAgICAgICAgICAg MHgwMDEKPj4gICAjZGVmaW5lIFVBUlQwMXhfRlJfVE1TSyAgICAgICAgICAgICAgICAoVUFSVDAx eF9GUl9UWEZGICsgVUFSVDAxeF9GUl9CVVNZKQo+PiArI2RlZmluZSBaWF9VQVJUMDF4X0ZSX0JV U1kgICAgIDB4MzAwCj4+ICsjZGVmaW5lIFpYX1VBUlQwMXhfRlJfRFNSICAgICAgMHgwMDgKPj4g KyNkZWZpbmUgWlhfVUFSVDAxeF9GUl9DVFMgICAgICAweDAwMgo+PiArI2RlZmluZSBaWF9VQVJU MDExX0ZSX1JJICAgICAgIDB4MDAxCj4+Cj4+ICAgI2RlZmluZSBVQVJUMDExX0NSX0NUU0VOICAg ICAgIDB4ODAwMCAgLyogQ1RTIGhhcmR3YXJlIGZsb3cgY29udHJvbCAqLwo+PiAgICNkZWZpbmUg VUFSVDAxMV9DUl9SVFNFTiAgICAgICAweDQwMDAgIC8qIFJUUyBoYXJkd2FyZSBmbG93IGNvbnRy b2wgKi8KPj4gLS0KPj4gMS45LjEKPj4KClJ1c3NlbGwsCgpEbyB5b3UgaGF2ZSBhbnkgY29tbWVu dHMgdG8gdGhlc2UgY2hhbmdlPwoKSnVuCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fXwpsaW51eC1hcm0ta2VybmVsIG1haWxpbmcgbGlzdApsaW51eC1hcm0t a2VybmVsQGxpc3RzLmluZnJhZGVhZC5vcmcKaHR0cDovL2xpc3RzLmluZnJhZGVhZC5vcmcvbWFp bG1hbi9saXN0aW5mby9saW51eC1hcm0ta2VybmVsCg== From mboxrd@z Thu Jan 1 00:00:00 1970 From: jun.nie@linaro.org (Jun Nie) Date: Tue, 12 Apr 2016 21:01:39 +0800 Subject: [PATCH v2] serial: amba-pl011: complete support to ZTE uart In-Reply-To: References: <1458717126-20814-1-git-send-email-jun.nie@linaro.org> Message-ID: <570CF1B3.8080305@linaro.org> To: linux-arm-kernel@lists.infradead.org List-Id: linux-arm-kernel.lists.infradead.org On 2016?04?01? 17:53, Jun Nie wrote: > 2016-03-23 15:12 GMT+08:00 Jun Nie : >> Complete support to ZTE uart with adding specific registers >> mask. >> We use a magic amba periphid value as pl011 device on ZTE >> does not have a periphid value in register. The magic value >> should also be feed via device tree "arm,primecell-periphid" >> property to match pl011 driver and get ZTE uart data. >> >> Signed-off-by: Jun Nie >> --- >> drivers/tty/serial/amba-pl011.c | 73 +++++++++++++++++++++++++++++++++-------- >> include/linux/amba/serial.h | 4 +++ >> 2 files changed, 64 insertions(+), 13 deletions(-) >> >> diff --git a/drivers/tty/serial/amba-pl011.c b/drivers/tty/serial/amba-pl011.c >> index 7c198e0..696ee0c 100644 >> --- a/drivers/tty/serial/amba-pl011.c >> +++ b/drivers/tty/serial/amba-pl011.c >> @@ -93,6 +93,10 @@ static u16 pl011_std_offsets[REG_ARRAY_SIZE] = { >> struct vendor_data { >> const u16 *reg_offset; >> unsigned int ifls; >> + unsigned int fr_busy; >> + unsigned int fr_dsr; >> + unsigned int fr_cts; >> + unsigned int fr_ri; >> bool access_32b; >> bool oversampling; >> bool dma_threshold; >> @@ -111,6 +115,10 @@ static unsigned int get_fifosize_arm(struct amba_device *dev) >> static struct vendor_data vendor_arm = { >> .reg_offset = pl011_std_offsets, >> .ifls = UART011_IFLS_RX4_8|UART011_IFLS_TX4_8, >> + .fr_busy = UART01x_FR_BUSY, >> + .fr_dsr = UART01x_FR_DSR, >> + .fr_cts = UART01x_FR_CTS, >> + .fr_ri = UART011_FR_RI, >> .oversampling = false, >> .dma_threshold = false, >> .cts_event_workaround = false, >> @@ -121,6 +129,10 @@ static struct vendor_data vendor_arm = { >> >> static struct vendor_data vendor_sbsa = { >> .reg_offset = pl011_std_offsets, >> + .fr_busy = UART01x_FR_BUSY, >> + .fr_dsr = UART01x_FR_DSR, >> + .fr_cts = UART01x_FR_CTS, >> + .fr_ri = UART011_FR_RI, >> .oversampling = false, >> .dma_threshold = false, >> .cts_event_workaround = false, >> @@ -163,6 +175,10 @@ static unsigned int get_fifosize_st(struct amba_device *dev) >> static struct vendor_data vendor_st = { >> .reg_offset = pl011_st_offsets, >> .ifls = UART011_IFLS_RX_HALF|UART011_IFLS_TX_HALF, >> + .fr_busy = UART01x_FR_BUSY, >> + .fr_dsr = UART01x_FR_DSR, >> + .fr_cts = UART01x_FR_CTS, >> + .fr_ri = UART011_FR_RI, >> .oversampling = true, >> .dma_threshold = true, >> .cts_event_workaround = true, >> @@ -187,11 +203,25 @@ static const u16 pl011_zte_offsets[REG_ARRAY_SIZE] = { >> [REG_DMACR] = ZX_UART011_DMACR, >> }; >> >> +static unsigned int get_fifosize_zte(struct amba_device *dev) >> +{ >> + return 16; >> +} >> + >> static struct vendor_data vendor_zte __maybe_unused = { >> .reg_offset = pl011_zte_offsets, >> .access_32b = true, >> .ifls = UART011_IFLS_RX4_8|UART011_IFLS_TX4_8, >> - .get_fifosize = get_fifosize_arm, >> + .fr_busy = ZX_UART01x_FR_BUSY, >> + .fr_dsr = ZX_UART01x_FR_DSR, >> + .fr_cts = ZX_UART01x_FR_CTS, >> + .fr_ri = ZX_UART011_FR_RI, >> + .oversampling = false, >> + .dma_threshold = false, >> + .cts_event_workaround = false, >> + .always_enabled = false, >> + .fixed_options = false, >> + .get_fifosize = get_fifosize_zte, >> }; >> >> /* Deals with DMA transactions */ >> @@ -236,6 +266,10 @@ struct uart_amba_port { >> unsigned int im; /* interrupt mask */ >> unsigned int old_status; >> unsigned int fifosize; /* vendor-specific */ >> + unsigned int fr_busy; /* vendor-specific */ >> + unsigned int fr_dsr; /* vendor-specific */ >> + unsigned int fr_cts; /* vendor-specific */ >> + unsigned int fr_ri; /* vendor-specific */ >> unsigned int old_cr; /* state during shutdown */ >> bool autorts; >> unsigned int fixed_baud; /* vendor-set fixed baud rate */ >> @@ -1166,7 +1200,7 @@ static void pl011_dma_shutdown(struct uart_amba_port *uap) >> return; >> >> /* Disable RX and TX DMA */ >> - while (pl011_read(uap, REG_FR) & UART01x_FR_BUSY) >> + while (pl011_read(uap, REG_FR) & uap->fr_busy) >> cpu_relax(); >> >> spin_lock_irq(&uap->port.lock); >> @@ -1415,11 +1449,11 @@ static void pl011_modem_status(struct uart_amba_port *uap) >> if (delta & UART01x_FR_DCD) >> uart_handle_dcd_change(&uap->port, status & UART01x_FR_DCD); >> >> - if (delta & UART01x_FR_DSR) >> + if (delta & uap->fr_dsr) >> uap->port.icount.dsr++; >> >> - if (delta & UART01x_FR_CTS) >> - uart_handle_cts_change(&uap->port, status & UART01x_FR_CTS); >> + if (delta & uap->fr_cts) >> + uart_handle_cts_change(&uap->port, status & uap->fr_cts); >> >> wake_up_interruptible(&uap->port.state->port.delta_msr_wait); >> } >> @@ -1492,7 +1526,7 @@ static unsigned int pl011_tx_empty(struct uart_port *port) >> struct uart_amba_port *uap = >> container_of(port, struct uart_amba_port, port); >> unsigned int status = pl011_read(uap, REG_FR); >> - return status & (UART01x_FR_BUSY|UART01x_FR_TXFF) ? 0 : TIOCSER_TEMT; >> + return status & (uap->fr_busy | UART01x_FR_TXFF) ? 0 : TIOCSER_TEMT; >> } >> >> static unsigned int pl011_get_mctrl(struct uart_port *port) >> @@ -1507,9 +1541,9 @@ static unsigned int pl011_get_mctrl(struct uart_port *port) >> result |= tiocmbit >> >> TIOCMBIT(UART01x_FR_DCD, TIOCM_CAR); >> - TIOCMBIT(UART01x_FR_DSR, TIOCM_DSR); >> - TIOCMBIT(UART01x_FR_CTS, TIOCM_CTS); >> - TIOCMBIT(UART011_FR_RI, TIOCM_RNG); >> + TIOCMBIT(uap->fr_dsr, TIOCM_DSR); >> + TIOCMBIT(uap->fr_cts, TIOCM_CTS); >> + TIOCMBIT(uap->fr_ri, TIOCM_RNG); >> #undef TIOCMBIT >> return result; >> } >> @@ -2086,7 +2120,7 @@ static int pl011_verify_port(struct uart_port *port, struct serial_struct *ser) >> return ret; >> } >> >> -static struct uart_ops amba_pl011_pops = { >> +static const struct uart_ops amba_pl011_pops = { >> .tx_empty = pl011_tx_empty, >> .set_mctrl = pl011_set_mctrl, >> .get_mctrl = pl011_get_mctrl, >> @@ -2190,7 +2224,7 @@ pl011_console_write(struct console *co, const char *s, unsigned int count) >> * Finally, wait for transmitter to become empty >> * and restore the TCR >> */ >> - while (pl011_read(uap, REG_FR) & UART01x_FR_BUSY) >> + while (pl011_read(uap, REG_FR) & uap->fr_busy) >> cpu_relax(); >> if (!uap->vendor->always_enabled) >> pl011_write(old_cr, uap, REG_CR); >> @@ -2472,8 +2506,12 @@ static int pl011_probe(struct amba_device *dev, const struct amba_id *id) >> return PTR_ERR(uap->clk); >> >> uap->reg_offset = vendor->reg_offset; >> - uap->vendor = vendor; >> - uap->fifosize = vendor->get_fifosize(dev); >> + uap->vendor = vendor; >> + uap->fifosize = vendor->get_fifosize(dev); >> + uap->fr_busy = vendor->fr_busy; >> + uap->fr_dsr = vendor->fr_dsr; >> + uap->fr_cts = vendor->fr_cts; >> + uap->fr_ri = vendor->fr_ri; >> uap->port.iotype = vendor->access_32b ? UPIO_MEM32 : UPIO_MEM; >> uap->port.irq = dev->irq[0]; >> uap->port.ops = &amba_pl011_pops; >> @@ -2555,6 +2593,10 @@ static int sbsa_uart_probe(struct platform_device *pdev) >> uap->reg_offset = vendor_sbsa.reg_offset; >> uap->vendor = &vendor_sbsa; >> uap->fifosize = 32; >> + uap->fr_busy = vendor_sbsa.fr_busy; >> + uap->fr_dsr = vendor_sbsa.fr_dsr; >> + uap->fr_cts = vendor_sbsa.fr_cts; >> + uap->fr_ri = vendor_sbsa.fr_ri; >> uap->port.iotype = vendor_sbsa.access_32b ? UPIO_MEM32 : UPIO_MEM; >> uap->port.irq = platform_get_irq(pdev, 0); >> uap->port.ops = &sbsa_uart_pops; >> @@ -2615,6 +2657,11 @@ static struct amba_id pl011_ids[] = { >> .mask = 0x00ffffff, >> .data = &vendor_st, >> }, >> + { >> + .id = 0xfefefe, >> + .mask = 0xffffff, >> + .data = &vendor_zte, >> + }, >> { 0, 0 }, >> }; >> >> diff --git a/include/linux/amba/serial.h b/include/linux/amba/serial.h >> index d76a19b..750f2ef 100644 >> --- a/include/linux/amba/serial.h >> +++ b/include/linux/amba/serial.h >> @@ -103,6 +103,10 @@ >> #define UART01x_FR_DSR 0x002 >> #define UART01x_FR_CTS 0x001 >> #define UART01x_FR_TMSK (UART01x_FR_TXFF + UART01x_FR_BUSY) >> +#define ZX_UART01x_FR_BUSY 0x300 >> +#define ZX_UART01x_FR_DSR 0x008 >> +#define ZX_UART01x_FR_CTS 0x002 >> +#define ZX_UART011_FR_RI 0x001 >> >> #define UART011_CR_CTSEN 0x8000 /* CTS hardware flow control */ >> #define UART011_CR_RTSEN 0x4000 /* RTS hardware flow control */ >> -- >> 1.9.1 >> Russell, Do you have any comments to these change? Jun