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: [RFC,v2,06/15] usb:cdns3: Adds Host support From: Roger Quadros Message-Id: <5BF80D44.2050600@ti.com> Date: Fri, 23 Nov 2018 16:23:00 +0200 To: Pawel Laszczak , devicetree@vger.kernel.org Cc: gregkh@linuxfoundation.org, linux-usb@vger.kernel.org, linux-kernel@vger.kernel.org, adouglas@cadence.com, jbergsagel@ti.com, nsekhar@ti.com, nm@ti.com, sureshp@cadence.com, peter.chen@nxp.com, pjez@cadence.com, kurahul@cadence.com List-ID: T24gMTgvMTEvMTggMTI6MDksIFBhd2VsIExhc3pjemFrIHdyb3RlOgo+IFBhdGNoIGFkZHMgaG9z dC1leHBvcnQuaCBhbmQgaG9zdC5jIGZpbGUgYW5kIG1wbGVtZW50cyBmdW5jdGlvbnMgdGhhdAo+ IGFsbG93IHRvIGluaXRpYWxpemUsIHN0YXJ0IGFuZCBzdG9wIFhIQ0kgaG9zdCBkcml2ZXIuCj4g Cj4gU2lnbmVkLW9mZi1ieTogUGF3ZWwgTGFzemN6YWsgPHBhd2VsbEBjYWRlbmNlLmNvbT4KPiAt LS0KPiAgZHJpdmVycy91c2IvY2RuczMvS2NvbmZpZyAgICAgICB8ICAxMCArKwo+ICBkcml2ZXJz L3VzYi9jZG5zMy9NYWtlZmlsZSAgICAgIHwgICAxICsKPiAgZHJpdmVycy91c2IvY2RuczMvY29y ZS5jICAgICAgICB8ICAgNyArLQo+ICBkcml2ZXJzL3VzYi9jZG5zMy9ob3N0LWV4cG9ydC5oIHwg IDMwICsrKysKPiAgZHJpdmVycy91c2IvY2RuczMvaG9zdC5jICAgICAgICB8IDI1NiArKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrKwo+ICA1IGZpbGVzIGNoYW5nZWQsIDMwMiBpbnNlcnRp b25zKCspLCAyIGRlbGV0aW9ucygtKQo+ICBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy91c2Iv Y2RuczMvaG9zdC1leHBvcnQuaAo+ICBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy91c2IvY2Ru czMvaG9zdC5jCj4gCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2NkbnMzL0tjb25maWcgYi9k cml2ZXJzL3VzYi9jZG5zMy9LY29uZmlnCj4gaW5kZXggZWIyMmE4NjkyOTkxLi5kOTJiYzNkNjhl YjAgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy91c2IvY2RuczMvS2NvbmZpZwo+ICsrKyBiL2RyaXZl cnMvdXNiL2NkbnMzL0tjb25maWcKPiBAQCAtMTAsNiArMTAsMTYgQEAgY29uZmlnIFVTQl9DRE5T Mwo+ICAKPiAgaWYgVVNCX0NETlMzCj4gIAo+ICtjb25maWcgVVNCX0NETlMzX0hPU1QKPiArICAg ICAgICBib29sICJDYWRlbmNlIFVTQjMgaG9zdCBjb250cm9sbGVyIgo+ICsgICAgICAgIGRlcGVu ZHMgb24gVVNCX1hIQ0lfSENECj4gKyAgICAgICAgaGVscAo+ICsgICAgICAgICAgU2F5IFkgaGVy ZSB0byBlbmFibGUgaG9zdCBjb250cm9sbGVyIGZ1bmN0aW9uYWxpdHkgb2YgdGhlCj4gKyAgICAg ICAgICBjYWRlbmNlIGRyaXZlci4KPiArCj4gKyAgICAgICAgICBIb3N0IGNvbnRyb2xsZXIgaXMg Y29tcGxpYW5jZSB3aXRoIFhIQ0kgc28gaXQgd2lsbCB1c2UKPiArICAgICAgICAgIHN0YW5kYXJk IFhIQ0kgZHJpdmVyLgo+ICsKPiAgY29uZmlnIFVTQl9DRE5TM19QQ0lfV1JBUAo+ICAJdHJpc3Rh dGUgIlBDSWUtYmFzZWQgUGxhdGZvcm1zIgo+ICAJZGVwZW5kcyBvbiBVU0JfUENJICYmIEFDUEkK PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvY2RuczMvTWFrZWZpbGUgYi9kcml2ZXJzL3VzYi9j ZG5zMy9NYWtlZmlsZQo+IGluZGV4IGU3NzliMmEyZjhlYi4uOTc2MTE3YmE2N2ZmIDEwMDY0NAo+ IC0tLSBhL2RyaXZlcnMvdXNiL2NkbnMzL01ha2VmaWxlCj4gKysrIGIvZHJpdmVycy91c2IvY2Ru czMvTWFrZWZpbGUKPiBAQCAtMiw0ICsyLDUgQEAgb2JqLSQoQ09ORklHX1VTQl9DRE5TMykJCQkr PSBjZG5zMy5vCj4gIG9iai0kKENPTkZJR19VU0JfQ0ROUzNfUENJX1dSQVApCSs9IGNkbnMzLXBj aS5vCj4gIAo+ICBjZG5zMy15CQkJCQk6PSBjb3JlLm8gZHJkLm8KPiArY2RuczMtJChDT05GSUdf VVNCX0NETlMzX0hPU1QpICAgICAgICAgICs9IGhvc3Qubwo+ICBjZG5zMy1wY2kteQkJIAkJOj0g Y2RuczMtcGNpLXdyYXAubwo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9jZG5zMy9jb3JlLmMg Yi9kcml2ZXJzL3VzYi9jZG5zMy9jb3JlLmMKPiBpbmRleCBkYmVlNDMyNWRhN2YuLjRjYjgyMGJl OWZmMyAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL3VzYi9jZG5zMy9jb3JlLmMKPiArKysgYi9kcml2 ZXJzL3VzYi9jZG5zMy9jb3JlLmMKPiBAQCAtMTcsNiArMTcsNyBAQAo+ICAKPiAgI2luY2x1ZGUg ImdhZGdldC5oIgo+ICAjaW5jbHVkZSAiY29yZS5oIgo+ICsjaW5jbHVkZSAiaG9zdC1leHBvcnQu aCIKPiAgI2luY2x1ZGUgImRyZC5oIgo+ICAKPiAgc3RhdGljIGlubGluZSBzdHJ1Y3QgY2RuczNf cm9sZV9kcml2ZXIgKmNkbnMzX2dldF9jdXJyZW50X3JvbGVfZHJpdmVyKHN0cnVjdCBjZG5zMyAq Y2RucykKPiBAQCAtOTgsNyArOTksOCBAQCBzdGF0aWMgaW50IGNkbnMzX2NvcmVfaW5pdF9yb2xl KHN0cnVjdCBjZG5zMyAqY2RucykKPiAgCX0KPiAgCj4gIAlpZiAoZHJfbW9kZSA9PSBVU0JfRFJf TU9ERV9PVEcgfHwgZHJfbW9kZSA9PSBVU0JfRFJfTU9ERV9IT1NUKSB7Cj4gLQkJLy9UT0RPOiBp bXBsZW1lbnRzIGhvc3QgaW5pdGlhbGl6YXRpb24KPiArCQlpZiAoY2RuczNfaG9zdF9pbml0KGNk bnMpKQo+ICsJCQlkZXZfaW5mbyhkZXYsICJkb2Vzbid0IHN1cHBvcnQgaG9zdFxuIik7CgpkZXZf ZXJyKCkKCkFuZCB5b3UgbmVlZCB0byBlcnJvciBvdXQgd2l0aCBlcnJvciBjb2RlLgoKPiAgCX0K PiAgCj4gIAlpZiAoZHJfbW9kZSA9PSBVU0JfRFJfTU9ERV9PVEcgfHwgZHJfbW9kZSA9PSBVU0Jf RFJfTU9ERV9QRVJJUEhFUkFMKSB7Cj4gQEAgLTE0Miw3ICsxNDQsNyBAQCBzdGF0aWMgaXJxcmV0 dXJuX3QgY2RuczNfaXJxKGludCBpcnEsIHZvaWQgKmRhdGEpCj4gIAo+ICBzdGF0aWMgdm9pZCBj ZG5zM19yZW1vdmVfcm9sZXMoc3RydWN0IGNkbnMzICpjZG5zKQo+ICB7Cj4gLQkvL1RPRE86IGlt cGxlbWVudHMgdGhpcyBmdW5jdGlvbgoKaWYgKGRyX21vZGUgPT0gVVNCX0RSX01PREVfT1RHIHx8 IGRyX21vZGUgPT0gVVNCX0RSX01PREVfSE9TVCkKCj4gKwljZG5zM19ob3N0X3JlbW92ZShjZG5z KTsKCkhvdyBhYm91dCBjYWxsaW5nIGl0IGNkbnMzX2hvc3RfZXhpdCgpIHRvIGNvbXBsZW1lbnQg Y2RuczNfaG9zdF9pbml0KCkuCgo+ICB9Cj4gIAo+ICBzdGF0aWMgaW50IGNkbnMzX2RvX3JvbGVf c3dpdGNoKHN0cnVjdCBjZG5zMyAqY2RucywgZW51bSBjZG5zM19yb2xlcyByb2xlKQo+IEBAIC00 MTAsNiArNDEyLDcgQEAgc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgY2RuczNfZHJpdmVy ID0gewo+ICAKPiAgc3RhdGljIGludCBfX2luaXQgY2RuczNfZHJpdmVyX3BsYXRmb3JtX3JlZ2lz dGVyKHZvaWQpCj4gIHsKPiArCWNkbnMzX2hvc3RfZHJpdmVyX2luaXQoKTsKPiAgCXJldHVybiBw bGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJmNkbnMzX2RyaXZlcik7Cj4gIH0KPiAgbW9kdWxlX2lu aXQoY2RuczNfZHJpdmVyX3BsYXRmb3JtX3JlZ2lzdGVyKTsKPiBkaWZmIC0tZ2l0IGEvZHJpdmVy cy91c2IvY2RuczMvaG9zdC1leHBvcnQuaCBiL2RyaXZlcnMvdXNiL2NkbnMzL2hvc3QtZXhwb3J0 LmgKPiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+IGluZGV4IDAwMDAwMDAwMDAwMC4uZjhmM2IyMzBi NDcyCj4gLS0tIC9kZXYvbnVsbAo+ICsrKyBiL2RyaXZlcnMvdXNiL2NkbnMzL2hvc3QtZXhwb3J0 LmgKPiBAQCAtMCwwICsxLDMwIEBACj4gKy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwt Mi4wICovCj4gKy8qCj4gKyAqIENhZGVuY2UgVVNCU1MgRFJEIERyaXZlciAtSG9zdCBFeHBvcnQg QVBJcwo+ICsgKgo+ICsgKiBDb3B5cmlnaHQgKEMpIDIwMTcgTlhQCj4gKyAqCj4gKyAqIEF1dGhv cnM6IFBldGVyIENoZW4gPHBldGVyLmNoZW5AbnhwLmNvbT4KPiArICovCj4gKyNpZm5kZWYgX19M SU5VWF9DRE5TM19IT1NUX0VYUE9SVAo+ICsjZGVmaW5lIF9fTElOVVhfQ0ROUzNfSE9TVF9FWFBP UlQKPiArCj4gKyNpZmRlZiBDT05GSUdfVVNCX0NETlMzX0hPU1QKPiArCj4gK2ludCBjZG5zM19o b3N0X2luaXQoc3RydWN0IGNkbnMzICpjZG5zKTsKPiArdm9pZCBjZG5zM19ob3N0X3JlbW92ZShz dHJ1Y3QgY2RuczMgKmNkbnMpOwo+ICt2b2lkIGNkbnMzX2hvc3RfZHJpdmVyX2luaXQodm9pZCk7 Cj4gKwo+ICsjZWxzZQo+ICsKPiArc3RhdGljIGlubGluZSBpbnQgY2RuczNfaG9zdF9pbml0KHN0 cnVjdCBjZG5zMyAqY2RucykKPiArewo+ICsJcmV0dXJuIC1FTlhJTzsKPiArfQo+ICsKPiArc3Rh dGljIGlubGluZSB2b2lkIGNkbnMzX2hvc3RfcmVtb3ZlKHN0cnVjdCBjZG5zMyAqY2RucykgeyB9 Cj4gK3N0YXRpYyBpbmxpbmUgdm9pZCBjZG5zM19ob3N0X2RyaXZlcl9pbml0KHZvaWQpIHt9Cj4g Kwo+ICsjZW5kaWYgLyogQ09ORklHX1VTQl9DRE5TM19IT1NUICovCj4gKwo+ICsjZW5kaWYgLyog X19MSU5VWF9DRE5TM19IT1NUX0VYUE9SVCAqLwo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9j ZG5zMy9ob3N0LmMgYi9kcml2ZXJzL3VzYi9jZG5zMy9ob3N0LmMKPiBuZXcgZmlsZSBtb2RlIDEw MDY0NAo+IGluZGV4IDAwMDAwMDAwMDAwMC4uMGRkNDc5NzZjYjI4Cj4gLS0tIC9kZXYvbnVsbAo+ ICsrKyBiL2RyaXZlcnMvdXNiL2NkbnMzL2hvc3QuYwo+IEBAIC0wLDAgKzEsMjU2IEBACj4gKy8v IFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wCj4gKy8qCj4gKyAqIENhZGVuY2UgVVNC U1MgRFJEIERyaXZlciAtIGhvc3Qgc2lkZQo+ICsgKgo+ICsgKiBDb3B5cmlnaHQgKEMpIDIwMTgg Q2FkZW5jZSBEZXNpZ24gU3lzdGVtcy4KPiArICogQ29weXJpZ2h0IChDKSAyMDE4IE5YUAo+ICsg Kgo+ICsgKiBBdXRob3JzOiBQZXRlciBDaGVuIDxwZXRlci5jaGVuQG54cC5jb20+Cj4gKyAqCSAg ICBQYXdlbCBMYXN6Y3phayA8cGF3ZWxsQGNhZGVuY2UuY29tPgo+ICsgKi8KPiArCj4gKyNpbmNs dWRlIDxsaW51eC9rZXJuZWwuaD4KPiArI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgo+ICsjaW5j bHVkZSA8bGludXgvaW8uaD4KPiArI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KPiArI2luY2x1ZGUg PGxpbnV4L2RtYS1tYXBwaW5nLmg+Cj4gKyNpbmNsdWRlIDxsaW51eC91c2IuaD4KPiArI2luY2x1 ZGUgPGxpbnV4L3VzYi9oY2QuaD4KPiArI2luY2x1ZGUgPGxpbnV4L3BtX3J1bnRpbWUuaD4KPiAr I2luY2x1ZGUgPGxpbnV4L3VzYi9vZi5oPgo+ICsKPiArI2luY2x1ZGUgIi4uL2hvc3QveGhjaS5o Igo+ICsjaW5jbHVkZSAiY29yZS5oIgo+ICsjaW5jbHVkZSAiaG9zdC1leHBvcnQuaCIKPiArCj4g K3N0YXRpYyBzdHJ1Y3QgaGNfZHJpdmVyIF9fcmVhZF9tb3N0bHkgeGhjaV9jZG5zM19oY19kcml2 ZXI7Cj4gKwo+ICtzdGF0aWMgdm9pZCB4aGNpX2NkbnMzX3F1aXJrcyhzdHJ1Y3QgZGV2aWNlICpk ZXYsIHN0cnVjdCB4aGNpX2hjZCAqeGhjaSkKPiArewo+ICsJLyoKPiArCSAqIEFzIG9mIG5vdyBw bGF0Zm9ybSBkcml2ZXJzIGRvbid0IHByb3ZpZGUgTVNJIHN1cHBvcnQgc28gd2UgZW5zdXJlCj4g KwkgKiBoZXJlIHRoYXQgdGhlIGdlbmVyaWMgY29kZSBkb2VzIG5vdCB0cnkgdG8gbWFrZSBhIHBj aV9kZXYgZnJvbSBvdXIKPiArCSAqIGRldiBzdHJ1Y3QgaW4gb3JkZXIgdG8gc2V0dXAgTVNJCj4g KwkgKi8KPiArCXhoY2ktPnF1aXJrcyB8PSBYSENJX1BMQVQ7Cj4gK30KPiArCj4gK3N0YXRpYyBp bnQgeGhjaV9jZG5zM19zZXR1cChzdHJ1Y3QgdXNiX2hjZCAqaGNkKQo+ICt7Cj4gKwlzdHJ1Y3Qg eGhjaV9oY2QJKnhoY2kgPSBoY2RfdG9feGhjaShoY2QpOwo+ICsJdTMyIGNvbW1hbmQ7Cj4gKwlp bnQgcmV0Owo+ICsKPiArCXJldCA9IHhoY2lfZ2VuX3NldHVwKGhjZCwgeGhjaV9jZG5zM19xdWly a3MpOwo+ICsJaWYgKHJldCkKPiArCQlyZXR1cm4gcmV0Owo+ICsKPiArCS8qIHNldCB1c2JjbWQu RVUzUyAqLwo+ICsJY29tbWFuZCA9IHJlYWRsKCZ4aGNpLT5vcF9yZWdzLT5jb21tYW5kKTsKPiAr CWNvbW1hbmQgfD0gQ01EX1BNX0lOREVYOwo+ICsJd3JpdGVsKGNvbW1hbmQsICZ4aGNpLT5vcF9y ZWdzLT5jb21tYW5kKTsKPiArCj4gKwlyZXR1cm4gMDsKPiArfQo+ICsKPiArc3RhdGljIGNvbnN0 IHN0cnVjdCB4aGNpX2RyaXZlcl9vdmVycmlkZXMgeGhjaV9jZG5zM19vdmVycmlkZXMgX19pbml0 Y29uc3QgPSB7Cj4gKwkuZXh0cmFfcHJpdl9zaXplID0gc2l6ZW9mKHN0cnVjdCB4aGNpX2hjZCks Cj4gKwkucmVzZXQgPSB4aGNpX2NkbnMzX3NldHVwLAo+ICt9Owo+ICsKPiArc3RydWN0IGNkbnMz X2hvc3Qgewo+ICsJc3RydWN0IGRldmljZSBkZXY7Cj4gKwlzdHJ1Y3QgdXNiX2hjZCAqaGNkOwo+ ICt9Owo+ICsKPiArc3RhdGljIGlycXJldHVybl90IGNkbnMzX2hvc3RfaXJxKHN0cnVjdCBjZG5z MyAqY2RucykKPiArewo+ICsJc3RydWN0IGRldmljZSAqZGV2ID0gY2Rucy0+aG9zdF9kZXY7Cj4g KwlzdHJ1Y3QgdXNiX2hjZAkqaGNkOwo+ICsKPiArCWlmIChkZXYpCj4gKwkJaGNkID0gZGV2X2dl dF9kcnZkYXRhKGRldik7Cj4gKwllbHNlCj4gKwkJcmV0dXJuIElSUV9OT05FOwo+ICsKPiArCWlm IChoY2QpCj4gKwkJcmV0dXJuIHVzYl9oY2RfaXJxKGNkbnMtPmlycSwgaGNkKTsKPiArCWVsc2UK PiArCQlyZXR1cm4gSVJRX05PTkU7CgpXaHkgY2FuJ3QgeW91IGp1c3QgcmV1c2UgdGhlIHhoY2kt cGxhdGZvcm0gZHJpdmVyIGFuZCBsZXQgaXQgbWFuYWdlIHRoZSBJUlE/ClNpbmNlIGl0IGlzIGEg c2hhcmVkIElSUSwgZGlmZmVyZW50IGRyaXZlcnMgY2FuIHJlcXVlc3QgdGhlIHNhbWUgSVJRIGFu ZCByZXR1cm4gSVJRX05PTkUKaWYgdGhlIElSUSB3YXNuJ3QgZnJvbSB0aGVpciBkZXZpY2UuCgo+ ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCBjZG5zM19ob3N0X3JlbGVhc2Uoc3RydWN0IGRldmljZSAq ZGV2KQo+ICt7Cj4gKwlzdHJ1Y3QgY2RuczNfaG9zdCAqaG9zdCA9IGNvbnRhaW5lcl9vZihkZXYs IHN0cnVjdCBjZG5zM19ob3N0LCBkZXYpOwo+ICsKPiArCWtmcmVlKGhvc3QpOwo+ICt9Cj4gKwo+ ICtzdGF0aWMgaW50IGNkbnMzX2hvc3Rfc3RhcnQoc3RydWN0IGNkbnMzICpjZG5zKQo+ICt7Cj4g KwlzdHJ1Y3QgY2RuczNfaG9zdCAqaG9zdDsKPiArCXN0cnVjdCBkZXZpY2UgKmRldjsKPiArCXN0 cnVjdCBkZXZpY2UgKnN5c2RldjsKPiArCXN0cnVjdCB4aGNpX2hjZAkqeGhjaTsKPiArCWludCBy ZXQ7Cj4gKwo+ICsJaG9zdCA9IGt6YWxsb2Moc2l6ZW9mKCpob3N0KSwgR0ZQX0tFUk5FTCk7Cj4g KwlpZiAoIWhvc3QpCj4gKwkJcmV0dXJuIC1FTk9NRU07Cj4gKwo+ICsJZGV2ID0gJmhvc3QtPmRl djsKPiArCWRldi0+cmVsZWFzZSA9IGNkbnMzX2hvc3RfcmVsZWFzZTsKPiArCWRldi0+cGFyZW50 ID0gY2Rucy0+ZGV2Owo+ICsJZGV2X3NldF9uYW1lKGRldiwgInhoY2ktY2RuczMiKTsKPiArCWNk bnMtPmhvc3RfZGV2ID0gZGV2Owo+ICsJcmV0ID0gZGV2aWNlX3JlZ2lzdGVyKGRldik7Cj4gKwlp ZiAocmV0KQo+ICsJCWdvdG8gZXJyMTsKPiArCj4gKwlzeXNkZXYgPSBjZG5zLT5kZXY7Cj4gKwkv KiBUcnkgdG8gc2V0IDY0LWJpdCBETUEgZmlyc3QgKi8KPiArCWlmIChXQVJOX09OKCFzeXNkZXYt PmRtYV9tYXNrKSkKPiArCQkvKiBQbGF0Zm9ybSBkaWQgbm90IGluaXRpYWxpemUgZG1hX21hc2sg Ki8KPiArCQlyZXQgPSBkbWFfY29lcmNlX21hc2tfYW5kX2NvaGVyZW50KHN5c2RldiwKPiArCQkJ CQkJICAgRE1BX0JJVF9NQVNLKDY0KSk7Cj4gKwllbHNlCj4gKwkJcmV0ID0gZG1hX3NldF9tYXNr X2FuZF9jb2hlcmVudChzeXNkZXYsIERNQV9CSVRfTUFTSyg2NCkpOwo+ICsKPiArCS8qIElmIHNl dHRpbmcgNjQtYml0IERNQSBtYXNrIGZhaWxzLCBmYWxsIGJhY2sgdG8gMzItYml0IERNQSBtYXNr ICovCj4gKwlpZiAocmV0KSB7Cj4gKwkJcmV0ID0gZG1hX3NldF9tYXNrX2FuZF9jb2hlcmVudChz eXNkZXYsIERNQV9CSVRfTUFTSygzMikpOwo+ICsJCWlmIChyZXQpCj4gKwkJCXJldHVybiByZXQ7 Cj4gKwl9Cj4gKwo+ICsJcG1fcnVudGltZV9zZXRfYWN0aXZlKGRldik7Cj4gKwlwbV9ydW50aW1l X25vX2NhbGxiYWNrcyhkZXYpOwo+ICsJcG1fcnVudGltZV9lbmFibGUoZGV2KTsKPiArCWhvc3Qt PmhjZCA9IF9fdXNiX2NyZWF0ZV9oY2QoJnhoY2lfY2RuczNfaGNfZHJpdmVyLCBzeXNkZXYsIGRl diwKPiArCQkJCSAgICAgZGV2X25hbWUoZGV2KSwgTlVMTCk7Cj4gKwlpZiAoIWhvc3QtPmhjZCkg ewo+ICsJCXJldCA9IC1FTk9NRU07Cj4gKwkJZ290byBlcnIyOwo+ICsJfQo+ICsKPiArCWhvc3Qt PmhjZC0+cmVncyA9IGNkbnMtPnhoY2lfcmVnczsKPiArCWhvc3QtPmhjZC0+cnNyY19zdGFydCA9 IGNkbnMtPnhoY2lfcmVzLT5zdGFydDsKPiArCWhvc3QtPmhjZC0+cnNyY19sZW4gPSByZXNvdXJj ZV9zaXplKGNkbnMtPnhoY2lfcmVzKTsKPiArCj4gKwlkZXZpY2Vfd2FrZXVwX2VuYWJsZShob3N0 LT5oY2QtPnNlbGYuY29udHJvbGxlcik7Cj4gKwl4aGNpID0gaGNkX3RvX3hoY2koaG9zdC0+aGNk KTsKPiArCj4gKwl4aGNpLT5tYWluX2hjZCA9IGhvc3QtPmhjZDsKPiArCXhoY2ktPnNoYXJlZF9o Y2QgPSBfX3VzYl9jcmVhdGVfaGNkKCZ4aGNpX2NkbnMzX2hjX2RyaXZlciwgc3lzZGV2LCBkZXYs Cj4gKwkJCQkJICAgIGRldl9uYW1lKGRldiksIGhvc3QtPmhjZCk7Cj4gKwlpZiAoIXhoY2ktPnNo YXJlZF9oY2QpIHsKPiArCQlyZXQgPSAtRU5PTUVNOwo+ICsJCWdvdG8gZXJyMzsKPiArCX0KPiAr Cj4gKwlob3N0LT5oY2QtPnRwbF9zdXBwb3J0ID0gb2ZfdXNiX2hvc3RfdHBsX3N1cHBvcnQoc3lz ZGV2LT5vZl9ub2RlKTsKPiArCXhoY2ktPnNoYXJlZF9oY2QtPnRwbF9zdXBwb3J0ID0gaG9zdC0+ aGNkLT50cGxfc3VwcG9ydDsKPiArCXJldCA9IHVzYl9hZGRfaGNkKGhvc3QtPmhjZCwgMCwgSVJR Rl9TSEFSRUQpOwo+ICsJaWYgKHJldCkKPiArCQlnb3RvIGVycjQ7Cj4gKwo+ICsJcmV0ID0gdXNi X2FkZF9oY2QoeGhjaS0+c2hhcmVkX2hjZCwgMCwgSVJRRl9TSEFSRUQpOwo+ICsJaWYgKHJldCkK PiArCQlnb3RvIGVycjU7Cj4gKwo+ICsJZGV2aWNlX3NldF93YWtldXBfY2FwYWJsZShkZXYsIHRy dWUpOwoKQWxsIHRoaXMgaXMgYmVpbmcgZG9uZSBieSB0aGUgeGhjaS1wbGF0LmMKCllvdSBjYW4g bWFrZSB1c2Ugb2YgaXQgYnkganVzdCBjcmVhdGluZyBhIHhoY2ktaGNkIHBsYXRmb3JtIGRldmlj ZS4KCmUuZy4KcGxhdGZvcm1fZGV2aWNlX2FsbG9jKCJ4aGNpLWhjZCIsIFBMQVRGT1JNX0RFVklE X0FVVE8pOwpwbGF0Zm9ybV9kZXZpY2VfYWRkX3Jlc291cmNlcygpIHRvIGFkZCBJUlEgYW5kIG1l bW9yeSByZXNvdXJjZS4KcGxhdGZvcm1fZGV2aWNlX2FkZF9wcm9wZXJ0aWVzKCkgdG8gYWRkIGFu eSBxdWlya3MuCnBsYXRmb3JtX2RldmljZV9hZGQoKQoKCj4gKwo+ICsJcmV0dXJuIDA7Cj4gKwo+ ICtlcnI1Ogo+ICsJdXNiX3JlbW92ZV9oY2QoaG9zdC0+aGNkKTsKPiArZXJyNDoKPiArCXVzYl9w dXRfaGNkKHhoY2ktPnNoYXJlZF9oY2QpOwo+ICtlcnIzOgo+ICsJdXNiX3B1dF9oY2QoaG9zdC0+ aGNkKTsKPiArZXJyMjoKPiArCWRldmljZV9kZWwoZGV2KTsKPiArZXJyMToKPiArCXB1dF9kZXZp Y2UoZGV2KTsKPiArCWNkbnMtPmhvc3RfZGV2ID0gTlVMTDsKPiArCXJldHVybiByZXQ7Cj4gK30K PiArCj4gK3N0YXRpYyB2b2lkIGNkbnMzX2hvc3Rfc3RvcChzdHJ1Y3QgY2RuczMgKmNkbnMpCj4g K3sKPiArCXN0cnVjdCBkZXZpY2UgKmRldiA9IGNkbnMtPmhvc3RfZGV2Owo+ICsJc3RydWN0IHho Y2lfaGNkCSp4aGNpOwo+ICsJc3RydWN0IHVzYl9oY2QJKmhjZDsKPiArCj4gKwlpZiAoZGV2KSB7 Cj4gKwkJaGNkID0gZGV2X2dldF9kcnZkYXRhKGRldik7Cj4gKwkJeGhjaSA9IGhjZF90b194aGNp KGhjZCk7Cj4gKwkJdXNiX3JlbW92ZV9oY2QoeGhjaS0+c2hhcmVkX2hjZCk7Cj4gKwkJdXNiX3Jl bW92ZV9oY2QoaGNkKTsKPiArCQlzeW5jaHJvbml6ZV9pcnEoY2Rucy0+aXJxKTsKPiArCQl1c2Jf cHV0X2hjZCh4aGNpLT5zaGFyZWRfaGNkKTsKPiArCQl1c2JfcHV0X2hjZChoY2QpOwo+ICsJCWNk bnMtPmhvc3RfZGV2ID0gTlVMTDsKPiArCQlwbV9ydW50aW1lX3NldF9zdXNwZW5kZWQoZGV2KTsK PiArCQlwbV9ydW50aW1lX2Rpc2FibGUoZGV2KTsKPiArCQlkZXZpY2VfZGVsKGRldik7Cj4gKwkJ cHV0X2RldmljZShkZXYpOwo+ICsJfQoKWW91IGNhbiByZXBsYWNlIHRoaXMgd2l0aCBqdXN0Cglw bGF0Zm9ybV9kZXZpY2VfdW5yZWdpc3Rlcih4aGNpX2Rldik7Cgo+ICt9Cj4gKwo+ICsjaWYgQ09O RklHX1BNCj4gK3N0YXRpYyBpbnQgY2RuczNfaG9zdF9zdXNwZW5kKHN0cnVjdCBjZG5zMyAqY2Ru cywgYm9vbCBkb193YWtldXApCj4gK3sKPiArCXN0cnVjdCBkZXZpY2UgKmRldiA9IGNkbnMtPmhv c3RfZGV2Owo+ICsJc3RydWN0IHhoY2lfaGNkCSp4aGNpOwo+ICsKPiArCWlmICghZGV2KQo+ICsJ CXJldHVybiAwOwo+ICsKPiArCXhoY2kgPSBoY2RfdG9feGhjaShkZXZfZ2V0X2RydmRhdGEoZGV2 KSk7Cj4gKwlyZXR1cm4geGhjaV9zdXNwZW5kKHhoY2ksIGRvX3dha2V1cCk7Cj4gK30KPiArCj4g K3N0YXRpYyBpbnQgY2RuczNfaG9zdF9yZXN1bWUoc3RydWN0IGNkbnMzICpjZG5zLCBib29sIGhp YmVybmF0ZWQpCj4gK3sKPiArCXN0cnVjdCBkZXZpY2UgKmRldiA9IGNkbnMtPmhvc3RfZGV2Owo+ ICsJc3RydWN0IHhoY2lfaGNkCSp4aGNpOwo+ICsKPiArCWlmICghZGV2KQo+ICsJCXJldHVybiAw Owo+ICsKPiArCXhoY2kgPSBoY2RfdG9feGhjaShkZXZfZ2V0X2RydmRhdGEoZGV2KSk7Cj4gKwly ZXR1cm4geGhjaV9yZXN1bWUoeGhjaSwgaGliZXJuYXRlZCk7Cj4gK30KClRoZXNlIHdvbid0IGJl IHJlcXVpcmVkIGFueSBtb3JlIGFzIHhoY2ktcGxhdCBpcyBkb2luZyB0aGlzLgoKPiArI2VuZGlm IC8qIENPTkZJR19QTSAqLwo+ICsKPiAraW50IGNkbnMzX2hvc3RfaW5pdChzdHJ1Y3QgY2RuczMg KmNkbnMpCj4gK3sKPiArCXN0cnVjdCBjZG5zM19yb2xlX2RyaXZlciAqcmRydjsKPiArCj4gKwly ZHJ2ID0gZGV2bV9remFsbG9jKGNkbnMtPmRldiwgc2l6ZW9mKCpyZHJ2KSwgR0ZQX0tFUk5FTCk7 Cj4gKwlpZiAoIXJkcnYpCj4gKwkJcmV0dXJuIC1FTk9NRU07Cj4gKwo+ICsJcmRydi0+c3RhcnQJ PSBjZG5zM19ob3N0X3N0YXJ0Owo+ICsJcmRydi0+c3RvcAk9IGNkbnMzX2hvc3Rfc3RvcDsKPiAr CXJkcnYtPmlycQk9IGNkbnMzX2hvc3RfaXJxOwo+ICsjaWYgQ09ORklHX1BNCj4gKwlyZHJ2LT5z dXNwZW5kCT0gY2RuczNfaG9zdF9zdXNwZW5kOwo+ICsJcmRydi0+cmVzdW1lCT0gY2RuczNfaG9z dF9yZXN1bWU7Cj4gKyNlbmRpZiAvKiBDT05GSUdfUE0gKi8KPiArCXJkcnYtPm5hbWUJPSAiaG9z dCI7Cj4gKwljZG5zLT5yb2xlc1tDRE5TM19ST0xFX0hPU1RdID0gcmRydjsKPiArCj4gKwlyZXR1 cm4gMDsKPiArfQo+ICsKPiArdm9pZCBjZG5zM19ob3N0X3JlbW92ZShzdHJ1Y3QgY2RuczMgKmNk bnMpCj4gK3sKPiArCWNkbnMzX2hvc3Rfc3RvcChjZG5zKTsKCmNhbGxpbmcgY2RuczNfaG9zdF9z dG9wKCkgaGVyZSBjYW4gbGVhZCB0byBwcm9ibGVtcyBhcyBDb250cm9sbGVyIG1pZ2h0IGJlIGlu CnBlcmlwaGVyYWwgbW9kZSBhdCB0aGlzIHBvaW50LiBUaGUgY29yZSBkcml2ZXIgbmVlZHMgdG8g ZW5zdXJlIHRoYXQgcmVsZXZhbnQgcm9sZQppcyBzdG9wcGVkIGJlZm9yZSBjYWxsaW5nIGNkbnMz X2hvc3RfcmVtb3ZlKCkuCgpIZXJlIHlvdSBuZWVkIHRvIHVucmVnaXN0ZXIgdGhlIHJvbGUgZHJp dmVyIHRob3VnaC4KCmNkbnMtPnJvbGVzW0NETlMzX1JPTEVfSE9TVF0gPSBOVUxMOwoKPiArfQo+ ICsKPiArdm9pZCBfX2luaXQgY2RuczNfaG9zdF9kcml2ZXJfaW5pdCh2b2lkKQo+ICt7Cj4gKwl4 aGNpX2luaXRfZHJpdmVyKCZ4aGNpX2NkbnMzX2hjX2RyaXZlciwgJnhoY2lfY2RuczNfb3ZlcnJp ZGVzKTsKPiArfQo+IAoKY2hlZXJzLAotcm9nZXIK