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: [4/5] usb: host: Add XHCI driver for Broadcom STB SoCs From: Chunfeng Yun Message-Id: <1538027496.32173.56.camel@mhfsdcap03> Date: Thu, 27 Sep 2018 13:51:36 +0800 To: Al Cooper Cc: linux-kernel@vger.kernel.org, Greg Kroah-Hartman , Rob Herring , Mark Rutland , Alan Stern , Mathias Nyman , Mauro Carvalho Chehab , "David S. Miller" , Andrew Morton , Arnd Bergmann , Dmitry Osipenko , Jianguo Sun , James Hogan , Alban Bedel , Lu Baolu , Avi Fishman , Alex Elder , Hans de Goede , linux-usb@vger.kernel.org, devicetree@vger.kernel.org, bcm-kernel-feedback-list@broadcom.com List-ID: SGksCgpPbiBXZWQsIDIwMTgtMDktMjYgYXQgMTg6MjAgLTA0MDAsIEFsIENvb3BlciB3cm90ZToK PiBUaGlzIGRyaXZlciBlbmFibGVzIFVTQiBYSENJIG9uIEJyb2FkY29tIEFSTSBTVEIgU29Dcy4K PiBUaGUgZHJpdmVycyBkZXBlbmQgb24gYSBtYXRjaGluZyAiYnJjbSxicmNtc3RiLXVzYi1waHki Cj4gQnJvYWRjb20gU1RCIFVTQiBQaHkgZHJpdmVyLgo+IAo+IFRoZSBzdGFuZGFyZCBwbGF0Zm9y bSBkcml2ZXIgY2FuJ3QgYmUgdXNlZCBiZWNhdXNlIG9mIGRpZmZlcmVuY2VzCj4gaW4gUEhZIGFu ZCBDbG9jayBoYW5kbGluZy4gVGhlIHN0YW5kYXJkIFBIWSBoYW5kbGluZyBpbiBoY2QuYyB3aWxs Cj4gZG8gYSBwaHlfZXhpdC9waHlfaW5pdCBvbiBzdXNwZW5kL3Jlc3VtZSBhbmQgdGhpcyB3aWxs IGVuZCB1cAo+IHNodXR0aW5nIGRvd24gdGhlIFBIWXMgdG8gdGhlIHBvaW50IHRoYXQgdGhlIGhv c3QgY29udHJvbGxlcgo+IHJlZ2lzdGVycyBhcmUgbm8gbG9uZ2VyIGFjY2Vzc2libGUgYW5kIHdp bGwgY2F1c2Ugc3VzcGVuZCB0byBjcmFzaC4KWW91IGNhbiBhdm9pZCBoY2QuYyB0byBkbyBhIHBo eV9leGl0L3BoeV9pbml0IG9uIHN1c3BlbmQvcmVzdW1lIGJ5CmRldmljZV9pbml0X3dha2V1cChk ZXYsIHRydWUpOwoKPiBUaGUgY2xvY2tzIHNwZWNpZmllZCBpbiBkZXZpY2UgdHJlZSBmb3IgdGhl c2UgZHJpdmVycyBhcmUgbm90Cj4gYXZhaWxhYmxlIGluIG1haW5saW5lIHNvIGluc3RlYWQgb2Yg cmV0dXJuaW5nIEVQUk9CRV9ERUZFUiB3aGVuCj4gdGhlIHNwZWNpZmllZCBjbG9jayBpcyBub3Qg Zm91bmQgYW5kIGV2ZW50dWFsbHkgZmFpbGluZyBwcm9iZSwKPiB0aGUgY2xvY2sgcG9pbnRlciBp cyBzZXQgdG8gTlVMTCB3aGljaCBkaXNhYmxlcyBhbGwgY2xvY2sgaGFuZGxpbmcuClRyeSB0byB1 c2UgYSBmaXhlZC1jbG9jayBhcyBkdW1teSBjbG9jayBpZiB0aGUgY2xvY2sgaXMgb3B0aW9uYWw/ Cgo+IAo+IFNpZ25lZC1vZmYtYnk6IEFsIENvb3BlciA8YWxjb29wZXJ4QGdtYWlsLmNvbT4KPiAt LS0KPiAgZHJpdmVycy91c2IvaG9zdC94aGNpLWJyY20uYyB8IDI5NCArKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrCj4gIDEgZmlsZSBjaGFuZ2VkLCAyOTQgaW5zZXJ0 aW9ucygrKQo+ICBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy91c2IvaG9zdC94aGNpLWJyY20u Ywo+IAo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9ob3N0L3hoY2ktYnJjbS5jIGIvZHJpdmVy cy91c2IvaG9zdC94aGNpLWJyY20uYwo+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4gaW5kZXggMDAw MDAwMDAwMDAwLi4xYTc1NzhiOGVmNmEKPiAtLS0gL2Rldi9udWxsCj4gKysrIGIvZHJpdmVycy91 c2IvaG9zdC94aGNpLWJyY20uYwo+IEBAIC0wLDAgKzEsMjk0IEBACj4gKy8vIFNQRFgtTGljZW5z ZS1JZGVudGlmaWVyOiBHUEwtMi4wCj4gKy8qIENvcHlyaWdodCAoYykgMjAxOCwgQnJvYWRjb20g Ki8KPiArCj4gKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KPiArI2luY2x1ZGUg PGxpbnV4L21vZHVsZS5oPgo+ICsjaW5jbHVkZSA8bGludXgvb2YuaD4KPiArI2luY2x1ZGUgPGxp bnV4L2RtYS1tYXBwaW5nLmg+Cj4gKyNpbmNsdWRlIDxsaW51eC9jbGsuaD4KPiArI2luY2x1ZGUg PGxpbnV4L3BoeS9waHkuaD4KPiArCj4gKyNpbmNsdWRlICJ4aGNpLmgiCj4gKwo+ICtzdGF0aWMg c3RydWN0IGhjX2RyaXZlciBfX3JlYWRfbW9zdGx5IHhoY2lfYnJjbV9oY19kcml2ZXI7Cj4gKwo+ ICsjZGVmaW5lIEJSQ01fRFJJVkVSX0RFU0MgInhIQ0kgQnJvYWRjb20gU1RCIGRyaXZlciIKPiAr I2RlZmluZSBCUkNNX0RSSVZFUl9OQU1FICJ4aGNpLWJyY20iCj4gKwo+ICsjZGVmaW5lIGhjZF90 b194aGNpX3ByaXYoaCkgKChzdHJ1Y3QgYnJjbV9wcml2ICopaGNkX3RvX3hoY2koaCktPnByaXYp Cj4gKwo+ICtzdHJ1Y3QgYnJjbV9wcml2IHsKPiArCXN0cnVjdCBwaHkgKnBoeTsKPiArfTsKPiAr Cj4gK3N0YXRpYyB2b2lkIHhoY2lfYnJjbV9xdWlya3Moc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1 Y3QgeGhjaV9oY2QgKnhoY2kpCj4gK3sKPiArCS8qCj4gKwkgKiBBcyBvZiBub3cgcGxhdGZvcm0g ZHJpdmVycyBkb24ndCBwcm92aWRlIE1TSSBzdXBwb3J0IHNvIHdlIGVuc3VyZQo+ICsJICogaGVy ZSB0aGF0IHRoZSBnZW5lcmljIGNvZGUgZG9lcyBub3QgdHJ5IHRvIG1ha2UgYSBwY2lfZGV2IGZy b20gb3VyCj4gKwkgKiBkZXYgc3RydWN0IGluIG9yZGVyIHRvIHNldHVwIE1TSQo+ICsJICovCj4g Kwl4aGNpLT5xdWlya3MgfD0gWEhDSV9QTEFUOwo+ICsKPiArCS8qCj4gKwkgKiBUaGUgQnJvYWRj b20gWEhDSSBjb3JlIGRvZXMgbm90IHN1cHBvcnQgc2F2ZS9yZXN0b3JlIHN0YXRlCj4gKwkgKiBz byB3ZSBuZWVkIHRvIHJlc2V0IG9uIHJlc3VtZS4KPiArCSAqLwo+ICsJeGhjaS0+cXVpcmtzIHw9 IFhIQ0lfUkVTRVRfT05fUkVTVU1FOwo+ICt9Cj4gKwo+ICsvKiBjYWxsZWQgZHVyaW5nIHByb2Jl KCkgYWZ0ZXIgY2hpcCByZXNldCBjb21wbGV0ZXMgKi8KPiArc3RhdGljIGludCB4aGNpX2JyY21f c2V0dXAoc3RydWN0IHVzYl9oY2QgKmhjZCkKPiArewo+ICsJcmV0dXJuIHhoY2lfZ2VuX3NldHVw KGhjZCwgeGhjaV9icmNtX3F1aXJrcyk7Cj4gK30KPiArCj4gK3N0YXRpYyBjb25zdCBzdHJ1Y3Qg eGhjaV9kcml2ZXJfb3ZlcnJpZGVzIGJyY21fb3ZlcnJpZGVzIF9faW5pdGNvbnN0ID0gewo+ICsK PiArCS5leHRyYV9wcml2X3NpemUgPSBzaXplb2Yoc3RydWN0IGJyY21fcHJpdiksCj4gKwkucmVz ZXQgPSB4aGNpX2JyY21fc2V0dXAsCj4gK307Cj4gKwo+ICtzdGF0aWMgaW50IHhoY2lfYnJjbV9w cm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQo+ICt7Cj4gKwljb25zdCBzdHJ1Y3Qg aGNfZHJpdmVyCSpkcml2ZXI7Cj4gKwlzdHJ1Y3QgYnJjbV9wcml2CSpwcml2Owo+ICsJc3RydWN0 IHhoY2lfaGNkCQkqeGhjaTsKPiArCXN0cnVjdCByZXNvdXJjZSAgICAgICAgICpyZXM7Cj4gKwlz dHJ1Y3QgdXNiX2hjZAkJKmhjZDsKPiArCWludAkJCXJldDsKPiArCWludAkJCWlycTsKPiArCj4g KwlpZiAodXNiX2Rpc2FibGVkKCkpCj4gKwkJcmV0dXJuIC1FTk9ERVY7Cj4gKwo+ICsJZHJpdmVy ID0gJnhoY2lfYnJjbV9oY19kcml2ZXI7Cj4gKwo+ICsJaXJxID0gcGxhdGZvcm1fZ2V0X2lycShw ZGV2LCAwKTsKPiArCWlmIChpcnEgPCAwKQo+ICsJCXJldHVybiAtRU5PREVWOwo+ICsKPiArCS8q IFRyeSB0byBzZXQgNjQtYml0IERNQSBmaXJzdCAqLwo+ICsJaWYgKFdBUk5fT04oIXBkZXYtPmRl di5kbWFfbWFzaykpCj4gKwkJLyogUGxhdGZvcm0gZGlkIG5vdCBpbml0aWFsaXplIGRtYV9tYXNr ICovCj4gKwkJcmV0ID0gZG1hX2NvZXJjZV9tYXNrX2FuZF9jb2hlcmVudCgmcGRldi0+ZGV2LAo+ ICsJCQkJCQkgICBETUFfQklUX01BU0soNjQpKTsKPiArCWVsc2UKPiArCQlyZXQgPSBkbWFfc2V0 X21hc2tfYW5kX2NvaGVyZW50KCZwZGV2LT5kZXYsIERNQV9CSVRfTUFTSyg2NCkpOwo+ICsKPiAr CS8qIElmIHNldGluZyA2NC1iaXQgRE1BIG1hc2sgZmFpbHMsIGZhbGwgYmFjayB0byAzMi1iaXQg RE1BIG1hc2sgKi8KPiArCWlmIChyZXQpIHsKPiArCQlyZXQgPSBkbWFfc2V0X21hc2tfYW5kX2Nv aGVyZW50KCZwZGV2LT5kZXYsIERNQV9CSVRfTUFTSygzMikpOwo+ICsJCWlmIChyZXQpCj4gKwkJ CXJldHVybiByZXQ7Cj4gKwl9Cj4gKwo+ICsJcG1fcnVudGltZV9zZXRfYWN0aXZlKCZwZGV2LT5k ZXYpOwo+ICsJcG1fcnVudGltZV9lbmFibGUoJnBkZXYtPmRldik7Cj4gKwlwbV9ydW50aW1lX2dl dF9ub3Jlc3VtZSgmcGRldi0+ZGV2KTsKPiArCj4gKwloY2QgPSBfX3VzYl9jcmVhdGVfaGNkKGRy aXZlciwgJnBkZXYtPmRldiwgJnBkZXYtPmRldiwKPiArCQkJICAgICAgIGRldl9uYW1lKCZwZGV2 LT5kZXYpLCBOVUxMKTsKPiArCWlmICghaGNkKSB7Cj4gKwkJcmV0dXJuIC1FTk9NRU07Cj4gKwkJ Z290byBkaXNhYmxlX3J1bnRpbWU7Cj4gKwl9Cj4gKwo+ICsJcmVzID0gcGxhdGZvcm1fZ2V0X3Jl c291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAwKTsKPiArCWhjZC0+cmVncyA9IGRldm1faW9y ZW1hcF9yZXNvdXJjZSgmcGRldi0+ZGV2LCByZXMpOwo+ICsJaWYgKElTX0VSUihoY2QtPnJlZ3Mp KSB7Cj4gKwkJcmV0ID0gUFRSX0VSUihoY2QtPnJlZ3MpOwo+ICsJCWdvdG8gcHV0X2hjZDsKPiAr CX0KPiArCj4gKwloY2QtPnJzcmNfc3RhcnQgPSByZXMtPnN0YXJ0Owo+ICsJaGNkLT5yc3JjX2xl biA9IHJlc291cmNlX3NpemUocmVzKTsKPiArCj4gKwkvKgo+ICsJICogTm90IGFsbCBwbGF0Zm9y bXMgaGF2ZSBhIGNsayBzbyBpdCBpcyBub3QgYW4gZXJyb3IgaWYgdGhlCj4gKwkgKiBjbG9jayBk b2VzIG5vdCBleGlzdHMuCj4gKwkgKi8KPiArCXhoY2kgPSBoY2RfdG9feGhjaShoY2QpOwo+ICsJ eGhjaS0+Y2xrID0gZGV2bV9jbGtfZ2V0KCZwZGV2LT5kZXYsIE5VTEwpOwo+ICsJaWYgKElTX0VS Uih4aGNpLT5jbGspKSB7Cj4gKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiQ2xvY2sgbm90IGZvdW5k IGluIERldmljZSBUcmVlXG4iKTsKPiArCQl4aGNpLT5jbGsgPSBOVUxMOwo+ICsJfQo+ICsJZGV2 aWNlX3dha2V1cF9lbmFibGUoaGNkLT5zZWxmLmNvbnRyb2xsZXIpOwo+ICsKPiArCXhoY2ktPm1h aW5faGNkID0gaGNkOwo+ICsJeGhjaS0+c2hhcmVkX2hjZCA9IF9fdXNiX2NyZWF0ZV9oY2QoZHJp dmVyLCAmcGRldi0+ZGV2LCAmcGRldi0+ZGV2LAo+ICsJCQkJCSAgICBkZXZfbmFtZSgmcGRldi0+ ZGV2KSwgaGNkKTsKPiArCWlmICgheGhjaS0+c2hhcmVkX2hjZCkgewo+ICsJCXJldCA9IC1FTk9N RU07Cj4gKwkJZ290byBkaXNhYmxlX2NsazsKPiArCX0KPiArCj4gKwlpZiAoZGV2aWNlX3Byb3Bl cnR5X3JlYWRfYm9vbCgmcGRldi0+ZGV2LCAidXNiMy1scG0tY2FwYWJsZSIpKQo+ICsJCXhoY2kt PnF1aXJrcyB8PSBYSENJX0xQTV9TVVBQT1JUOwo+ICsKPiArCXByaXYgPSBoY2RfdG9feGhjaV9w cml2KGhjZCk7Cj4gKwlwcml2LT5waHkgPSBkZXZtX29mX3BoeV9nZXRfYnlfaW5kZXgoJnBkZXYt PmRldiwgcGRldi0+ZGV2Lm9mX25vZGUsIDApOwo+ICsJaWYgKElTX0VSUihwcml2LT5waHkpKSB7 Cj4gKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiVVNCIFBoeSBub3QgZm91bmQuXG4iKTsKPiArCQly ZXQgPSBQVFJfRVJSKHByaXYtPnBoeSk7Cj4gKwkJZ290byBwdXRfdXNiM19oY2Q7Cj4gKwl9Cj4g KwlyZXQgPSBwaHlfaW5pdChwcml2LT5waHkpOwo+ICsJaWYgKHJldCkKPiArCQlnb3RvIHB1dF91 c2IzX2hjZDsKPiArCj4gKwloY2QtPnNraXBfcGh5X2luaXRpYWxpemF0aW9uID0gMTsKPiArCXJl dCA9IHVzYl9hZGRfaGNkKGhjZCwgaXJxLCBJUlFGX1NIQVJFRCk7Cj4gKwlpZiAocmV0KQo+ICsJ CWdvdG8gZGlzYWJsZV91c2JfcGh5Owo+ICsKPiArCWlmIChIQ0NfTUFYX1BTQSh4aGNpLT5oY2Nf cGFyYW1zKSA+PSA0KQo+ICsJCXhoY2ktPnNoYXJlZF9oY2QtPmNhbl9kb19zdHJlYW1zID0gMTsK PiArCj4gKwlyZXQgPSB1c2JfYWRkX2hjZCh4aGNpLT5zaGFyZWRfaGNkLCBpcnEsIElSUUZfU0hB UkVEKTsKPiArCWlmIChyZXQpCj4gKwkJZ290byBkZWFsbG9jX3VzYjJfaGNkOwo+ICsKPiArCWRl dmljZV9lbmFibGVfYXN5bmNfc3VzcGVuZCgmcGRldi0+ZGV2KTsKPiArCXBtX3J1bnRpbWVfcHV0 X25vaWRsZSgmcGRldi0+ZGV2KTsKPiArCj4gKwkvKgo+ICsJICogUHJldmVudCBydW50aW1lIHBt IGZyb20gYmVpbmcgb24gYXMgZGVmYXVsdCwgdXNlcnMgc2hvdWxkIGVuYWJsZQo+ICsJICogcnVu dGltZSBwbSB1c2luZyBwb3dlci9jb250cm9sIGluIHN5c2ZzLgo+ICsJICovCj4gKwlwbV9ydW50 aW1lX2ZvcmJpZCgmcGRldi0+ZGV2KTsKPiArCj4gKwlyZXR1cm4gMDsKPiArCj4gK2RlYWxsb2Nf dXNiMl9oY2Q6Cj4gKwl1c2JfcmVtb3ZlX2hjZChoY2QpOwo+ICsKPiArZGlzYWJsZV91c2JfcGh5 Ogo+ICsJcGh5X2V4aXQocHJpdi0+cGh5KTsKPiArCj4gK3B1dF91c2IzX2hjZDoKPiArCXVzYl9w dXRfaGNkKHhoY2ktPnNoYXJlZF9oY2QpOwo+ICsKPiArZGlzYWJsZV9jbGs6Cj4gKwlpZiAoIUlT X0VSUih4aGNpLT5jbGspKQo+ICsJCWNsa19kaXNhYmxlX3VucHJlcGFyZSh4aGNpLT5jbGspOwo+ ICsKPiArcHV0X2hjZDoKPiArCXVzYl9wdXRfaGNkKGhjZCk7Cj4gKwo+ICtkaXNhYmxlX3J1bnRp bWU6Cj4gKwlwbV9ydW50aW1lX3B1dF9ub2lkbGUoJnBkZXYtPmRldik7Cj4gKwlwbV9ydW50aW1l X2Rpc2FibGUoJnBkZXYtPmRldik7Cj4gKwo+ICsJcmV0dXJuIHJldDsKPiArfQo+ICsKPiArc3Rh dGljIGludCB4aGNpX2JyY21fcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKPiAr ewo+ICsJc3RydWN0IHVzYl9oY2QJKmhjZCA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKGRldik7Cj4g KwlzdHJ1Y3QgeGhjaV9oY2QJKnhoY2kgPSBoY2RfdG9feGhjaShoY2QpOwo+ICsJc3RydWN0IGJy Y21fcHJpdiAqcHJpdiA9IGhjZF90b194aGNpX3ByaXYoaGNkKTsKPiArCj4gKwl4aGNpLT54aGNf c3RhdGUgfD0gWEhDSV9TVEFURV9SRU1PVklORzsKPiArCj4gKwl1c2JfcmVtb3ZlX2hjZCh4aGNp LT5zaGFyZWRfaGNkKTsKPiArCXVzYl9yZW1vdmVfaGNkKGhjZCk7Cj4gKwl1c2JfcHV0X2hjZCh4 aGNpLT5zaGFyZWRfaGNkKTsKPiArCXBoeV9leGl0KHByaXYtPnBoeSk7Cj4gKwljbGtfZGlzYWJs ZV91bnByZXBhcmUoeGhjaS0+Y2xrKTsKPiArCXVzYl9wdXRfaGNkKGhjZCk7Cj4gKwo+ICsJcG1f cnVudGltZV9zZXRfc3VzcGVuZGVkKCZkZXYtPmRldik7Cj4gKwlwbV9ydW50aW1lX2Rpc2FibGUo JmRldi0+ZGV2KTsKPiArCj4gKwlyZXR1cm4gMDsKPiArfQo+ICsKPiArI2lmZGVmIENPTkZJR19Q TV9TTEVFUAo+ICtzdGF0aWMgaW50IHhoY2lfYnJjbV9zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKmRl dikKPiArewo+ICsJaW50IHJldDsKPiArCXN0cnVjdCB1c2JfaGNkCSpoY2QgPSBkZXZfZ2V0X2Ry dmRhdGEoZGV2KTsKPiArCXN0cnVjdCB4aGNpX2hjZAkqeGhjaSA9IGhjZF90b194aGNpKGhjZCk7 Cj4gKwo+ICsJcmV0ID0geGhjaV9zdXNwZW5kKHhoY2ksIGRldmljZV9tYXlfd2FrZXVwKGRldikp Owo+ICsJY2xrX2Rpc2FibGVfdW5wcmVwYXJlKHhoY2ktPmNsayk7Cj4gKwlyZXR1cm4gcmV0Owo+ ICt9Cj4gKwo+ICtzdGF0aWMgaW50IHhoY2lfYnJjbV9yZXN1bWUoc3RydWN0IGRldmljZSAqZGV2 KQo+ICt7Cj4gKwlzdHJ1Y3QgdXNiX2hjZAkqaGNkID0gZGV2X2dldF9kcnZkYXRhKGRldik7Cj4g KwlzdHJ1Y3QgeGhjaV9oY2QJKnhoY2kgPSBoY2RfdG9feGhjaShoY2QpOwo+ICsJaW50IGVycjsK PiArCj4gKwllcnIgPSBjbGtfcHJlcGFyZV9lbmFibGUoeGhjaS0+Y2xrKTsKPiArCWlmIChlcnIp Cj4gKwkJcmV0dXJuIGVycjsKPiArCXJldHVybiB4aGNpX3Jlc3VtZSh4aGNpLCAwKTsKPiArfQo+ ICsKPiArc3RhdGljIGludCB4aGNpX2JyY21fcnVudGltZV9zdXNwZW5kKHN0cnVjdCBkZXZpY2Ug KmRldikKPiArewo+ICsJc3RydWN0IHVzYl9oY2QJKmhjZCA9IGRldl9nZXRfZHJ2ZGF0YShkZXYp Owo+ICsJc3RydWN0IHhoY2lfaGNkCSp4aGNpID0gaGNkX3RvX3hoY2koaGNkKTsKPiArCj4gKwly ZXR1cm4geGhjaV9zdXNwZW5kKHhoY2ksIHRydWUpOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IHho Y2lfYnJjbV9ydW50aW1lX3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICpkZXYpCj4gK3sKPiArCXN0cnVj dCB1c2JfaGNkCSpoY2QgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKPiArCXN0cnVjdCB4aGNpX2hj ZAkqeGhjaSA9IGhjZF90b194aGNpKGhjZCk7Cj4gKwo+ICsJcmV0dXJuIHhoY2lfcmVzdW1lKHho Y2ksIDApOwo+ICt9Cj4gKwo+ICsjZW5kaWYgLyogQ09ORklHX1BNX1NMRUVQICovCj4gKwo+ICsK PiArc3RhdGljIGNvbnN0IHN0cnVjdCBkZXZfcG1fb3BzIHhoY2lfYnJjbV9wbV9vcHMgPSB7Cj4g KwlTRVRfU1lTVEVNX1NMRUVQX1BNX09QUyh4aGNpX2JyY21fc3VzcGVuZCwgeGhjaV9icmNtX3Jl c3VtZSkKPiArCj4gKwlTRVRfUlVOVElNRV9QTV9PUFMoeGhjaV9icmNtX3J1bnRpbWVfc3VzcGVu ZCwKPiArCQkJICAgeGhjaV9icmNtX3J1bnRpbWVfcmVzdW1lLAo+ICsJCQkgICBOVUxMKQo+ICt9 Owo+ICsKPiArI2lmZGVmIENPTkZJR19PRgo+ICtzdGF0aWMgY29uc3Qgc3RydWN0IG9mX2Rldmlj ZV9pZCBicmNtX3hoY2lfb2ZfbWF0Y2hbXSA9IHsKPiArCXsgLmNvbXBhdGlibGUgPSAiYnJjbSx4 aGNpLWJyY20tdjIiIH0sCj4gKwl7IH0sCj4gK307Cj4gK01PRFVMRV9ERVZJQ0VfVEFCTEUob2Ys IGJyY21feGhjaV9vZl9tYXRjaCk7Cj4gKyNlbmRpZgo+ICsKPiArc3RhdGljIHN0cnVjdCBwbGF0 Zm9ybV9kcml2ZXIgeGhjaV9icmNtX2RyaXZlciA9IHsKPiArCS5wcm9iZQk9IHhoY2lfYnJjbV9w cm9iZSwKPiArCS5yZW1vdmUJPSB4aGNpX2JyY21fcmVtb3ZlLAo+ICsJLmRyaXZlcgk9IHsKPiAr CQkubmFtZSA9IEJSQ01fRFJJVkVSX05BTUUsCj4gKwkJLnBtID0gJnhoY2lfYnJjbV9wbV9vcHMs Cj4gKwkJLm9mX21hdGNoX3RhYmxlID0gb2ZfbWF0Y2hfcHRyKGJyY21feGhjaV9vZl9tYXRjaCks Cj4gKwl9LAo+ICt9Owo+ICsKPiArc3RhdGljIGludCBfX2luaXQgeGhjaV9icmNtX2luaXQodm9p ZCkKPiArewo+ICsJcHJfaW5mbygiJXM6ICIgQlJDTV9EUklWRVJfREVTQyAiXG4iLCBCUkNNX0RS SVZFUl9OQU1FKTsKPiArCXhoY2lfaW5pdF9kcml2ZXIoJnhoY2lfYnJjbV9oY19kcml2ZXIsICZi cmNtX292ZXJyaWRlcyk7Cj4gKwlyZXR1cm4gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZ4aGNp X2JyY21fZHJpdmVyKTsKPiArfQo+ICttb2R1bGVfaW5pdCh4aGNpX2JyY21faW5pdCk7Cj4gKwo+ ICtzdGF0aWMgdm9pZCBfX2V4aXQgeGhjaV9icmNtX2V4aXQodm9pZCkKPiArewo+ICsJcGxhdGZv cm1fZHJpdmVyX3VucmVnaXN0ZXIoJnhoY2lfYnJjbV9kcml2ZXIpOwo+ICt9Cj4gK21vZHVsZV9l eGl0KHhoY2lfYnJjbV9leGl0KTsKPiArCj4gK01PRFVMRV9BTElBUygicGxhdGZvcm06eGhjaS1i cmNtIik7Cj4gK01PRFVMRV9ERVNDUklQVElPTihCUkNNX0RSSVZFUl9ERVNDKTsKPiArTU9EVUxF X0FVVEhPUigiQWwgQ29vcGVyIik7Cj4gK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsK