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: [v2,8/8] usb: dwc3: Add Amlogic G12A DWC3 glue From: Chunfeng Yun Message-Id: <1551924176.2210.104.camel@mhfsdcap03> Date: Thu, 7 Mar 2019 10:02:56 +0800 To: Neil Armstrong Cc: gregkh@linuxfoundation.org, hminas@synopsys.com, balbi@kernel.org, kishon@ti.com, linux-amlogic@lists.infradead.org, linux-usb@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org List-ID: SGksCk9uIE1vbiwgMjAxOS0wMy0wNCBhdCAxMTozOCArMDEwMCwgTmVpbCBBcm1zdHJvbmcgd3Jv dGU6Cj4gQWRkcyBzdXBwb3J0IGZvciBBbWxvZ2ljIEcxMkEgVVNCIENvbnRyb2wgR2x1ZSBIVy4K PiAKPiBUaGUgQW1sb2dpYyBHMTJBIFNvQyBGYW1pbHkgZW1iZWRzIDIgVVNCIENvbnRyb2xsZXJz IDoKPiAtIGEgRFdDMyBJUCBjb25maWd1cmVkIGFzIEhvc3QgZm9yIFVTQjIgYW5kIFVTQjMKPiAt IGEgRFdDMiBJUCBjb25maWd1cmVkIGFzIFBlcmlwaGVyYWwgVVNCMiBPbmx5Cj4gCj4gQSBnbHVl IGNvbm5lY3RzIHRoZXNlIGJvdGggY29udHJvbGxlcnMgdG8gMiBVU0IyIFBIWXMsIGFuZCBvcHRp b25uYWxseQo+IHRvIGFuIFVTQjMrUENJRSBDb21ibyBQSFkgc2hhcmVkIHdpdGggdGhlIFBDSUUg Y29udHJvbGxlci4KPiAKPiBUaGUgR2x1ZSBjb25maWd1cmVzIHRoZSBVVE1JIDhiaXQgaW50ZXJm YWNlcyBmb3IgdGhlIFVTQjIgUEhZcywgaW5jbHVkaW5nCj4gcm91dGluZyBvZiB0aGUgT1RHIFBI WSBiZXR3ZWVuIHRoZSBEV0MzIGFuZCBEV0MyIGNvbnRyb2xsZXJzLCBhbmQKPiBzZXR1cHMgdGhl IG9uLWNoaXAgT1RHIG1vZGUgc2VsZWN0aW9uIGZvciB0aGlzIFBIWS4KPiAKPiBUaGlzIGRyaXZl cnMgc3VwcG9ydHMgdGhlIG9uLXByb2JlIHNldHVwIG9mIHRoZSBPVEcgbW9kZSwgYW5kIG1hbnVh bGx5Cj4gdmlhIGEgZGVidWdmcyBpbnRlcmZhY2UuIFRoZSBJUlEgbW9kZSBjaGFuZ2UgZGV0ZWN0 IGlzIHlldCB0byBiZSBhZGRlZAo+IGluIGEgZnV0dXJlIHBhdGNoc2V0LCBtYWlubHkgZHVlIHRv IGxhY2sgb2YgaGFyZHdhcmUgdG8gdmFsaWRhdGUgb24uCj4gCj4gU2lnbmVkLW9mZi1ieTogTmVp bCBBcm1zdHJvbmcgPG5hcm1zdHJvbmdAYmF5bGlicmUuY29tPgo+IC0tLQo+ICBkcml2ZXJzL3Vz Yi9kd2MzL0tjb25maWcgICAgICAgICAgIHwgIDEwICsKPiAgZHJpdmVycy91c2IvZHdjMy9NYWtl ZmlsZSAgICAgICAgICB8ICAgMSArCj4gIGRyaXZlcnMvdXNiL2R3YzMvZHdjMy1tZXNvbi1nMTJh LmMgfCA2MDEgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKPiAgMyBmaWxlcyBjaGFuZ2Vk LCA2MTIgaW5zZXJ0aW9ucygrKQo+ICBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy91c2IvZHdj My9kd2MzLW1lc29uLWcxMmEuYwo+IAo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9kd2MzL0tj b25maWcgYi9kcml2ZXJzL3VzYi9kd2MzL0tjb25maWcKPiBpbmRleCAxYTA0MDRmZGE1OTYuLjIx Y2U3MzY4ZDMyNSAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL3VzYi9kd2MzL0tjb25maWcKPiArKysg Yi9kcml2ZXJzL3VzYi9kd2MzL0tjb25maWcKPiBAQCAtOTMsNiArOTMsMTYgQEAgY29uZmlnIFVT Ql9EV0MzX0tFWVNUT05FCj4gIAkgIFN1cHBvcnQgb2YgVVNCMi8zIGZ1bmN0aW9uYWxpdHkgaW4g VEkgS2V5c3RvbmUyIHBsYXRmb3Jtcy4KPiAgCSAgU2F5ICdZJyBvciAnTScgaGVyZSBpZiB5b3Ug aGF2ZSBvbmUgc3VjaCBkZXZpY2UKPiAgCj4gK2NvbmZpZyBVU0JfRFdDM19NRVNPTl9HMTJBCj4g KyAgICAgICB0cmlzdGF0ZSAiQW1sb2dpYyBNZXNvbiBHMTJBIFBsYXRmb3JtcyIKPiArICAgICAg IGRlcGVuZHMgb24gT0YgJiYgQ09NTU9OX0NMSwo+ICsgICAgICAgZGVwZW5kcyBvbiBBUkNIX01F U09OIHx8IENPTVBJTEVfVEVTVAo+ICsgICAgICAgZGVmYXVsdCBVU0JfRFdDMwo+ICsgICAgICAg c2VsZWN0IFVTQl9ST0xFX1NXSVRDSAo+ICsgICAgICAgaGVscAo+ICsgICAgICAgICBTdXBwb3J0 IFVTQjIvMyBmdW5jdGlvbmFsaXR5IGluIEFtbG9naWMgRzEyQSBwbGF0Zm9ybXMuCj4gKwkgU2F5 ICdZJyBvciAnTScgaWYgeW91IGhhdmUgb25lIHN1Y2ggZGV2aWNlLgo+ICsKPiAgY29uZmlnIFVT Ql9EV0MzX09GX1NJTVBMRQo+ICAgICAgICAgdHJpc3RhdGUgIkdlbmVyaWMgT0YgU2ltcGxlIEds dWUgTGF5ZXIiCj4gICAgICAgICBkZXBlbmRzIG9uIE9GICYmIENPTU1PTl9DTEsKPiBkaWZmIC0t Z2l0IGEvZHJpdmVycy91c2IvZHdjMy9NYWtlZmlsZSBiL2RyaXZlcnMvdXNiL2R3YzMvTWFrZWZp bGUKPiBpbmRleCA2ZTNlZjYxNDRlNWQuLmFlODZkYTBkYzViZCAxMDA2NDQKPiAtLS0gYS9kcml2 ZXJzL3VzYi9kd2MzL01ha2VmaWxlCj4gKysrIGIvZHJpdmVycy91c2IvZHdjMy9NYWtlZmlsZQo+ IEBAIC00Nyw2ICs0Nyw3IEBAIG9iai0kKENPTkZJR19VU0JfRFdDM19FWFlOT1MpCQkrPSBkd2Mz LWV4eW5vcy5vCj4gIG9iai0kKENPTkZJR19VU0JfRFdDM19QQ0kpCQkrPSBkd2MzLXBjaS5vCj4g IG9iai0kKENPTkZJR19VU0JfRFdDM19IQVBTKQkJKz0gZHdjMy1oYXBzLm8KPiAgb2JqLSQoQ09O RklHX1VTQl9EV0MzX0tFWVNUT05FKQkJKz0gZHdjMy1rZXlzdG9uZS5vCj4gK29iai0kKENPTkZJ R19VU0JfRFdDM19NRVNPTl9HMTJBKQkrPSBkd2MzLW1lc29uLWcxMmEubwo+ICBvYmotJChDT05G SUdfVVNCX0RXQzNfT0ZfU0lNUExFKQkrPSBkd2MzLW9mLXNpbXBsZS5vCj4gIG9iai0kKENPTkZJ R19VU0JfRFdDM19TVCkJCSs9IGR3YzMtc3Qubwo+ICBvYmotJChDT05GSUdfVVNCX0RXQzNfUUNP TSkJCSs9IGR3YzMtcWNvbS5vCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2R3YzMvZHdjMy1t ZXNvbi1nMTJhLmMgYi9kcml2ZXJzL3VzYi9kd2MzL2R3YzMtbWVzb24tZzEyYS5jCj4gbmV3IGZp bGUgbW9kZSAxMDA2NDQKPiBpbmRleCAwMDAwMDAwMDAwMDAuLjc1OTQyNjE0YTAzNAo+IC0tLSAv ZGV2L251bGwKPiArKysgYi9kcml2ZXJzL3VzYi9kd2MzL2R3YzMtbWVzb24tZzEyYS5jCj4gQEAg LTAsMCArMSw2MDEgQEAKPiArLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAKPiAr LyoKPiArICogVVNCIEdsdWUgZm9yIEFtbG9naWMgRzEyQSBTb0NzCj4gKyAqCj4gKyAqIENvcHly aWdodCAoYykgMjAxOSBCYXlMaWJyZSwgU0FTCj4gKyAqIEF1dGhvcjogTmVpbCBBcm1zdHJvbmcg PG5hcm1zdHJvbmdAYmF5bGlicmUuY29tPgo+ICsgKi8KPiArCj4gKy8qCj4gKyAqIFRoZSBVU0Ig aXMgb3JnYW5pemVkIHdpdGggYSBnbHVlIGFyb3VuZCB0aGUgRFdDMyBDb250cm9sbGVyIElQIGFz IDoKPiArICogLSBDb250cm9sIHJlZ2lzdGVycyBmb3IgZWFjaCBVU0IyIFBvcnRzCj4gKyAqIC0g Q29udHJvbCByZWdpc3RlcnMgZm9yIHRoZSBVU0IgUEhZIGxheWVyCj4gKyAqIC0gU3VwZXJTcGVl ZCBQSFkgY2FuIGJlIGVuYWJsZWQgb25seSBpZiBwb3J0IGlzIHVzZWQKPiArICoKPiArICogVE9G SVg6Cj4gKyAqIC0gQWRkIGR5bmFtaWMgT1RHIHN3aXRjaGluZyB3aXRoIElEIGNoYW5nZSBpbnRl cnJ1cHQKPiArICovCj4gKwpbLi4uXQo+ICsKPiArc3RhdGljIGludCBkd2MzX21lc29uX2cxMmFf cHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKPiArewo+ICsJc3RydWN0IGR3YzNf bWVzb25fZzEyYQkqcHJpdjsKPiArCXN0cnVjdCBkZXZpY2UJCSpkZXYgPSAmcGRldi0+ZGV2Owo+ ICsJc3RydWN0IGRldmljZV9ub2RlCSpucCA9IGRldi0+b2Zfbm9kZTsKPiArCXZvaWQgX19pb21l bSAqYmFzZTsKPiArCXN0cnVjdCByZXNvdXJjZSAqcmVzOwo+ICsJZW51bSBwaHlfbW9kZSBvdGdf aWQ7Cj4gKwlpbnQgcmV0LCBpOwo+ICsKPiArCXByaXYgPSBkZXZtX2t6YWxsb2MoZGV2LCBzaXpl b2YoKnByaXYpLCBHRlBfS0VSTkVMKTsKPiArCWlmICghcHJpdikKPiArCQlyZXR1cm4gLUVOT01F TTsKPiArCj4gKwlyZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9N RU0sIDApOwo+ICsJYmFzZSA9IGRldm1faW9yZW1hcF9yZXNvdXJjZShkZXYsIHJlcyk7Cj4gKwlp ZiAoSVNfRVJSKGJhc2UpKQo+ICsJCXJldHVybiBQVFJfRVJSKGJhc2UpOwo+ICsKPiArCXByaXYt PnJlZ21hcCA9IGRldm1fcmVnbWFwX2luaXRfbW1pbyhkZXYsIGJhc2UsCj4gKwkJCQkJICAgICAm cGh5X21lc29uX2cxMmFfdXNiM19yZWdtYXBfY29uZik7Cj4gKwlpZiAoSVNfRVJSKHByaXYtPnJl Z21hcCkpCj4gKwkJcmV0dXJuIFBUUl9FUlIocHJpdi0+cmVnbWFwKTsKPiArCj4gKwlwcml2LT52 YnVzID0gZGV2bV9yZWd1bGF0b3JfZ2V0X29wdGlvbmFsKGRldiwgInZidXMiKTsKPiArCWlmIChJ U19FUlIocHJpdi0+dmJ1cykpIHsKPiArCQlpZiAoUFRSX0VSUihwcml2LT52YnVzKSA9PSAtRVBS T0JFX0RFRkVSKQo+ICsJCQlyZXR1cm4gUFRSX0VSUihwcml2LT52YnVzKTsKPiArCQlwcml2LT52 YnVzID0gTlVMTDsKPiArCX0KPiArCj4gKwlwcml2LT5jbGsgPSBkZXZtX2Nsa19nZXQoZGV2LCBO VUxMKTsKPiArCWlmIChJU19FUlIocHJpdi0+Y2xrKSkKPiArCQlyZXR1cm4gUFRSX0VSUihwcml2 LT5jbGspOwo+ICsKPiArCXJldCA9IGNsa19wcmVwYXJlX2VuYWJsZShwcml2LT5jbGspOwo+ICsJ aWYgKHJldCkKPiArCQlyZXR1cm4gcmV0Owo+ICsKPiArCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBk ZXYsIHByaXYpOwo+ICsJcHJpdi0+ZGV2ID0gZGV2Owo+ICsKPiArCXByaXYtPnJlc2V0ID0gZGV2 bV9yZXNldF9jb250cm9sX2dldChkZXYsIE5VTEwpOwo+ICsJaWYgKElTX0VSUihwcml2LT5yZXNl dCkpIHsKPiArCQlyZXQgPSBQVFJfRVJSKHByaXYtPnJlc2V0KTsKPiArCQlkZXZfZXJyKGRldiwg ImZhaWxlZCB0byBnZXQgZGV2aWNlIHJlc2V0LCBlcnI9JWRcbiIsIHJldCk7Cj4gKwkJcmV0dXJu IHJldDsKPiArCX0KPiArCj4gKwlyZXQgPSByZXNldF9jb250cm9sX3Jlc2V0KHByaXYtPnJlc2V0 KTsKPiArCWlmIChyZXQpCj4gKwkJcmV0dXJuIHJldDsKPiArCj4gKwlyZXQgPSBkd2MzX21lc29u X2cxMmFfZ2V0X3BoeXMocHJpdik7Cj4gKwlpZiAocmV0KQo+ICsJCXJldHVybiByZXQ7Cj4gKwo+ ICsJcmV0ID0gcmVndWxhdG9yX2VuYWJsZShwcml2LT52YnVzKTsKPiArCWlmIChyZXQpCj4gKwkJ cmV0dXJuIHJldDsKPiArCj4gKwkvKiBHZXQgZHJfbW9kZSAqLwo+ICsJcHJpdi0+b3RnX21vZGUg PSB1c2JfZ2V0X2RyX21vZGUoZGV2KTsKPiArCj4gKwlkd2MzX21lc29uX2cxMmFfdXNiX2luaXQo cHJpdik7Cj4gKwo+ICsJLyogU2V0IFBIWSBQb3dlciAqLwo+ICsJZm9yIChpID0gMCA7IGkgPCBQ SFlfQ09VTlQgOyArK2kpIHsKPiArCQlyZXQgPSBwaHlfcG93ZXJfb24ocHJpdi0+cGh5c1tpXSk7 Cj4gKwkJaWYgKHJldCkKPiArCQkJZ290byBlcnJfcGh5c19wdXQ7Cj4gKwl9Cj4gKwo+ICsJLyog SW5pdCBQSFlzICovCj4gKwlmb3IgKGkgPSAwIDsgaSA8IFBIWV9DT1VOVCA7ICsraSkgewo+ICsJ CXJldCA9IHBoeV9pbml0KHByaXYtPnBoeXNbaV0pOwo+ICsJCWlmIChyZXQpCj4gKwkJCWdvdG8g ZXJyX3BoeXNfcG93ZXI7Cj4gKwl9CnVzdWFsbHkgcGh5X2luaXQoKSBmaXJzdAoKPiArCj4gKwly ZXQgPSBvZl9wbGF0Zm9ybV9wb3B1bGF0ZShucCwgTlVMTCwgTlVMTCwgZGV2KTsKPiArCWlmIChy ZXQpIHsKPiArCQljbGtfZGlzYWJsZV91bnByZXBhcmUocHJpdi0+Y2xrKTsKPiArCQljbGtfcHV0 KHByaXYtPmNsayk7Cj4gKwo+ICsJCWdvdG8gZXJyX3BoeXNfZXhpdDsKPiArCX0KPiArCj4gKwkv KiBTZXR1cCBPVEcgbW9kZSBjb3JyZXNwb25kaW5nIHRvIHRoZSBJRCBwaW4gKi8KPiArCWlmIChw cml2LT5vdGdfbW9kZSA9PSBVU0JfRFJfTU9ERV9PVEcpIHsKPiArCQkvKiBUT0ZJWCBIYW5kbGUg SUQgbW9kZSB0b2dnbGluZyB2aWEgSVJRICovCj4gKwkJb3RnX2lkID0gZHdjM19tZXNvbl9nMTJh X2dldF9pZChwcml2KTsKPiArCQlpZiAob3RnX2lkICE9IHByaXYtPm90Z19waHlfbW9kZSkgewo+ ICsJCQlpZiAoZHdjM19tZXNvbl9nMTJhX290Z19tb2RlX3NldChwcml2LCBvdGdfaWQpKQo+ICsJ CQkJZGV2X3dhcm4oZGV2LCAiRmFpbGVkIHRvIHN3aXRjaCBPVEcgbW9kZVxuIik7Cj4gKwkJfQo+ ICsJfQo+ICsKPiArCS8qIFNldHVwIHJvbGUgc3dpdGNoZXIgKi8KPiArCXByaXYtPnN3aXRjaF9k ZXNjLnVzYjJfcG9ydCA9IGR3YzNfbWVzb25fZzEyX2ZpbmRfY2hpbGQoZGV2LAo+ICsJCQkJCQkJ CSJzbnBzLGR3YzMiKTsKPiArCXByaXYtPnN3aXRjaF9kZXNjLnVkYyA9IGR3YzNfbWVzb25fZzEy X2ZpbmRfY2hpbGQoZGV2LCAic25wcyxkd2MyIik7Cj4gKwlwcml2LT5zd2l0Y2hfZGVzYy5hbGxv d191c2Vyc3BhY2VfY29udHJvbCA9IHRydWU7Cj4gKwlwcml2LT5zd2l0Y2hfZGVzYy5zZXQgPSBk d2MzX21lc29uX2cxMmFfcm9sZV9zZXQ7Cj4gKwlwcml2LT5zd2l0Y2hfZGVzYy5nZXQgPSBkd2Mz X21lc29uX2cxMmFfcm9sZV9nZXQ7CnRvIG1lLCB1c2UgYSBsb2NhbCB2YXJpYWJsZSBmb3Igc3dp dGNoX2Rlc2MKCj4gKwo+ICsJcHJpdi0+cm9sZV9zd2l0Y2ggPSB1c2Jfcm9sZV9zd2l0Y2hfcmVn aXN0ZXIoZGV2LCAmcHJpdi0+c3dpdGNoX2Rlc2MpOwo+ICsJaWYgKElTX0VSUihwcml2LT5yb2xl X3N3aXRjaCkpCj4gKwkJZGV2X3dhcm4oZGV2LCAiVW5hYmxlIHRvIHJlZ2lzdGVyIFJvbGUgU3dp dGNoXG4iKTsKPiArCj4gKwlwbV9ydW50aW1lX3NldF9hY3RpdmUoZGV2KTsKPiArCXBtX3J1bnRp bWVfZW5hYmxlKGRldik7Cj4gKwlwbV9ydW50aW1lX2dldF9zeW5jKGRldik7Cj4gKwo+ICsJcmV0 dXJuIDA7Cj4gKwo+ICtlcnJfcGh5c19leGl0Ogo+ICsJZm9yIChpID0gMCA7IGkgPCBQSFlfQ09V TlQgOyArK2kpCj4gKwkJcGh5X2V4aXQocHJpdi0+cGh5c1tpXSk7Cj4gKwo+ICtlcnJfcGh5c19w b3dlcjoKPiArCWZvciAoaSA9IDAgOyBpIDwgUEhZX0NPVU5UIDsgKytpKQo+ICsJCXBoeV9wb3dl cl9vZmYocHJpdi0+cGh5c1tpXSk7Cj4gKwo+ICtlcnJfcGh5c19wdXQ6Cj4gKwlmb3IgKGkgPSAw IDsgaSA8IFBIWV9DT1VOVCA7ICsraSkKPiArCQlwaHlfcHV0KHByaXYtPnBoeXNbaV0pOwo+ICsK VGhlIHBoeXMgYXJlIGdvdCBieSBkZXZtX3BoeV9vcHRpb25hbF9nZXQoKSwgbm8gbmVlZCBjYWxs IHBoeV9wdXQoKQo+ICsJcmV0dXJuIHJldDsKPiArfQo+ICsKPiArc3RhdGljIGludCBkd2MzX21l c29uX2cxMmFfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCj4gK3sKPiArCXN0 cnVjdCBkd2MzX21lc29uX2cxMmEgKnByaXYgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsK PiArCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZwZGV2LT5kZXY7Cj4gKwlpbnQgaTsKPiArCj4gKwl1 c2Jfcm9sZV9zd2l0Y2hfdW5yZWdpc3Rlcihwcml2LT5yb2xlX3N3aXRjaCk7Cj4gKwo+ICsJb2Zf cGxhdGZvcm1fZGVwb3B1bGF0ZShkZXYpOwo+ICsKPiArCWZvciAoaSA9IDAgOyBpIDwgUEhZX0NP VU5UIDsgKytpKSB7Cj4gKwkJcGh5X3Bvd2VyX29mZihwcml2LT5waHlzW2ldKTsKPiArCQlwaHlf ZXhpdChwcml2LT5waHlzW2ldKTsKPiArCQlwaHlfcHV0KHByaXYtPnBoeXNbaV0pOwpkaXR0bwo+ ICsJfQo+ICsKPiArCWNsa19kaXNhYmxlX3VucHJlcGFyZShwcml2LT5jbGspOwo+ICsJY2xrX3B1 dChwcml2LT5jbGspOwo+ICsKPiArCXBtX3J1bnRpbWVfZGlzYWJsZShkZXYpOwo+ICsJcG1fcnVu dGltZV9wdXRfbm9pZGxlKGRldik7Cj4gKwlwbV9ydW50aW1lX3NldF9zdXNwZW5kZWQoZGV2KTsK PiArCj4gKwlyZXR1cm4gMDsKPiArfQo+ICsKPiArc3RhdGljIGludCBfX21heWJlX3VudXNlZCBk d2MzX21lc29uX2cxMmFfcnVudGltZV9zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKmRldikKPiArewo+ ICsJc3RydWN0IGR3YzNfbWVzb25fZzEyYQkqcHJpdiA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwo+ ICsKPiArCWNsa19kaXNhYmxlKHByaXYtPmNsayk7Cj4gKwo+ICsJcmV0dXJuIDA7Cj4gK30KPiAr Cj4gK3N0YXRpYyBpbnQgX19tYXliZV91bnVzZWQgZHdjM19tZXNvbl9nMTJhX3J1bnRpbWVfcmVz dW1lKHN0cnVjdCBkZXZpY2UgKmRldikKPiArewo+ICsJc3RydWN0IGR3YzNfbWVzb25fZzEyYQkq cHJpdiA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwo+ICsKPiArCXJldHVybiBjbGtfZW5hYmxlKHBy aXYtPmNsayk7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQgX19tYXliZV91bnVzZWQgZHdjM19tZXNv bl9nMTJhX3N1c3BlbmQoc3RydWN0IGRldmljZSAqZGV2KQo+ICt7Cj4gKwlzdHJ1Y3QgZHdjM19t ZXNvbl9nMTJhICpwcml2ID0gZGV2X2dldF9kcnZkYXRhKGRldik7Cj4gKwlpbnQgaTsKPiArCj4g Kwlmb3IgKGkgPSAwIDsgaSA8IFBIWV9DT1VOVCA7ICsraSkKPiArCQlpZiAocHJpdi0+cGh5c1tp XSkKPiArCQkJcGh5X2V4aXQocHJpdi0+cGh5c1tpXSk7Cj4gKwo+ICsJcmVzZXRfY29udHJvbF9h c3NlcnQocHJpdi0+cmVzZXQpOwo+ICsKPiArCXJldHVybiAwOwo+ICt9Cj4gKwo+ICtzdGF0aWMg aW50IF9fbWF5YmVfdW51c2VkIGR3YzNfbWVzb25fZzEyYV9yZXN1bWUoc3RydWN0IGRldmljZSAq ZGV2KQo+ICt7Cj4gKwlzdHJ1Y3QgZHdjM19tZXNvbl9nMTJhICpwcml2ID0gZGV2X2dldF9kcnZk YXRhKGRldik7Cj4gKwlpbnQgaSwgcmV0Owo+ICsKPiArCXJlc2V0X2NvbnRyb2xfZGVhc3NlcnQo cHJpdi0+cmVzZXQpOwo+ICsKPiArCWR3YzNfbWVzb25fZzEyYV91c2JfaW5pdChwcml2KTsKPiAr Cj4gKwkvKiBJbml0IFBIWXMgKi8KPiArCWZvciAoaSA9IDAgOyBpIDwgUEhZX0NPVU5UIDsgKytp KSB7Cj4gKwkJaWYgKHByaXYtPnBoeXNbaV0pIHsKPiArCQkJcmV0ID0gcGh5X2luaXQocHJpdi0+ cGh5c1tpXSk7Cj4gKwkJCWlmIChyZXQpCj4gKwkJCQlyZXR1cm4gcmV0Owo+ICsJCX0KPiArCX0K PiArCj4gKwlyZXR1cm4gMDsKPiArfQo+ICsKPiArc3RhdGljIGNvbnN0IHN0cnVjdCBkZXZfcG1f b3BzIGR3YzNfbWVzb25fZzEyYV9kZXZfcG1fb3BzID0gewo+ICsJU0VUX1NZU1RFTV9TTEVFUF9Q TV9PUFMoZHdjM19tZXNvbl9nMTJhX3N1c3BlbmQsIGR3YzNfbWVzb25fZzEyYV9yZXN1bWUpCj4g KwlTRVRfUlVOVElNRV9QTV9PUFMoZHdjM19tZXNvbl9nMTJhX3J1bnRpbWVfc3VzcGVuZCwKPiAr CQkJZHdjM19tZXNvbl9nMTJhX3J1bnRpbWVfcmVzdW1lLCBOVUxMKQo+ICt9Owo+ICsKPiArc3Rh dGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgZHdjM19tZXNvbl9nMTJhX21hdGNoW10gPSB7 Cj4gKwl7IC5jb21wYXRpYmxlID0gImFtbG9naWMsbWVzb24tZzEyYS11c2ItY3RybCIgfSwKPiAr CXsgLyogU2VudGluZWwgKi8gfQo+ICt9Owo+ICtNT0RVTEVfREVWSUNFX1RBQkxFKG9mLCBkd2Mz X21lc29uX2cxMmFfbWF0Y2gpOwo+ICsKPiArc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIg ZHdjM19tZXNvbl9nMTJhX2RyaXZlciA9IHsKPiArCS5wcm9iZQkJPSBkd2MzX21lc29uX2cxMmFf cHJvYmUsCj4gKwkucmVtb3ZlCQk9IGR3YzNfbWVzb25fZzEyYV9yZW1vdmUsCj4gKwkuZHJpdmVy CQk9IHsKPiArCQkubmFtZQk9ICJkd2MzLW1lc29uLWcxMmEiLAo+ICsJCS5vZl9tYXRjaF90YWJs ZSA9IGR3YzNfbWVzb25fZzEyYV9tYXRjaCwKPiArCQkucG0JPSAmZHdjM19tZXNvbl9nMTJhX2Rl dl9wbV9vcHMsCj4gKwl9LAo+ICt9Owo+ICsKPiArbW9kdWxlX3BsYXRmb3JtX2RyaXZlcihkd2Mz X21lc29uX2cxMmFfZHJpdmVyKTsKPiArTU9EVUxFX0xJQ0VOU0UoIkdQTCB2MiIpOwo+ICtNT0RV TEVfREVTQ1JJUFRJT04oIkFtbG9naWMgTWVzb24gRzEyQSBVU0IgR2x1ZSBMYXllciIpOwo+ICtN T0RVTEVfQVVUSE9SKCJOZWlsIEFybXN0cm9uZyA8bmFybXN0cm9uZ0BiYXlsaWJyZS5jb20+Iik7 Cg==