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,v1,04/14] usb:cdns3: Added DRD support From: Roger Quadros Message-Id: <5BE1A5E6.1000703@ti.com> Date: Tue, 6 Nov 2018 16:32:06 +0200 To: Pawel Laszczak , gregkh@linuxfoundation.org Cc: linux-usb@vger.kernel.org, linux-kernel@vger.kernel.org, adouglas@cadence.com, jbergsagel@ti.com, peter.chen@nxp.com, pjez@cadence.com, kurahul@cadence.com List-ID: T24gMDMvMTEvMTggMTk6NTEsIFBhd2VsIExhc3pjemFrIHdyb3RlOgo+IFBhdGNoIGFkZHMgc3Vw cG9ydHMgZm9yIGRldGVjdGluZyBIb3N0L0RldmljZSBtb2RlLgo+IENvbnRyb2xsZXIgaGFzIGFk ZGl0aW9uYWwgT1RHIHJlZ2lzdGVyIHRoYXQgYWxsb3cKPiBpbXBsZW1lbnQgZXZlbiB3aG9sZSBP VEcgZnVuY3Rpb25hbGl0eS4KPiBBdCB0aGlzIG1vbWVudCBwYXRjaCBhZGRzIHN1cHBvcnQgb25s eSBmb3IgZGV0ZWN0aW5nCj4gdGhlIGFwcHJvcHJpYXRlIG1vZGUgYmFzZWQgb24gc3RyYXAgcGlu cyBhbmQgSUQgcGluLgo+IAo+IFNpZ25lZC1vZmYtYnk6IFBhd2VsIExhc3pjemFrIDxwYXdlbGxA Y2FkZW5jZS5jb20+Cj4gLS0tCj4gIGRyaXZlcnMvdXNiL2NkbnMzL01ha2VmaWxlIHwgICAyICst Cj4gIGRyaXZlcnMvdXNiL2NkbnMzL2NvcmUuYyAgIHwgIDIyICsrLS0KPiAgZHJpdmVycy91c2Iv Y2RuczMvZHJkLmMgICAgfCAyMTkgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr Kwo+ICBkcml2ZXJzL3VzYi9jZG5zMy9kcmQuaCAgICB8IDEyMiArKysrKysrKysrKysrKysrKysr KysKPiAgNCBmaWxlcyBjaGFuZ2VkLCAzNTYgaW5zZXJ0aW9ucygrKSwgOSBkZWxldGlvbnMoLSkK PiAgY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvdXNiL2NkbnMzL2RyZC5jCj4gIGNyZWF0ZSBt b2RlIDEwMDY0NCBkcml2ZXJzL3VzYi9jZG5zMy9kcmQuaAo+IAo+IGRpZmYgLS1naXQgYS9kcml2 ZXJzL3VzYi9jZG5zMy9NYWtlZmlsZSBiL2RyaXZlcnMvdXNiL2NkbnMzL01ha2VmaWxlCj4gaW5k ZXggMDgzNjc2Yzc3NDhmLi5kNGNjZmI0OWQ4NDQgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy91c2Iv Y2RuczMvTWFrZWZpbGUKPiArKysgYi9kcml2ZXJzL3VzYi9jZG5zMy9NYWtlZmlsZQo+IEBAIC0x LDcgKzEsNyBAQAo+ICBvYmotJChDT05GSUdfVVNCX0NETlMzKQkJCSs9IGNkbnMzLm8KPiAgb2Jq LSQoQ09ORklHX1VTQl9DRE5TM19QQ0lfV1JBUCkJKz0gY2RuczMtcGNpLm8KPiAgCj4gLWNkbnMz LXkJCQkJCTo9IGNvcmUubwo+ICtjZG5zMy15CQkJCQk6PSBjb3JlLm8gZHJkLm8KPiAgY2RuczMt JChDT05GSUdfVVNCX0NETlMzX0dBREdFVCkJKz0gZ2FkZ2V0Lm8KPiAgY2RuczMtJChDT05GSUdf VVNCX0NETlMzX0hPU1QpCQkrPSBob3N0Lm8KPiAgY2RuczMtcGNpLXkJCSAJCTo9IGNkbnMzLXBj aS13cmFwLm8KPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvY2RuczMvY29yZS5jIGIvZHJpdmVy cy91c2IvY2RuczMvY29yZS5jCj4gaW5kZXggNzI3MTM2MjM1OTU3Li4yMGFlOWU3Njk0MGUgMTAw NjQ0Cj4gLS0tIGEvZHJpdmVycy91c2IvY2RuczMvY29yZS5jCj4gKysrIGIvZHJpdmVycy91c2Iv Y2RuczMvY29yZS5jCj4gQEAgLTE4LDYgKzE4LDcgQEAKPiAgI2luY2x1ZGUgImNvcmUuaCIKPiAg I2luY2x1ZGUgImhvc3QtZXhwb3J0LmgiCj4gICNpbmNsdWRlICJnYWRnZXQtZXhwb3J0LmgiCj4g KyNpbmNsdWRlICJkcmQuaCIKPiAgCj4gIHN0YXRpYyBpbmxpbmUgc3RydWN0IGNkbnMzX3JvbGVf ZHJpdmVyICpjZG5zM19yb2xlKHN0cnVjdCBjZG5zMyAqY2RucykKPiAgewo+IEBAIC03MCw4ICs3 MSwxMCBAQCBzdGF0aWMgdm9pZCBjZG5zM19zZXRfcm9sZShzdHJ1Y3QgY2RuczMgKmNkbnMsIGVu dW0gY2RuczNfcm9sZXMgcm9sZSkKPiAgc3RhdGljIGVudW0gY2RuczNfcm9sZXMgY2RuczNfZ2V0 X3JvbGUoc3RydWN0IGNkbnMzICpjZG5zKQo+ICB7Cj4gIAlpZiAoY2Rucy0+cm9sZXNbQ0ROUzNf Uk9MRV9IT1NUXSAmJiBjZG5zLT5yb2xlc1tDRE5TM19ST0xFX0dBREdFVF0pIHsKPiAtCQkvL1RP RE86IGltcGxlbWVudHMgc2VsZWN0aW5nIGRldmljZS9ob3N0IG1vZGUKPiAtCQlyZXR1cm4gQ0RO UzNfUk9MRV9IT1NUOwo+ICsJCWlmIChjZG5zM19pc19ob3N0KGNkbnMpKQo+ICsJCQlyZXR1cm4g Q0ROUzNfUk9MRV9IT1NUOwo+ICsJCWlmIChjZG5zM19pc19kZXZpY2UoY2RucykpCj4gKwkJCXJl dHVybiBDRE5TM19ST0xFX0dBREdFVDsKPiAgCX0KPiAgCXJldHVybiBjZG5zLT5yb2xlc1tDRE5T M19ST0xFX0hPU1RdCj4gIAkJPyBDRE5TM19ST0xFX0hPU1QKPiBAQCAtMTQxLDYgKzE0NCwxMiBA QCBzdGF0aWMgaXJxcmV0dXJuX3QgY2RuczNfaXJxKGludCBpcnEsIHZvaWQgKmRhdGEpCj4gIAkJ cmV0dXJuIElSUV9IQU5ETEVEOwo+ICAJfQo+ICAKPiArCWlmIChjZG5zLT5kcl9tb2RlID09IFVT Ql9EUl9NT0RFX09URykgewo+ICsJCXJldCA9IGNkbnMzX2RyZF9pcnEoY2Rucyk7Cj4gKwkJaWYg KHJldCA9PSBJUlFfSEFORExFRCkKPiArCQkJcmV0dXJuIHJldDsKPiArCX0KPiArCj4gIAkvKiBI YW5kbGUgZGV2aWNlL2hvc3QgaW50ZXJydXB0ICovCj4gIAlpZiAoY2Rucy0+cm9sZSAhPSBDRE5T M19ST0xFX0VORCkKPiAgCQlyZXQgPSBjZG5zM19yb2xlKGNkbnMpLT5pcnEoY2Rucyk7Cj4gQEAg LTIwMiwxMiArMjExLDggQEAgc3RhdGljIHZvaWQgY2RuczNfcm9sZV9zd2l0Y2goc3RydWN0IHdv cmtfc3RydWN0ICp3b3JrKQo+ICAJYm9vbCBkZXZpY2UsIGhvc3Q7Cj4gIAo+ICAJY2RucyA9IGNv bnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgY2RuczMsIHJvbGVfc3dpdGNoX3dxKTsKPiAtCj4gLQkv L1RPRE86IGltcGxlbWVudHMgdGhpcyBmdW5jdGlvbnMuCj4gLQkvL2hvc3QgPSBjZG5zM19pc19o b3N0KGNkbnMpOwo+IC0JLy9kZXZpY2UgPSBjZG5zM19pc19kZXZpY2UoY2Rucyk7Cj4gLQlob3N0 ID0gMTsKPiAtCWRldmljZSA9IDA7Cj4gKwlob3N0ID0gY2RuczNfaXNfaG9zdChjZG5zKTsKPiAr CWRldmljZSA9IGNkbnMzX2lzX2RldmljZShjZG5zKTsKPiAgCj4gIAlpZiAoaG9zdCkgewo+ICAJ CWlmIChjZG5zLT5yb2xlc1tDRE5TM19ST0xFX0hPU1RdKQo+IEBAIC0yODYsNiArMjkxLDcgQEAg c3RhdGljIGludCBjZG5zM19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQo+ICAJ aWYgKHJldCkKPiAgCQlnb3RvIGVycjM7Cj4gIAo+ICsJcmV0ID0gY2RuczNfZHJkX3Byb2JlKGNk bnMpOwo+ICAJaWYgKHJldCkKPiAgCQlnb3RvIGVycjM7Cj4gIAo+IGRpZmYgLS1naXQgYS9kcml2 ZXJzL3VzYi9jZG5zMy9kcmQuYyBiL2RyaXZlcnMvdXNiL2NkbnMzL2RyZC5jCj4gbmV3IGZpbGUg bW9kZSAxMDA2NDQKPiBpbmRleCAwMDAwMDAwMDAwMDAuLjVkOTg4NDMyZWRiOAo+IC0tLSAvZGV2 L251bGwKPiArKysgYi9kcml2ZXJzL3VzYi9jZG5zMy9kcmQuYwo+IEBAIC0wLDAgKzEsMjE5IEBA Cj4gKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wCj4gKy8qCj4gKyAqIENhZGVu Y2UgVVNCU1MgRFJEIERyaXZlci4KPiArICoKPiArICogQ29weXJpZ2h0IChDKSAyMDE4IENhZGVu Y2UuCj4gKyAqCj4gKyAqIEF1dGhvcjogUGF3ZWwgTGFzemN6YWsgPHBhd2VsbEBjYWRlbmNlLmNv bQo+ICsgKgo+ICsgKi8KPiArI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgo+ICsjaW5jbHVkZSA8 bGludXgvaW50ZXJydXB0Lmg+Cj4gKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgo+ICsjaW5jbHVk ZSA8bGludXgvdXNiL290Zy5oPgo+ICsKPiArI2luY2x1ZGUgImdhZGdldC5oIgo+ICsjaW5jbHVk ZSAiZHJkLmgiCj4gKwo+ICsvKioKPiArICogY2RuczNfc2V0X21vZGUgLSBjaGFuZ2UgbW9kZSBv ZiBPVEcgQ29yZQo+ICsgKiBAY2RuczogcG9pbnRlciB0byBjb250ZXh0IHN0cnVjdHVyZQo+ICsg KiBAbW9kZTogc2VsZWN0ZWQgbW9kZSBmcm9tIGNkbnNfcm9sZQo+ICsgKi8KPiArdm9pZCBjZG5z M19zZXRfbW9kZShzdHJ1Y3QgY2RuczMgKmNkbnMsIHUzMiBtb2RlKQo+ICt7Cj4gKwl1MzIgcmVn Owo+ICsKPiArCXN3aXRjaCAobW9kZSkgewo+ICsJY2FzZSBDRE5TM19ST0xFX0dBREdFVDoKCkkg dGhpbmsgd2UgbmVlZCB0byBtYWtlIGEgY2xlYXIgZGlzdGluY3Rpb24gYmV0d2VlbiBtb2RlIGFu ZCByb2xlLgoKTW9kZSBpcyB0aGUgY29udHJvbGxlciBtb2RlLiAoSG9zdC1vbmx5LCBEZXZpY2Ut b25seSwgZHVhbC1yb2xlW290Z10pClJvbGUgaXMgdGhlIFVTQiBjb250cm9sbGVyIHN0YXRlIChB LUhvc3QsIEItRGV2aWNlLCBJZGxlKQoKY25kcy0+ZHJfbW9kZSBzaG91bGQgY29ycmVzcG9uZCB0 byBlbnVtIHVzYl9kcl9tb2RlIHdoaWNoIHNob3VsZCBiZSB0aGUgYXJndW1lbnQKZm9yIHRoaXMg ZnVuY3Rpb24gaWYgeW91IHdhbnQgdG8gc2V0IG1vZGUuCgo+ICsJCWRldl9pbmZvKGNkbnMtPmRl diwgIlNldCBjb250cm9sbGVyIHRvIEdhZGdldCBtb2RlXG4iKTsKPiArCQl3cml0ZWwoT1RHQ01E X0RFVl9CVVNfUkVRIHwgT1RHQ01EX09UR19ESVMsCj4gKwkJICAgICAgICZjZG5zLT5vdGdfcmVn cy0+Y21kKTsKPiArCQlicmVhazsKPiArCWNhc2UgQ0ROUzNfUk9MRV9IT1NUOgo+ICsJCWRldl9p bmZvKGNkbnMtPmRldiwgIlNldCBjb250cm9sbGVyIHRvIEhvc3QgbW9kZVxuIik7Cj4gKwkJd3Jp dGVsKE9UR0NNRF9IT1NUX0JVU19SRVEgfCBPVEdDTURfT1RHX0RJUywKPiArCQkgICAgICAgJmNk bnMtPm90Z19yZWdzLT5jbWQpOwo+ICsJCWJyZWFrOwo+ICsJY2FzZSBDRE5TM19ST0xFX09URzoK PiArCQlkZXZfaW5mbyhjZG5zLT5kZXYsICJTZXQgY29udHJvbGxlciB0byBPVEcgbW9kZVxuIik7 Cj4gKwkJcmVnID0gcmVhZGwoJmNkbnMtPm90Z19yZWdzLT5jdHJsMSk7Cj4gKwkJcmVnIHw9IE9U R0NUUkwxX0lEUFVMTFVQOwo+ICsJCXdyaXRlbChyZWcsICZjZG5zLT5vdGdfcmVncy0+Y3RybDEp Owo+ICsKPiArCQkvKiB3YWl0IHVudGlsIHZhbGlkIElEIChJRF9WQUxVRSkgY2FuIGJlIHNhbXBs ZWQgKDUwbXMpLiAqLwo+ICsJCW1kZWxheSg1MCk7Cj4gKwkJYnJlYWs7Cj4gKwlkZWZhdWx0Ogo+ ICsJCWRldl9lcnIoY2Rucy0+ZGV2LCAiVW5zdXBwb3J0ZWQgbW9kZSBvZiBvcGVyYXRpb24gJWRc biIsIG1vZGUpOwo+ICsJCXJldHVybjsKPiArCX0KPiArfQo+ICsKPiArc3RhdGljIGludCBjZG5z M19vdGdfZ2V0X2lkKHN0cnVjdCBjZG5zMyAqY2RucykKPiArewo+ICsJaW50IGlkOwo+ICsKPiAr CWlkID0gcmVhZGwoJmNkbnMtPm90Z19yZWdzLT5zdHMpICYgT1RHU1RTX0lEX1ZBTFVFOwo+ICsJ ZGV2X2RiZyhjZG5zLT5kZXYsICJPVEcgSUQ6ICVkIiwgaWQpOwo+ICsJcmV0dXJuIGlkOwo+ICt9 Cj4gKwo+ICtpbnQgY2RuczNfaXNfaG9zdChzdHJ1Y3QgY2RuczMgKmNkbnMpCj4gK3sKPiArCWlm IChjZG5zLT5kcl9tb2RlID09IFVTQl9EUl9NT0RFX0hPU1QpCj4gKwkJcmV0dXJuIDE7CgpXaHkg bm90IGp1c3QgdXNlIGNkbnMtPmRyX21vZGUgZGlyZWN0bHk/CgpEbyB5b3Ugd2FudCB0byBjaGVj ayBpZiBpdCBpcyBob3N0IHJvbGUgaGVyZT8gZS5nLiBpZiBkcl9tb2RlID0gVVNCX0RSX01PREVf T1RHLgoKPiArCj4gKwlyZXR1cm4gMDsKPiArfQo+ICsKPiAraW50IGNkbnMzX2lzX2RldmljZShz dHJ1Y3QgY2RuczMgKmNkbnMpCj4gK3sKPiArCWlmIChjZG5zLT5kcl9tb2RlID09IFVTQl9EUl9N T0RFX1BFUklQSEVSQUwpCj4gKwkJcmV0dXJuIDE7Cj4gKwo+ICsJcmV0dXJuIDA7Cj4gK30KPiAr Cj4gKy8qKgo+ICsgKiBjZG5zM19vdGdfZGlzYWJsZV9pcnEgLSBEaXNhYmxlIGFsbCBPVEcgaW50 ZXJydXB0cwo+ICsgKiBAY2RuczogUG9pbnRlciB0byBjb250cm9sbGVyIGNvbnRleHQgc3RydWN0 dXJlCj4gKyAqLwo+ICtzdGF0aWMgdm9pZCBjZG5zM19vdGdfZGlzYWJsZV9pcnEoc3RydWN0IGNk bnMzICpjZG5zKQo+ICt7Cj4gKwl3cml0ZWwoMCwgJmNkbnMtPm90Z19yZWdzLT5pZW4pOwo+ICt9 Cj4gKwo+ICsvKioKPiArICogY2RuczNfb3RnX2VuYWJsZV9pcnEgLSBlbmFibGUgaWQgYW5kIHNl c3NfdmFsaWQgaW50ZXJydXB0cwo+ICsgKiBAY2RuczogUG9pbnRlciB0byBjb250cm9sbGVyIGNv bnRleHQgc3RydWN0dXJlCj4gKyAqLwo+ICtzdGF0aWMgdm9pZCBjZG5zM19vdGdfZW5hYmxlX2ly cShzdHJ1Y3QgY2RuczMgKmNkbnMpCj4gK3sKPiArCXdyaXRlbChPVEdJRU5fSURfQ0hBTkdFX0lO VCB8IE9UR0lFTl9WQlVTVkFMSURfUklTRV9JTlQgfAo+ICsJICAgICAgIE9UR0lFTl9WQlVTVkFM SURfRkFMTF9JTlQsICZjZG5zLT5vdGdfcmVncy0+aWVuKTsKPiArfQo+ICsKPiArLyoqCj4gKyAq IGNkbnMzX2RyZF9pbml0IC0gaW5pdGlhbGl6ZSBkcmQgY29udHJvbGxlcgo+ICsgKiBAY2Ruczog UG9pbnRlciB0byBjb250cm9sbGVyIGNvbnRleHQgc3RydWN0dXJlCj4gKyAqCj4gKyAqIFJldHVy bnMgMCBvbiBzdWNjZXNzIG90aGVyd2lzZSBuZWdhdGl2ZSBlcnJubwo+ICsgKi8KPiArc3RhdGlj IHZvaWQgY2RuczNfZHJkX2luaXQoc3RydWN0IGNkbnMzICpjZG5zKQo+ICt7Cj4gKwljZG5zM19v dGdfZGlzYWJsZV9pcnEoY2Rucyk7Cj4gKwkvKiBjbGVhciBhbGwgaW50ZXJydXB0cyAqLwo+ICsJ d3JpdGVsKH4wLCAmY2Rucy0+b3RnX3JlZ3MtPml2ZWN0KTsKPiArCj4gKwljZG5zM19zZXRfbW9k ZShjZG5zLCBDRE5TM19ST0xFX09URyk7Cj4gKwo+ICsJY2RuczNfb3RnX2VuYWJsZV9pcnEoY2Ru cyk7Cj4gK30KPiArCj4gKy8qKgo+ICsgKiBjZG5zM19jb3JlX2luaXRfbW9kZSAtIGluaXRpYWxp emUgbW9kZSBvZiBvcGVyYXRpb24KPiArICogQGNkbnM6IFBvaW50ZXIgdG8gY29udHJvbGxlciBj b250ZXh0IHN0cnVjdHVyZQo+ICsgKgo+ICsgKiBSZXR1cm5zIDAgb24gc3VjY2VzcyBvdGhlcndp c2UgbmVnYXRpdmUgZXJybm8KPiArICovCj4gK3N0YXRpYyBpbnQgY2RuczNfY29yZV9pbml0X21v ZGUoc3RydWN0IGNkbnMzICpjZG5zKQo+ICt7Cj4gKwlpbnQgcmV0ID0gMDsKPiArCj4gKwlzd2l0 Y2ggKGNkbnMtPmRyX21vZGUpIHsKPiArCWNhc2UgVVNCX0RSX01PREVfUEVSSVBIRVJBTDoKPiAr CQljZG5zM19zZXRfbW9kZShjZG5zLCBDRE5TM19ST0xFX0dBREdFVCk7Cj4gKwkJYnJlYWs7Cj4g KwljYXNlIFVTQl9EUl9NT0RFX0hPU1Q6Cj4gKwkJY2RuczNfc2V0X21vZGUoY2RucywgQ0ROUzNf Uk9MRV9IT1NUKTsKPiArCQlicmVhazsKPiArCWNhc2UgVVNCX0RSX01PREVfT1RHOgo+ICsJCWNk bnMzX2RyZF9pbml0KGNkbnMpOwo+ICsJCWJyZWFrOwo+ICsJZGVmYXVsdDoKPiArCQlkZXZfZXJy KGNkbnMtPmRldiwgIlVuc3VwcG9ydGVkIG1vZGUgb2Ygb3BlcmF0aW9uICVkXG4iLAo+ICsJCQlj ZG5zLT5kcl9tb2RlKTsKPiArCQlyZXR1cm4gLUVJTlZBTDsKPiArCX0KPiArCgpMb29rcyBsaWtl IHRoaXMgZnVuY3Rpb24gc2hvdWxkIGJlIG9uIGNvcmUuYz8KCj4gKwlyZXR1cm4gcmV0Owo+ICt9 Cj4gKwo+ICtpcnFyZXR1cm5fdCBjZG5zM19kcmRfaXJxKHN0cnVjdCBjZG5zMyAqY2RucykKPiAr ewo+ICsJaXJxcmV0dXJuX3QgcmV0ID0gSVJRX05PTkU7Cj4gKwl1MzIgcmVnOwo+ICsKPiArCWlm IChjZG5zLT5kcl9tb2RlICE9IFVTQl9EUl9NT0RFX09URykKPiArCQlyZXR1cm4gcmV0Owo+ICsK PiArCXJlZyA9IHJlYWRsKCZjZG5zLT5vdGdfcmVncy0+aXZlY3QpOwo+ICsJaWYgKCFyZWcpCj4g KwkJcmV0dXJuIHJldDsKPiArCj4gKwlpZiAocmVnICYgT1RHSUVOX0lEX0NIQU5HRV9JTlQpIHsK PiArCQlpbnQgaWQgPSBjZG5zM19vdGdfZ2V0X2lkKGNkbnMpOwo+ICsKPiArCQlkZXZfZGJnKGNk bnMtPmRldiwgIk9URyBJUlE6IG5ldyBJRDogJWRcbiIsCj4gKwkJCWNkbnMzX290Z19nZXRfaWQo Y2RucykpOwo+ICsKPiArCQlpZiAoaWQpCj4gKwkJCWNkbnMtPmRlc2lyZWRfcm9sZSA9IENETlMz X1JPTEVfR0FER0VUOwo+ICsJCWVsc2UKPiArCQkJY2Rucy0+ZGVzaXJlZF9yb2xlID0gQ0ROUzNf Uk9MRV9HQURHRVQ7CgpDRE5TM19ST0xFX0hPU1QuCj4gKwo+ICsJCXF1ZXVlX3dvcmsoc3lzdGVt X2ZyZWV6YWJsZV93cSwgJmNkbnMtPnJvbGVfc3dpdGNoX3dxKTsKPiArCj4gKwkJcmV0ID0gSVJR X0hBTkRMRUQ7Cj4gKwl9Cj4gKwo+ICsJd3JpdGVsKH4wLCAmY2Rucy0+b3RnX3JlZ3MtPml2ZWN0 KTsKPiArCXJldHVybiBJUlFfSEFORExFRDsKPiArfQo+ICsKPiAraW50IGNkbnMzX2RyZF9wcm9i ZShzdHJ1Y3QgY2RuczMgKmNkbnMpCgpzaG91bGQgdGhpcyBiZSBjYWxsZWQgY2RuczNfZHJkX2lu aXQoKT8KCj4gK3sKPiArCWVudW0gdXNiX2RyX21vZGUgZHJfbW9kZTsKPiArCWludCByZXQgPSAw Owo+ICsJdTMyIHN0YXRlOwo+ICsKPiArCXN0YXRlID0gT1RHU1RTX1NUUkFQKHJlYWRsKCZjZG5z LT5vdGdfcmVncy0+c3RzKSk7Cj4gKwo+ICsJZHJfbW9kZSA9IGNkbnMtPmRyX21vZGU7Cj4gKwlp ZiAoc3RhdGUgPT0gT1RHU1RTX1NUUkFQX0hPU1QpIHsKPiArCQlkZXZfaW5mbyhjZG5zLT5kZXYs ICJDb250cm9sbGVyIHN0cmFwcGVkIHRvIEhPU1RcbiIpOwo+ICsJCWRyX21vZGUgPSBVU0JfRFJf TU9ERV9IT1NUOwo+ICsJCWlmIChjZG5zLT5kcl9tb2RlICE9IFVTQl9EUl9NT0RFX0hPU1QgJiYK PiArCQkgICAgY2Rucy0+ZHJfbW9kZSAhPSBVU0JfRFJfTU9ERV9PVEcpCj4gKwkJCXJldCA9IC1F SU5WQUw7Cj4gKwl9IGVsc2UgaWYgKHN0YXRlID09IE9UR1NUU19TVFJBUF9HQURHRVQpIHsKPiAr CQlkZXZfaW5mbyhjZG5zLT5kZXYsICJDb250cm9sbGVyIHN0cmFwcGVkIHRvIEhPU1RcbiIpOwoK cy9IT1NUL1BFUklQSEVSQUw/Cgo+ICsJCWRyX21vZGUgPSBVU0JfRFJfTU9ERV9QRVJJUEhFUkFM Owo+ICsJCWlmIChjZG5zLT5kcl9tb2RlICE9IFVTQl9EUl9NT0RFX1BFUklQSEVSQUwgJiYKPiAr CQkgICAgY2Rucy0+ZHJfbW9kZSAhPSBVU0JfRFJfTU9ERV9PVEcpCj4gKwkJCXJldCA9IC1FSU5W QUw7Cj4gKwl9Cj4gKwo+ICsJaWYgKHJldCkgewo+ICsJCWRldl9lcnIoY2Rucy0+ZGV2LCAiSW5j b3JyZWN0IERSRCBjb25maWd1cmF0aW9uXG4iKTsKPiArCQlyZXR1cm4gcmV0Owo+ICsJfQo+ICsK PiArCS8vVXBkYXRpbmcgRFIgbW9kZSBhY2NvcmRpbmcgdG8gc3RyYXAuCj4gKwljZG5zLT5kcl9t b2RlID0gZHJfbW9kZTsKPiArCj4gKwlkZXZfaW5mbyhjZG5zLT5kZXYsICJDb250cm9sbGVyIERl dmljZSBJRDogJTA4bHgsIFJldmlzaW9uIElEOiAlMDhseFxuIiwKPiArCQkgQ0ROU19SSUQocmVh ZGwoJmNkbnMtPm90Z19yZWdzLT5yaWQpKSwKPiArCQkgQ0ROU19ESUQocmVhZGwoJmNkbnMtPm90 Z19yZWdzLT5kaWQpKSk7Cj4gKwo+ICsJc3RhdGUgPSByZWFkbCgmY2Rucy0+b3RnX3JlZ3MtPnN0 cyk7Cj4gKwlpZiAoT1RHU1RTX09UR19OUkRZKHN0YXRlKSAhPSAwKSB7Cj4gKwkJZGV2X2Vycihj ZG5zLT5kZXYsICJDYWRlbmNlIFVTQjMgT1RHIGRldmljZSBub3QgcmVhZHlcbiIpOwo+ICsJCXJl dHVybiAtRU5PREVWOwo+ICsJfQo+ICsKPiArCXJldCA9IGNkbnMzX2NvcmVfaW5pdF9tb2RlKGNk bnMpOwo+ICsKPiArCXJldHVybiByZXQ7Cj4gK30KPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Iv Y2RuczMvZHJkLmggYi9kcml2ZXJzL3VzYi9jZG5zMy9kcmQuaAo+IG5ldyBmaWxlIG1vZGUgMTAw NjQ0Cj4gaW5kZXggMDAwMDAwMDAwMDAwLi44NTczMWYzYjY5M2MKPiAtLS0gL2Rldi9udWxsCj4g KysrIGIvZHJpdmVycy91c2IvY2RuczMvZHJkLmgKPiBAQCAtMCwwICsxLDEyMiBAQAo+ICsvKiBT UERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCAqLwo+ICsvKgo+ICsgKiBDYWRlbmNlIFVT QjMgRFJEIHBhcnQgb2YgVVNCU1MgZHJpdmVyCj4gKyAqCj4gKyAqIENvcHlyaWdodCAoQykgMjAx OCBDYWRlbmNlLgo+ICsgKgo+ICsgKiBBdXRob3I6IFBhd2VsIExhc3pjemFrIDxwYXdlbGxAY2Fk ZW5jZS5jb20+Cj4gKyAqLwo+ICsjaWZuZGVmIF9fTElOVVhfQ0ROUzNfRFJECj4gKyNkZWZpbmUg X19MSU5VWF9DRE5TM19EUkQKPiArCj4gKyNpbmNsdWRlIDxsaW51eC91c2Ivb3RnLmg+Cj4gKyNp bmNsdWRlIDxsaW51eC9waHkvcGh5Lmg+Cj4gKyNpbmNsdWRlICJjb3JlLmgiCj4gKwo+ICsvKiAg RFJEIHJlZ2lzdGVyIGludGVyZmFjZS4gKi8KPiArc3RydWN0IGNkbnMzX290Z19yZWdzIHsKPiAr CV9fbGUzMiBkaWQ7Cj4gKwlfX2xlMzIgcmlkOwo+ICsJX19sZTMyIGNhcGFiaWxpdGllczsKPiAr CV9fbGUzMiByZXNlcnZlZDE7Cj4gKwlfX2xlMzIgY21kOwo+ICsJX19sZTMyIHN0czsKPiArCV9f bGUzMiBzdGF0ZTsKPiArCV9fbGUzMiByZXNlcnZlZDI7Cj4gKwlfX2xlMzIgaWVuOwo+ICsJX19s ZTMyIGl2ZWN0Owo+ICsJX19sZTMyIHJlZmNsazsKPiArCV9fbGUzMiB0bXI7Cj4gKwlfX2xlMzIg cmVzZXJ2ZWQzWzRdOwo+ICsJX19sZTMyIHNpbXVsYXRlOwo+ICsJX19sZTMyIG92ZXJyaWRlOwo+ ICsJX19sZTMyIHN1c3BfY3RybDsKPiArCV9fbGUzMiByZXNlcnZlZDQ7Cj4gKwlfX2xlMzIgYW5h c3RzOwo+ICsJX19sZTMyIGFkcF9yYW1wX3RpbWU7Cj4gKwlfX2xlMzIgY3RybDE7Cj4gKwlfX2xl MzIgY3RybDI7Cj4gK307Cj4gKwo+ICsvKiBDRE5TX1JJRCAtIGJpdG1hc2tzICovCj4gKyNkZWZp bmUgQ0ROU19SSUQocCkJCQkoKHApICYgR0VOTUFTSygxNSwgMCkpCj4gKwo+ICsvKiBDRE5TX1ZJ RCAtIGJpdG1hc2tzICovCj4gKyNkZWZpbmUgQ0ROU19ESUQocCkJCQkoKHApICYgR0VOTUFTSygz MSwgMCkpCj4gKwo+ICsvKiBPVEdDTUQgLSBiaXRtYXNrcyAqLwo+ICsvKiAiUmVxdWVzdCB0aGUg YnVzIGZvciBEZXZpY2UgbW9kZS4gKi8KPiArI2RlZmluZSBPVEdDTURfREVWX0JVU19SRVEJQklU KDApCj4gKy8qIFJlcXVlc3QgdGhlIGJ1cyBmb3IgSG9zdCBtb2RlICovCj4gKyNkZWZpbmUgT1RH Q01EX0hPU1RfQlVTX1JFUQkJQklUKDEpCj4gKy8qIEVuYWJsZSBPVEcgbW9kZS4gKi8KPiArI2Rl ZmluZSBPVEdDTURfT1RHX0VOCQkJQklUKDIpCj4gKy8qIERpc2FibGUgT1RHIG1vZGUgKi8KPiAr I2RlZmluZSBPVEdDTURfT1RHX0RJUwkJCUJJVCgzKQo+ICsvKiJDb25maWd1cmUgT1RHIGFzIEEt RGV2aWNlLiAqLwo+ICsjZGVmaW5lIE9UR0NNRF9BX0RFVl9FTgkJCUJJVCg0KQo+ICsvKiJDb25m aWd1cmUgT1RHIGFzIEEtRGV2aWNlLiAqLwo+ICsjZGVmaW5lIE9UR0NNRF9BX0RFVl9ESVMJCUJJ VCg1KQo+ICsvKiBEcm9wIHRoZSBidXMgZm9yIERldmljZSBtb2QJZS4gKi8KPiArI2RlZmluZSBP VEdDTURfREVWX0JVU19EUk9QCQlCSVQoOCkKPiArLyogRHJvcCB0aGUgYnVzIGZvciBIb3N0IG1v ZGUqLwo+ICsjZGVmaW5lIE9UR0NNRF9IT1NUX0JVU19EUk9QCQlCSVQoOSkKPiArLyogUG93ZXIg RG93biBVU0JTUy1ERVYuICovCj4gKyNkZWZpbmUgT1RHQ01EX0RFVl9QT1dFUl9PRkYJCUJJVCgx MSkKPiArLyogUG93ZXIgRG93biBDRE5TWEhDSS4gKi8KPiArI2RlZmluZSBPVEdDTURfSE9TVF9Q T1dFUl9PRkYJCUJJVCgxMikKPiArCj4gKy8qIE9UR0lFTiAtIGJpdG1hc2tzICovCj4gKy8qIElE IGNoYW5nZSBpbnRlcnJ1cHQgZW5hYmxlICovCj4gKyNkZWZpbmUgT1RHSUVOX0lEX0NIQU5HRV9J TlQJCUJJVCgwKQo+ICsvKiBWYnVzdmFsaWQgZmFsbCBkZXRlY3RlZCBpbnRlcnJ1cHQgZW5hYmxl LiovCj4gKyNkZWZpbmUgT1RHSUVOX1ZCVVNWQUxJRF9SSVNFX0lOVAlCSVQoNCkKPiArLyogVmJ1 c3ZhbGlkIGZhbGwgZGV0ZWN0ZWQgaW50ZXJydXB0IGVuYWJsZSAqLwo+ICsjZGVmaW5lIE9UR0lF Tl9WQlVTVkFMSURfRkFMTF9JTlQJQklUKDUpCj4gKwo+ICsvKiBPVEdTVFMgLSBiaXRtYXNrcyAq Lwo+ICsvKgo+ICsgKiBDdXJyZW50IHZhbHVlIG9mIHRoZSBJRCBwaW4uIEl0IGlzIG9ubHkgdmFs aWQgd2hlbiBpZHB1bGx1cCBpbgo+ICsgKiAgT1RHQ1RSTDFfVFlQRSByZWdpc3RlciBpcyBzZXQg dG8gJzEnLgo+ICsgKi8KPiArI2RlZmluZSBPVEdTVFNfSURfVkFMVUUJCQlCSVQoMCkKPiArLyog Q3VycmVudCB2YWx1ZSBvZiB0aGUgdmJ1c192YWxpZCAqLwo+ICsjZGVmaW5lIE9UR1NUU19WQlVT X1ZBTElECQlCSVQoMSkKPiArLyogQ3VycmVudCB2YWx1ZSBvZiB0aGUgYl9zZXNzX3ZsZCAqLwo+ ICsjZGVmaW5lIE9UR1NUU19TRVNTSU9OX1ZBTElECQlCSVQoMikKPiArLypEZXZpY2UgbW9kZSBp cyBhY3RpdmUqLwo+ICsjZGVmaW5lIE9UR1NUU19ERVZfQUNUSVZFCQlCSVQoMykKPiArLyogSG9z dCBtb2RlIGlzIGFjdGl2ZS4gKi8KPiArI2RlZmluZSBPVEdTVFNfSE9TVF9BQ1RJVkUJCUJJVCg0 KQo+ICsvKiBPVEcgQ29udHJvbGxlciBub3QgcmVhZHkuICovCj4gKyNkZWZpbmUgT1RHU1RTX09U R19OUkRZX01BU0sJCUJJVCgxMSkKPiArI2RlZmluZSBPVEdTVFNfT1RHX05SRFkocCkJCSgocCkg JiBPVEdTVFNfT1RHX05SRFlfTUFTSykKPiArLyoKPiArICogVmFsdWUgb2YgdGhlIHN0cmFwIHBp bnMuCj4gKyAqIDAwMCAtIG5vIGRlZmF1bHQgY29uZmlndXJhdGlvbgo+ICsgKiAwMTAgLSBDb250 cm9sbGVyIGluaXRpYWxsIGNvbmZpZ3VyZWQgYXMgSG9zdAo+ICsgKiAxMDAgLSBDb250cm9sbGVy IGluaXRpYWxseSBjb25maWd1cmVkIGFzIERldmljZQo+ICsgKi8KPiArI2RlZmluZSBPVEdTVFNf U1RSQVAocCkJCQkoKChwKSAmIEdFTk1BU0soMTQsIDEyKSkgPj4gMTIpCj4gKyNkZWZpbmUgT1RH U1RTX1NUUkFQX05PX0RFRkFVTFRfQ0ZHCTB4MDAKPiArI2RlZmluZSBPVEdTVFNfU1RSQVBfSE9T VF9PVEcJCTB4MDEKPiArI2RlZmluZSBPVEdTVFNfU1RSQVBfSE9TVAkJMHgwMgo+ICsjZGVmaW5l IE9UR1NUU19TVFJBUF9HQURHRVQJCTB4MDQKPiArLyogSG9zdCBtb2RlIGlzIHR1cm5lZCBvbi4g Ki8KPiArI2RlZmluZSBPVEdTVFNFX1hIQ0lfUkVBRFlGCQlCSVQoMjYpCj4gKy8qICJEZXZpY2Ug bW9kZSBpcyB0dXJuZWQgb24gLiovCj4gKyNkZWZpbmUgT1RHU1RTX0RFVl9SRUFEWQkJQklUKDI3 KQo+ICsKPiArLyogT1RHUkVGQ0xLIC0gYml0bWFza3MgKi8KPiArI2RlZmluZSBPVEdSRUZDTEtf U1RCX0NMS19TV0lUQ0hfRU4JQklUKDMxKQo+ICsKPiArLyogT1RHQ1RSTDEgLSBiaXRtYXNrcyAq Lwo+ICsjZGVmaW5lIE9UR0NUUkwxX0lEUFVMTFVQCQlCSVQoMjQpCj4gKwo+ICtpbnQgY2RuczNf aXNfaG9zdChzdHJ1Y3QgY2RuczMgKmNkbnMpOwo+ICtpbnQgY2RuczNfaXNfZGV2aWNlKHN0cnVj dCBjZG5zMyAqY2Rucyk7Cj4gK2ludCBjZG5zM19kcmRfcHJvYmUoc3RydWN0IGNkbnMzICpjZG5z KTsKPiArdm9pZCBjZG5zM19zZXRfaHdfbW9kZShzdHJ1Y3QgY2RuczMgKmNkbnMsIHUzMiBtb2Rl KTsKPiAraXJxcmV0dXJuX3QgY2RuczNfZHJkX2lycShzdHJ1Y3QgY2RuczMgKmNkbnMpOwo+ICsK PiArI2VuZGlmIC8qIF9fTElOVVhfQ0ROUzNfRFJEICovCj4gCgpjaGVlcnMsCi1yb2dlcgo=