From mboxrd@z Thu Jan 1 00:00:00 1970 From: Miquel Raynal Subject: Re: [PATCH v2 05/10] phy: add A3700 UTMI PHY driver Date: Mon, 21 Jan 2019 11:37:16 +0100 Message-ID: <20190121113716.5aaa88fc@xps13> References: <20190111133133.24803-1-miquel.raynal@bootlin.com> <20190111133133.24803-6-miquel.raynal@bootlin.com> <1547520050.6058.6.camel@mhfsdcap03> <415538a9-357f-18ea-fb4f-7127b69a8281@ti.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <415538a9-357f-18ea-fb4f-7127b69a8281@ti.com> 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: Kishon Vijay Abraham I Cc: Mark Rutland , Andrew Lunn , Jason Cooper , Mathias Nyman , devicetree@vger.kernel.org, Antoine Tenart , Greg Kroah-Hartman , Gregory Clement , linux-usb@vger.kernel.org, Maxime Chevallier , Nadav Haklai , Rob Herring , Alan Stern , Igal Liberman , Thomas Petazzoni , Chunfeng Yun , linux-arm-kernel@lists.infradead.org, Sebastian Hesselbarth List-Id: devicetree@vger.kernel.org SGkgS2lzaG9uLCBDaHVuZmVuZywKCktpc2hvbiBWaWpheSBBYnJhaGFtIEkgPGtpc2hvbkB0aS5j b20+IHdyb3RlIG9uIFdlZCwgMTYgSmFuIDIwMTkKMTQ6NTA6NTggKzA1MzA6Cgo+IEhpLAo+IAo+ IE9uIDE1LzAxLzE5IDg6MTAgQU0sIENodW5mZW5nIFl1biB3cm90ZToKPiA+IEhpLAo+ID4gT24g RnJpLCAyMDE5LTAxLTExIGF0IDE0OjMxICswMTAwLCBNaXF1ZWwgUmF5bmFsIHdyb3RlOiAgCj4g Pj4gTWFydmVsbCBBcm1hZGEgMzcwMCBTb0MgaGFzIHR3byBVU0IgY29udHJvbGxlcnMsIGVhY2gg b2YgdGhlbSBiZWluZwo+ID4+IHdpcmVkIHRvIGFuIGludGVybmFsIFVUTUkgUEhZLiBBZGQgYSBk cml2ZXIgdG8gY29udHJvbCB0aGVtLgo+ID4+Cj4gPj4gSWdhbCBMaWJlcm1hbiB3b3JrZWQgb24g c3VwcG9ydGluZyB0aGUgUEhZLCBJIHRvb2sgdGhlIHdoaWxlICdyZWdpc3Rlcgo+ID4+IGNvbmZp Z3VyYXRpb24nIGZyb20gaGlzIHdvcmsgYW5kIHJld3JvdGUgYWxtb3N0IGVudGlyZWx5IHRoZQo+ ID4+IGRyaXZlci9iaW5kaW5ncyBhcm91bmQgaXQuCj4gPj4KPiA+PiBDby1kZXZlbG9wZWQtYnk6 IElnYWwgTGliZXJtYW4gPGlnYWxsQG1hcnZlbGwuY29tPgo+ID4+IFNpZ25lZC1vZmYtYnk6IE1p cXVlbCBSYXluYWwgPG1pcXVlbC5yYXluYWxAYm9vdGxpbi5jb20+Cj4gPj4gU2lnbmVkLW9mZi1i eTogSWdhbCBMaWJlcm1hbiA8aWdhbGxAbWFydmVsbC5jb20+Cj4gPj4gLS0tCj4gPj4gIGRyaXZl cnMvcGh5L21hcnZlbGwvS2NvbmZpZyAgICAgICAgICAgICAgICB8ICAgOSArCj4gPj4gIGRyaXZl cnMvcGh5L21hcnZlbGwvTWFrZWZpbGUgICAgICAgICAgICAgICB8ICAgMSArCj4gPj4gIGRyaXZl cnMvcGh5L21hcnZlbGwvcGh5LW12ZWJ1LWEzNzAwLXV0bWkuYyB8IDI5NyArKysrKysrKysrKysr KysrKysrKysKPiA+PiAgMyBmaWxlcyBjaGFuZ2VkLCAzMDcgaW5zZXJ0aW9ucygrKQo+ID4+ICBj cmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9waHkvbWFydmVsbC9waHktbXZlYnUtYTM3MDAtdXRt aS5jCj4gPj4KPiA+PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9waHkvbWFydmVsbC9LY29uZmlnIGIv ZHJpdmVycy9waHkvbWFydmVsbC9LY29uZmlnCj4gPj4gaW5kZXggOWM5MGMwNDA4ZWEzLi5iOGU5 ZGQzOGFkMGQgMTAwNjQ0Cj4gPj4gLS0tIGEvZHJpdmVycy9waHkvbWFydmVsbC9LY29uZmlnCj4g Pj4gKysrIGIvZHJpdmVycy9waHkvbWFydmVsbC9LY29uZmlnCj4gPj4gQEAgLTMzLDYgKzMzLDE1 IEBAIGNvbmZpZyBQSFlfTVZFQlVfQTM3MDBfQ09NUEhZCj4gPj4gIAkgIHNoYXJlZCBzZXJkZXMg UEhZcyBvbiBNYXJ2ZWxsIEFybWFkYSAzNzAwLiBJdHMgc2VyZGVzIGxhbmVzIGNhbiBiZQo+ID4+ ICAJICB1c2VkIGJ5IHZhcmlvdXMgY29udHJvbGxlcnM6IEV0aGVybmV0LCBTQVRBLCBVU0IzLCBQ Q0llLgo+ID4+ICAKPiA+PiArY29uZmlnIFBIWV9NVkVCVV9BMzcwMF9VVE1JCj4gPj4gKwl0cmlz dGF0ZSAiTWFydmVsbCBBMzcwMCBVVE1JIGRyaXZlciIKPiA+PiArCWRlcGVuZHMgb24gQVJDSF9N VkVCVSB8fCBDT01QSUxFX1RFU1QKPiA+PiArCWRlcGVuZHMgb24gT0YKPiA+PiArCWRlZmF1bHQg eQo+ID4+ICsJc2VsZWN0IEdFTkVSSUNfUEhZCj4gPj4gKwloZWxwCj4gPj4gKwkgIEVuYWJsZSB0 aGlzIHRvIHN1cHBvcnQgTWFydmVsbCBBMzcwMCBVVE1JIFBIWSBkcml2ZXIuCj4gPj4gKwo+ID4+ ICBjb25maWcgUEhZX01WRUJVX0NQMTEwX0NPTVBIWQo+ID4+ICAJdHJpc3RhdGUgIk1hcnZlbGwg Q1AxMTAgY29tcGh5IGRyaXZlciIKPiA+PiAgCWRlcGVuZHMgb24gQVJDSF9NVkVCVSB8fCBDT01Q SUxFX1RFU1QKPiA+PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9waHkvbWFydmVsbC9NYWtlZmlsZSBi L2RyaXZlcnMvcGh5L21hcnZlbGwvTWFrZWZpbGUKPiA+PiBpbmRleCBjMTNhMGM4YWI2ZjAuLjgy ZjI5MWNmNTllZSAxMDA2NDQKPiA+PiAtLS0gYS9kcml2ZXJzL3BoeS9tYXJ2ZWxsL01ha2VmaWxl Cj4gPj4gKysrIGIvZHJpdmVycy9waHkvbWFydmVsbC9NYWtlZmlsZQo+ID4+IEBAIC0zLDYgKzMs NyBAQCBvYmotJChDT05GSUdfQVJNQURBMzc1X1VTQkNMVVNURVJfUEhZKQkrPSBwaHktYXJtYWRh Mzc1LXVzYjIubwo+ID4+ICBvYmotJChDT05GSUdfUEhZX0JFUkxJTl9TQVRBKQkJKz0gcGh5LWJl cmxpbi1zYXRhLm8KPiA+PiAgb2JqLSQoQ09ORklHX1BIWV9CRVJMSU5fVVNCKQkJKz0gcGh5LWJl cmxpbi11c2Iubwo+ID4+ICBvYmotJChDT05GSUdfUEhZX01WRUJVX0EzNzAwX0NPTVBIWSkJKz0g cGh5LW12ZWJ1LWEzNzAwLWNvbXBoeS5vCj4gPj4gK29iai0kKENPTkZJR19QSFlfTVZFQlVfQTM3 MDBfVVRNSSkJKz0gcGh5LW12ZWJ1LWEzNzAwLXV0bWkubwo+ID4+ICBvYmotJChDT05GSUdfUEhZ X01WRUJVX0NQMTEwX0NPTVBIWSkJKz0gcGh5LW12ZWJ1LWNwMTEwLWNvbXBoeS5vCj4gPj4gIG9i ai0kKENPTkZJR19QSFlfTVZFQlVfU0FUQSkJCSs9IHBoeS1tdmVidS1zYXRhLm8KPiA+PiAgb2Jq LSQoQ09ORklHX1BIWV9QWEFfMjhOTV9IU0lDKQkJKz0gcGh5LXB4YS0yOG5tLWhzaWMubwo+ID4+ IGRpZmYgLS1naXQgYS9kcml2ZXJzL3BoeS9tYXJ2ZWxsL3BoeS1tdmVidS1hMzcwMC11dG1pLmMg Yi9kcml2ZXJzL3BoeS9tYXJ2ZWxsL3BoeS1tdmVidS1hMzcwMC11dG1pLmMKPiA+PiBuZXcgZmls ZSBtb2RlIDEwMDY0NAo+ID4+IGluZGV4IDAwMDAwMDAwMDAwMC4uOTdkODIzNWQ2NjFkCj4gPj4g LS0tIC9kZXYvbnVsbAo+ID4+ICsrKyBiL2RyaXZlcnMvcGh5L21hcnZlbGwvcGh5LW12ZWJ1LWEz NzAwLXV0bWkuYwo+ID4+IEBAIC0wLDAgKzEsMjk3IEBACj4gPj4gKy8vIFNQRFgtTGljZW5zZS1J ZGVudGlmaWVyOiBHUEwtMi4wCj4gPj4gKy8qCj4gPj4gKyAqIENvcHlyaWdodCAoQykgMjAxOCBN YXJ2ZWxsCj4gPj4gKyAqCj4gPj4gKyAqIEF1dGhvcnM6Cj4gPj4gKyAqICAgRXZhbiBXYW5nIDx4 c3dhbmdAbWFydmVsbC5jb20+Cj4gPj4gKyAqICAgTWlxdcOobCBSYXluYWwgPG1pcXVlbC5yYXlu YWxAYm9vdGxpbi5jb20+Cj4gPj4gKyAqCj4gPj4gKyAqIE1hcnZlbGwgQTM3MDAgVVRNSSBQSFkg ZHJpdmVyCj4gPj4gKyAqLwo+ID4+ICsKPiA+PiArI2luY2x1ZGUgPGxpbnV4L2lvLmg+Cj4gPj4g KyNpbmNsdWRlIDxsaW51eC9pb3BvbGwuaD4KPiA+PiArI2luY2x1ZGUgPGxpbnV4L21mZC9zeXNj b24uaD4KPiA+PiArI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgo+ID4+ICsjaW5jbHVkZSA8bGlu dXgvb2ZfZGV2aWNlLmg+Cj4gPj4gKyNpbmNsdWRlIDxsaW51eC9waHkvcGh5Lmg+Cj4gPj4gKyNp bmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KPiA+PiArI2luY2x1ZGUgPGxpbnV4L3Jl Z21hcC5oPgo+ID4+ICsKPiA+PiArLyogQXJtYWRhIDM3MDAgVVRNSSBQSFkgcmVnaXN0ZXJzICov Cj4gPj4gKyNkZWZpbmUgVVNCMl9QSFlfUExMX0NUUkxfUkVHMAkJCTB4MAo+ID4+ICsjZGVmaW5l ICAgUExMX1JFRl9ESVZfT0ZGCQkJMAo+ID4+ICsjZGVmaW5lICAgUExMX1JFRl9ESVZfTUFTSwkJ CSgweDdGIDw8IFBMTF9SRUZfRElWX09GRikgIAo+ID4gdXNlIEdFTk1BU0s/ICAKCk9rCgo+ID4+ ICsjZGVmaW5lICAgUExMX1JFRl9ESVZfNQkJCQkweDUKPiA+PiArI2RlZmluZSAgIFBMTF9GQl9E SVZfT0ZGCQkJMTYKPiA+PiArI2RlZmluZSAgIFBMTF9GQl9ESVZfTUFTSwkJCSgweDFGRiA8PCBQ TExfRkJfRElWX09GRikKPiA+PiArI2RlZmluZSAgIFBMTF9GQl9ESVZfOTYJCQkJOTYKPiA+PiAr I2RlZmluZSAgIFBMTF9TRUxfTFBGUl9PRkYJCQkyOAo+ID4+ICsjZGVmaW5lICAgUExMX1NFTF9M UEZSX01BU0sJCQkoMHgzIDw8IFBMTF9TRUxfTFBGUl9PRkYpCj4gPj4gKyNkZWZpbmUgICBQTExf UkVBRFkJCQkJQklUKDMxKQo+ID4+ICsjZGVmaW5lIFVTQjJfUEhZX0NBTF9DVFJMCQkJMHg4Cj4g Pj4gKyNkZWZpbmUgICBQSFlfUExMQ0FMX0RPTkUJCQlCSVQoMzEpCj4gPj4gKyNkZWZpbmUgICBQ SFlfSU1QQ0FMX0RPTkUJCQlCSVQoMjMpCj4gPj4gKyNkZWZpbmUgVVNCMl9SWF9DSEFOX0NUUkwx CQkJMHgxOAo+ID4+ICsjZGVmaW5lICAgVVNCMlBIWV9TUUNBTF9ET05FCQkJQklUKDMxKQo+ID4+ ICsjZGVmaW5lIFVTQjJfUEhZX09UR19DVFJMCQkJMHgzNAo+ID4+ICsjZGVmaW5lICAgUEhZX1BV X09URwkJCQlCSVQoNCkKPiA+PiArI2RlZmluZSBVU0IyX1BIWV9DSFJHUl9ERVRFQ1QJCQkweDM4 Cj4gPj4gKyNkZWZpbmUgICBQSFlfQ0RQX0VOCQkJCUJJVCgyKQo+ID4+ICsjZGVmaW5lICAgUEhZ X0RDUF9FTgkJCQlCSVQoMykKPiA+PiArI2RlZmluZSAgIFBIWV9QRF9FTgkJCQlCSVQoNCkKPiA+ PiArI2RlZmluZSAgIFBIWV9QVV9DSFJHX0RUQwkJCUJJVCg1KQo+ID4+ICsjZGVmaW5lICAgUEhZ X0NEUF9ETV9BVVRPCQkJQklUKDcpCj4gPj4gKyNkZWZpbmUgICBQSFlfRU5TV0lUQ0hfRFAJCQlC SVQoMTIpCj4gPj4gKyNkZWZpbmUgICBQSFlfRU5TV0lUQ0hfRE0JCQlCSVQoMTMpCj4gPj4gKwo+ ID4+ICsvKiBBcm1hZGEgMzcwMCBVU0IgbWlzY2VsbGFuZW91cyByZWdpc3RlcnMgKi8KPiA+PiAr I2RlZmluZSBVU0IyX1BIWV9DVFJMKHVzYjMyKQkJCSh1c2IzMiA/IDB4MjAgOiAweDQpCj4gPj4g KyNkZWZpbmUgICBSQl9VU0IyUEhZX1BVCQkJCUJJVCgwKQo+ID4+ICsjZGVmaW5lICAgVVNCMl9E UF9QVUxMRE5fREVWX01PREUJCUJJVCg1KQo+ID4+ICsjZGVmaW5lICAgVVNCMl9ETV9QVUxMRE5f REVWX01PREUJCUJJVCg2KQo+ID4+ICsjZGVmaW5lICAgUkJfVVNCMlBIWV9TVVNQTSh1c2IzMikJ CSh1c2IzMiA/IEJJVCgxNCkgOiBCSVQoNykpCj4gPj4gKwo+ID4+ICsjZGVmaW5lIFBMTF9MT0NL X0RFTEFZX1VTCQkJMTAwMDAKPiA+PiArI2RlZmluZSBQTExfTE9DS19USU1FT1VUX1VTCQkJMTAw MDAwMAo+ID4+ICsKPiA+PiArLyoqCj4gPj4gKyAqIHN0cnVjdCBtdmVidV9hMzcwMF91dG1pX2Nh cHMgLSBQSFkgY2FwYWJpbGl0aWVzCj4gPj4gKyAqCj4gPj4gKyAqIEB1c2IzMjogRmxhZyBpbmRp Y2F0aW5nIHdoaWNoIFBIWSBpcyBpbiB1c2UgKGltcGFjdHMgdGhlIHJlZ2lzdGVyIG1hcCk6Cj4g Pj4gKyAqICAgICAgICAgICAtIFRoZSBVVE1JIFBIWSB3aXJlZCB0byB0aGUgVVNCMy9VU0IyIGNv bnRyb2xsZXIgKG90ZykKPiA+PiArICogICAgICAgICAgIC0gVGhlIFVUTUkgUEhZIHdpcmVkIHRv IHRoZSBVU0IyIGNvbnRyb2xsZXIgKGhvc3Qgb25seSkKPiA+PiArICogQG9wczogUEhZIG9wZXJh dGlvbnMKPiA+PiArICovCj4gPj4gK3N0cnVjdCBtdmVidV9hMzcwMF91dG1pX2NhcHMgewo+ID4+ ICsJaW50IHVzYjMyOwo+ID4+ICsJY29uc3Qgc3RydWN0IHBoeV9vcHMgKm9wczsKPiA+PiArfTsK PiA+PiArCj4gPj4gKy8qKgo+ID4+ICsgKiBzdHJ1Y3QgbXZlYnVfYTM3MDBfdXRtaSAtIFBIWSBk cml2ZXIgZGF0YQo+ID4+ICsgKgo+ID4+ICsgKiBAcmVnczogUEhZIHJlZ2lzdGVycwo+ID4+ICsg KiBAdXNiX21pczogUmVnbWFwIHdpdGggVVNCIG1pc2NlbGxhbmVvdXMgcmVnaXN0ZXJzIGluY2x1 ZGluZyBQSFkgb25lcwo+ID4+ICsgKiBAY2FwczogUEhZIGNhcGFiaWxpdGllcwo+ID4+ICsgKiBA cGh5OiBQSFkgaGFuZGxlCj4gPj4gKyAqLwo+ID4+ICtzdHJ1Y3QgbXZlYnVfYTM3MDBfdXRtaSB7 Cj4gPj4gKwl2b2lkIF9faW9tZW0gKnJlZ3M7Cj4gPj4gKwlzdHJ1Y3QgcmVnbWFwICp1c2JfbWlz YzsKPiA+PiArCWNvbnN0IHN0cnVjdCBtdmVidV9hMzcwMF91dG1pX2NhcHMgKmNhcHM7Cj4gPj4g KwlzdHJ1Y3QgcGh5ICpwaHk7Cj4gPj4gK307Cj4gPj4gKwo+ID4+ICtzdGF0aWMgaW50IG12ZWJ1 X2EzNzAwX3V0bWlfcGh5X3Bvd2VyX29uKHN0cnVjdCBwaHkgKnBoeSkKPiA+PiArewo+ID4+ICsJ c3RydWN0IG12ZWJ1X2EzNzAwX3V0bWkgKnV0bWkgPSBwaHlfZ2V0X2RydmRhdGEocGh5KTsKPiA+ PiArCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZwaHktPmRldjsKPiA+PiArCWludCB1c2IzMiA9IHV0 bWktPmNhcHMtPnVzYjMyOwo+ID4+ICsJaW50IHJldCA9IDA7Cj4gPj4gKwl1MzIgcmVnOwo+ID4+ ICsKPiA+PiArCWlmICghdXRtaSkKPiA+PiArCQlyZXR1cm4gLUVOT0RFVjsgIAo+ID4gdGhlIGNo ZWNrIGhlcmUgbWF5IGJlIG5vdCBuZWNlc3NhcnkgIAo+IAo+IHJpZ2h0LiB1dG1pIGlzIGFscmVh ZHkgcmVmZXJlbmNlZCBhYm92ZS4KClJlbW92ZWQuCgo+ID4+ICsKPiA+PiArCS8qCj4gPj4gKwkg KiBTZXR1cCBQTEwuIDQwTUh6IGNsb2NrIHVzZWQgdG8gYmUgdGhlIGRlZmF1bHQsIGJlaW4gMjVN SHogbm93Lgo+ID4+ICsJICogU2VlICJQTEwgU2V0dGluZ3MgZm9yIFR5cGljYWwgUkVGQ0xLIiB0 YWJsZS4KPiA+PiArCSAqLwo+ID4+ICsJcmVnID0gcmVhZGwodXRtaS0+cmVncyArIFVTQjJfUEhZ X1BMTF9DVFJMX1JFRzApOwo+ID4+ICsJcmVnICY9IH4oUExMX1JFRl9ESVZfTUFTSyB8IFBMTF9G Ql9ESVZfTUFTSyB8IFBMTF9TRUxfTFBGUl9NQVNLKTsKPiA+PiArCXJlZyB8PSAoUExMX1JFRl9E SVZfNSA8PCBQTExfUkVGX0RJVl9PRkYgfAo+ID4+ICsJCVBMTF9GQl9ESVZfOTYgPDwgUExMX0ZC X0RJVl9PRkYpOwo+ID4+ICsJd3JpdGVsKHJlZywgdXRtaS0+cmVncyArIFVTQjJfUEhZX1BMTF9D VFJMX1JFRzApOwo+ID4+ICsKPiA+PiArCS8qIEVuYWJsZSBQSFkgcHVsbCB1cCBhbmQgZGlzYWJs ZSBVU0IyIHN1c3BlbmQgKi8KPiA+PiArCXJlZ21hcF91cGRhdGVfYml0cyh1dG1pLT51c2JfbWlz YywgVVNCMl9QSFlfQ1RSTCh1c2IzMiksCj4gPj4gKwkJCSAgIFJCX1VTQjJQSFlfU1VTUE0odXNi MzIpIHwgUkJfVVNCMlBIWV9QVSwKPiA+PiArCQkJICAgUkJfVVNCMlBIWV9TVVNQTSh1c2IzMikg fCBSQl9VU0IyUEhZX1BVKTsKPiA+PiArCj4gPj4gKwlpZiAodXNiMzIpIHsKPiA+PiArCQkvKiBQ b3dlciB1cCBPVEcgbW9kdWxlICovCj4gPj4gKwkJcmVnID0gcmVhZGwodXRtaS0+cmVncyArIFVT QjJfUEhZX09UR19DVFJMKTsKPiA+PiArCQlyZWcgfD0gUEhZX1BVX09URzsKPiA+PiArCQl3cml0 ZWwocmVnLCB1dG1pLT5yZWdzICsgVVNCMl9QSFlfT1RHX0NUUkwpOwo+ID4+ICsKPiA+PiArCQkv KiBEaXNhYmxlIFBIWSBjaGFyZ2VyIGRldGVjdGlvbiAqLwo+ID4+ICsJCXJlZyA9IHJlYWRsKHV0 bWktPnJlZ3MgKyBVU0IyX1BIWV9DSFJHUl9ERVRFQ1QpOwo+ID4+ICsJCXJlZyAmPSB+KFBIWV9D RFBfRU4gfCBQSFlfRENQX0VOIHwgUEhZX1BEX0VOIHwgUEhZX1BVX0NIUkdfRFRDIHwKPiA+PiAr CQkJIFBIWV9DRFBfRE1fQVVUTyB8IFBIWV9FTlNXSVRDSF9EUCB8IFBIWV9FTlNXSVRDSF9ETSk7 Cj4gPj4gKwkJd3JpdGVsKHJlZywgdXRtaS0+cmVncyArIFVTQjJfUEhZX0NIUkdSX0RFVEVDVCk7 Cj4gPj4gKwo+ID4+ICsJCS8qIERpc2FibGUgUEhZIERQL0RNIHB1bGwtZG93biAodXNlZCBmb3Ig ZGV2aWNlIG1vZGUpICovCj4gPj4gKwkJcmVnbWFwX3VwZGF0ZV9iaXRzKHV0bWktPnVzYl9taXNj LCBVU0IyX1BIWV9DVFJMKHVzYjMyKSwKPiA+PiArCQkJCSAgIFVTQjJfRFBfUFVMTEROX0RFVl9N T0RFIHwKPiA+PiArCQkJCSAgIFVTQjJfRE1fUFVMTEROX0RFVl9NT0RFLCAwKTsKPiA+PiArCX0K PiA+PiArCj4gPj4gKwkvKiBXYWl0IGZvciBQTEwgY2FsaWJyYXRpb24gKi8KPiA+PiArCXJldCA9 IHJlYWRsX3BvbGxfdGltZW91dCh1dG1pLT5yZWdzICsgVVNCMl9QSFlfQ0FMX0NUUkwsIHJlZywK PiA+PiArCQkJCSByZWcgJiBQSFlfUExMQ0FMX0RPTkUsCj4gPj4gKwkJCQkgUExMX0xPQ0tfREVM QVlfVVMsIFBMTF9MT0NLX1RJTUVPVVRfVVMpOwo+ID4+ICsJaWYgKHJldCkgewo+ID4+ICsJCWRl dl9lcnIoZGV2LCAiRmFpbGVkIHRvIGVuZCBVU0IyIFBMTCBjYWxpYnJhdGlvblxuIik7Cj4gPj4g KwkJcmV0dXJuIHJldDsKPiA+PiArCX0KPiA+PiArCj4gPj4gKwkvKiBXYWl0IGZvciBpbXBlZGFu Y2UgY2FsaWJyYXRpb24gKi8KPiA+PiArCXJldCA9IHJlYWRsX3BvbGxfdGltZW91dCh1dG1pLT5y ZWdzICsgVVNCMl9QSFlfQ0FMX0NUUkwsIHJlZywKPiA+PiArCQkJCSByZWcgJiBQSFlfSU1QQ0FM X0RPTkUsCj4gPj4gKwkJCQkgUExMX0xPQ0tfREVMQVlfVVMsIFBMTF9MT0NLX1RJTUVPVVRfVVMp Owo+ID4+ICsJaWYgKHJldCkgewo+ID4+ICsJCWRldl9lcnIoZGV2LCAiRmFpbGVkIHRvIGVuZCBV U0IyIGltcGVkYW5jZSBjYWxpYnJhdGlvblxuIik7Cj4gPj4gKwkJcmV0dXJuIHJldDsKPiA+PiAr CX0KPiA+PiArCj4gPj4gKwkvKiBXYWl0IGZvciBzcXVldGNoIGNhbGlicmF0aW9uICovCj4gPj4g KwlyZXQgPSByZWFkbF9wb2xsX3RpbWVvdXQodXRtaS0+cmVncyArIFVTQjJfUlhfQ0hBTl9DVFJM MSwgcmVnLAo+ID4+ICsJCQkJIHJlZyAmIFVTQjJQSFlfU1FDQUxfRE9ORSwKPiA+PiArCQkJCSBQ TExfTE9DS19ERUxBWV9VUywgUExMX0xPQ0tfVElNRU9VVF9VUyk7Cj4gPj4gKwlpZiAocmV0KSB7 Cj4gPj4gKwkJZGV2X2VycihkZXYsICJGYWlsZWQgdG8gZW5kIFVTQjIgdW5rbm93biBjYWxpYnJh dGlvblxuIik7Cj4gPj4gKwkJcmV0dXJuIHJldDsKPiA+PiArCX0KPiA+PiArCj4gPj4gKwkvKiBX YWl0IGZvciBQTEwgdG8gYmUgbG9ja2VkICovCj4gPj4gKwlyZXQgPSByZWFkbF9wb2xsX3RpbWVv dXQodXRtaS0+cmVncyArIFVTQjJfUEhZX1BMTF9DVFJMX1JFRzAsIHJlZywKPiA+PiArCQkJCSBy ZWcgJiBQTExfUkVBRFksCj4gPj4gKwkJCQkgUExMX0xPQ0tfREVMQVlfVVMsIFBMTF9MT0NLX1RJ TUVPVVRfVVMpOwo+ID4+ICsJaWYgKHJldCkKPiA+PiArCQlkZXZfZXJyKGRldiwgIkZhaWxlZCB0 byBsb2NrIFVTQjIgUExMXG4iKTsKPiA+PiArCj4gPj4gKwlyZXR1cm4gcmV0Owo+ID4+ICt9Cj4g Pj4gKwo+ID4+ICtzdGF0aWMgaW50IG12ZWJ1X2EzNzAwX3V0bWlfcGh5X3Bvd2VyX29mZihzdHJ1 Y3QgcGh5ICpwaHkpCj4gPj4gK3sKPiA+PiArCXN0cnVjdCBtdmVidV9hMzcwMF91dG1pICp1dG1p ID0gcGh5X2dldF9kcnZkYXRhKHBoeSk7Cj4gPj4gKwlpbnQgdXNiMzIgPSB1dG1pLT5jYXBzLT51 c2IzMjsKPiA+PiArCXUzMiByZWc7Cj4gPj4gKwo+ID4+ICsJaWYgKCF1dG1pKQo+ID4+ICsJCXJl dHVybiAtRU5PREVWOyAgCj4gCj4gaGVyZSB0b28sIHV0bWkgaXMgcmVmZXJlbmNlZCBhYm92ZS4K ClJlbW92ZWQgdG9vLgoKPiA+PiArCj4gPj4gKwkvKiBEaXNhYmxlIFBIWSBwdWxsLXVwIGFuZCBl bmFibGUgVVNCMiBzdXNwZW5kICovCj4gPj4gKwlyZWcgPSByZWFkbCh1dG1pLT5yZWdzICsgVVNC Ml9QSFlfQ1RSTCh1c2IzMikpOwo+ID4+ICsJcmVnICY9IH4oUkJfVVNCMlBIWV9QVSB8IFJCX1VT QjJQSFlfU1VTUE0odXNiMzIpKTsKPiA+PiArCXdyaXRlbChyZWcsIHV0bWktPnJlZ3MgKyBVU0Iy X1BIWV9DVFJMKHVzYjMyKSk7Cj4gPj4gKwo+ID4+ICsJLyogUG93ZXIgZG93biBPVEcgbW9kdWxl ICovCj4gPj4gKwlpZiAodXNiMzIpIHsKPiA+PiArCQlyZWcgPSByZWFkbCh1dG1pLT5yZWdzICsg VVNCMl9QSFlfT1RHX0NUUkwpOwo+ID4+ICsJCXJlZyAmPSB+UEhZX1BVX09URzsKPiA+PiArCQl3 cml0ZWwocmVnLCB1dG1pLT5yZWdzICsgVVNCMl9QSFlfT1RHX0NUUkwpOwo+ID4+ICsJfQo+ID4+ ICsKPiA+PiArCXJldHVybiAwOwo+ID4+ICt9Cj4gPj4gKwo+ID4+ICtzdGF0aWMgY29uc3Qgc3Ry dWN0IHBoeV9vcHMgbXZlYnVfYTM3MDBfdXRtaV9waHlfb3BzID0gewo+ID4+ICsJLnBvd2VyX29u ID0gbXZlYnVfYTM3MDBfdXRtaV9waHlfcG93ZXJfb24sCj4gPj4gKwkucG93ZXJfb2ZmID0gbXZl YnVfYTM3MDBfdXRtaV9waHlfcG93ZXJfb2ZmLAo+ID4+ICsJLm93bmVyID0gVEhJU19NT0RVTEUs Cj4gPj4gK307Cj4gPj4gKwo+ID4+ICtzdGF0aWMgY29uc3Qgc3RydWN0IG12ZWJ1X2EzNzAwX3V0 bWlfY2FwcyBtdmVidV9hMzcwMF91dG1pX290Z19waHlfY2FwcyA9IHsKPiA+PiArCS51c2IzMiA9 IHRydWUsCj4gPj4gKwkub3BzID0gJm12ZWJ1X2EzNzAwX3V0bWlfcGh5X29wcywKPiA+PiArfTsK PiA+PiArCj4gPj4gK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbXZlYnVfYTM3MDBfdXRtaV9jYXBzIG12 ZWJ1X2EzNzAwX3V0bWlfaG9zdF9waHlfY2FwcyA9IHsKPiA+PiArCS51c2IzMiA9IGZhbHNlLAo+ ID4+ICsJLm9wcyA9ICZtdmVidV9hMzcwMF91dG1pX3BoeV9vcHMsCj4gPj4gK307Cj4gPj4gKwo+ ID4+ICtzdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCBtdmVidV9hMzcwMF91dG1pX29m X21hdGNoW10gPSB7Cj4gPj4gKwl7Cj4gPj4gKwkJLmNvbXBhdGlibGUgPSAibWFydmVsbCxhMzcw MC11dG1pLW90Zy1waHkiLAo+ID4+ICsJCS5kYXRhID0gJm12ZWJ1X2EzNzAwX3V0bWlfb3RnX3Bo eV9jYXBzLAo+ID4+ICsJfSwKPiA+PiArCXsKPiA+PiArCQkuY29tcGF0aWJsZSA9ICJtYXJ2ZWxs LGEzNzAwLXV0bWktaG9zdC1waHkiLAo+ID4+ICsJCS5kYXRhID0gJm12ZWJ1X2EzNzAwX3V0bWlf aG9zdF9waHlfY2FwcywKPiA+PiArCX0sCj4gPj4gKwl7fSwKPiA+PiArfTsKPiA+PiArTU9EVUxF X0RFVklDRV9UQUJMRShvZiwgbXZlYnVfYTM3MDBfdXRtaV9vZl9tYXRjaCk7Cj4gPj4gKwo+ID4+ ICtzdGF0aWMgaW50IG12ZWJ1X2EzNzAwX3V0bWlfcGh5X3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9k ZXZpY2UgKnBkZXYpCj4gPj4gK3sKPiA+PiArCWNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgKmRl dl9pZDsKPiA+PiArCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZwZGV2LT5kZXY7Cj4gPj4gKwlzdHJ1 Y3QgbXZlYnVfYTM3MDBfdXRtaSAqdXRtaTsKPiA+PiArCXN0cnVjdCBwaHlfcHJvdmlkZXIgKnBy b3ZpZGVyOwo+ID4+ICsJY29uc3Qgc3RydWN0IHBoeV9vcHMgKm9wczsKPiA+PiArCXN0cnVjdCBy ZXNvdXJjZSAqcmVzOwo+ID4+ICsKPiA+PiArCXV0bWkgPSBkZXZtX2t6YWxsb2MoZGV2LCBzaXpl b2YoKnV0bWkpLCBHRlBfS0VSTkVMKTsKPiA+PiArCWlmICghdXRtaSkKPiA+PiArCQlyZXR1cm4g LUVOT01FTTsKPiA+PiArCj4gPj4gKwkvKiBHZXQgVVRNSSBtZW1vcnkgcmVnaW9uICovCj4gPj4g KwlyZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9NRU0sIDApOwo+ ID4+ICsJaWYgKCFyZXMpIHsKPiA+PiArCQlkZXZfZXJyKGRldiwgIk1pc3NpbmcgVVRNSSBQSFkg bWVtb3J5IHJlc291cmNlXG4iKTsKPiA+PiArCQlyZXR1cm4gLUVOT0RFVjsKPiA+PiArCX0KPiA+ PiArCj4gPj4gKwl1dG1pLT5yZWdzID0gZGV2bV9pb3JlbWFwX3Jlc291cmNlKGRldiwgcmVzKTsK PiA+PiArCWlmIChJU19FUlIodXRtaS0+cmVncykpCj4gPj4gKwkJcmV0dXJuIFBUUl9FUlIodXRt aS0+cmVncyk7Cj4gPj4gKwo+ID4+ICsJLyogR2V0IG1pc2NlbGxhbmVvdXMgSG9zdC9QSFkgcmVn aW9uICovCj4gPj4gKwl1dG1pLT51c2JfbWlzYyA9IHN5c2Nvbl9yZWdtYXBfbG9va3VwX2J5X3Bo YW5kbGUoZGV2LT5vZl9ub2RlLAo+ID4+ICsJCQkJCQkJICJtYXJ2ZWxsLHVzYi1taXNjLXJlZyIp Owo+ID4+ICsJaWYgKElTX0VSUih1dG1pLT51c2JfbWlzYykpIHsKPiA+PiArCQlkZXZfZXJyKGRl diwKPiA+PiArCQkJIk1pc3NpbmcgVVNCIG1pc2MgcHVycG9zZSBzeXN0ZW0gY29udHJvbGxlclxu Iik7Cj4gPj4gKwkJcmV0dXJuIFBUUl9FUlIodXRtaS0+dXNiX21pc2MpOwo+ID4+ICsJfQo+ID4+ ICsKPiA+PiArCS8qIFJldHJpZXZlIFBIWSBjYXBhYmlsaXRpZXMgKi8KPiA+PiArCWRldl9pZCA9 IG9mX21hdGNoX2RldmljZShtdmVidV9hMzcwMF91dG1pX29mX21hdGNoLCBkZXYpOwo+ID4+ICsJ aWYgKCFkZXZfaWQpCj4gPj4gKwkJcmV0dXJuIC1FSU5WQUw7Cj4gPj4gKwo+ID4+ICsJdXRtaS0+ Y2FwcyA9IGRldl9pZC0+ZGF0YTsgIAo+ID4gYSB1c2VmdWwgQVBJIHRvIGdldCBAZGF0YTogb2Zf ZGV2aWNlX2dldF9tYXRjaF9kYXRhKCkKCk5pY2Ugb25lLCBJIGZvcmdvdCBhYm91dCBpdC4KCj4g PiAgIAo+ID4+ICsJb3BzID0gdXRtaS0+Y2Fwcy0+b3BzOwo+ID4+ICsKPiA+PiArCS8qIEluc3Rh bnRpYXRlIHRoZSBQSFkgKi8KPiA+PiArCXV0bWktPnBoeSA9IGRldm1fcGh5X2NyZWF0ZShkZXYs IE5VTEwsIG9wcyk7Cj4gPj4gKwlpZiAoSVNfRVJSKHV0bWktPnBoeSkpIHsKPiA+PiArCQlkZXZf ZXJyKGRldiwgIkZhaWxlZCB0byBjcmVhdGUgdGhlIFVUTUkgUEhZXG4iKTsKPiA+PiArCQlyZXR1 cm4gUFRSX0VSUih1dG1pLT5waHkpOwo+ID4+ICsJfQo+ID4+ICsKPiA+PiArCXBoeV9zZXRfZHJ2 ZGF0YSh1dG1pLT5waHksIHV0bWkpOwo+ID4+ICsKPiA+PiArCS8qIEVuc3VyZSB0aGUgUEhZIGlz IHBvd2VyZWQgb2ZmICovCj4gPj4gKwlvcHMtPnBvd2VyX29mZih1dG1pLT5waHkpOwo+ID4+ICsK PiA+PiArCXByb3ZpZGVyID0gZGV2bV9vZl9waHlfcHJvdmlkZXJfcmVnaXN0ZXIoZGV2LCBvZl9w aHlfc2ltcGxlX3hsYXRlKTsKPiA+PiArCj4gPj4gKwlyZXR1cm4gUFRSX0VSUl9PUl9aRVJPKHBy b3ZpZGVyKTsKPiA+PiArfQo+ID4+ICsKPiA+PiArc3RhdGljIGludCBtdmVidV9hMzcwMF91dG1p X3BoeV9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKPiA+PiArewo+ID4+ICsJ cmV0dXJuIDA7Cj4gPj4gK30gIAo+IAo+IFRoaXMgZW1wdHkgcmVtb3ZlIGZ1bmN0aW9uIGNhbiBi ZSByZW1vdmVkLgoKU3VyZS4KCj4gCj4gVGhhbmtzCj4gS2lzaG9uCj4gCj4gPj4gKwo+ID4+ICtz dGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBtdmVidV9hMzcwMF91dG1pX2RyaXZlciA9IHsK PiA+PiArCS5wcm9iZQk9IG12ZWJ1X2EzNzAwX3V0bWlfcGh5X3Byb2JlLAo+ID4+ICsJLnJlbW92 ZSA9IG12ZWJ1X2EzNzAwX3V0bWlfcGh5X3JlbW92ZSwKPiA+PiArCS5kcml2ZXIJPSB7Cj4gPj4g KwkJLm5hbWUJCT0gIm12ZWJ1LWEzNzAwLXV0bWktcGh5IiwKPiA+PiArCQkub3duZXIJCT0gVEhJ U19NT0RVTEUsCj4gPj4gKwkJLm9mX21hdGNoX3RhYmxlCT0gbXZlYnVfYTM3MDBfdXRtaV9vZl9t YXRjaCwKPiA+PiArCSB9LAo+ID4+ICt9Owo+ID4+ICttb2R1bGVfcGxhdGZvcm1fZHJpdmVyKG12 ZWJ1X2EzNzAwX3V0bWlfZHJpdmVyKTsKPiA+PiArCj4gPj4gK01PRFVMRV9BVVRIT1IoIkV2YW4g V2FuZyA8eHN3YW5nQG1hcnZlbGwuY29tPiIpOwo+ID4+ICtNT0RVTEVfQVVUSE9SKCJNaXF1ZWwg UmF5bmFsIDxtaXF1ZWwucmF5bmFsQGJvb3RsaW4uY29tPiIpOwo+ID4+ICtNT0RVTEVfREVTQ1JJ UFRJT04oIk1hcnZlbGwgRUJVIEEzNzAwIFVUTUkgUEhZIGRyaXZlciIpOwo+ID4+ICtNT0RVTEVf TElDRU5TRSgiR1BMIik7ICAKPiA+IAo+ID4gICAKClRoYW5rcyBmb3IgcmV2aWV3aW5nIQpNaXF1 w6hsCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpsaW51 eC1hcm0ta2VybmVsIG1haWxpbmcgbGlzdApsaW51eC1hcm0ta2VybmVsQGxpc3RzLmluZnJhZGVh ZC5vcmcKaHR0cDovL2xpc3RzLmluZnJhZGVhZC5vcmcvbWFpbG1hbi9saXN0aW5mby9saW51eC1h cm0ta2VybmVsCg==