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: [usb-next,v10,3/8] usb: core: add a wrapper for the USB PHYs on the HCD From: Roger Quadros Message-Id: Date: Tue, 20 Mar 2018 13:02:33 +0200 To: Martin Blumenstingl , Chunfeng Yun , KISHON VIJAY ABRAHAM Cc: linux-usb@vger.kernel.org, mathias.nyman@intel.com, arnd@arndb.de, gregkh@linuxfoundation.org, felipe.balbi@linux.intel.com, linux-omap@vger.kernel.org, linux-tegra@vger.kernel.org, linux-mediatek@lists.infradead.org, linux-arm-kernel@lists.infradead.org, devicetree@vger.kernel.org, jonathanh@nvidia.com, thierry.reding@gmail.com, stern@rowland.harvard.edu, linux@prisktech.co.nz, Peter.Chen@nxp.com, matthias.bgg@gmail.com, mark.rutland@arm.com, robh+dt@kernel.org, Neil Armstrong , linux-amlogic@lists.infradead.org, yixun.lan@amlogic.com, Keerthy , "Gerlach, Dave" List-ID: T24gMjAvMDMvMTggMTI6NTUsIFJvZ2VyIFF1YWRyb3Mgd3JvdGU6Cj4gT24gMTkvMDMvMTggMTg6 MTIsIE1hcnRpbiBCbHVtZW5zdGluZ2wgd3JvdGU6Cj4+IEhpIFJvZ2VyLAo+Pgo+PiBPbiBNb24s IE1hciAxOSwgMjAxOCBhdCA5OjQ5IEFNLCBSb2dlciBRdWFkcm9zIDxyb2dlcnFAdGkuY29tPiB3 cm90ZToKPj4+IEhpLAo+Pj4KPj4+IE9uIDE5LzAzLzE4IDAwOjI5LCBNYXJ0aW4gQmx1bWVuc3Rp bmdsIHdyb3RlOgo+Pj4+IEhpIFJvZ2VyLAo+Pj4+Cj4+Pj4gT24gRnJpLCBNYXIgMTYsIDIwMTgg YXQgMzozMiBQTSwgUm9nZXIgUXVhZHJvcyA8cm9nZXJxQHRpLmNvbT4gd3JvdGU6Cj4+Pj4+ICtz b21lIFRJIGZvbGtzCj4+Pj4+Cj4+Pj4+IEhpIE1hcnRpbiwKPj4+Pj4KPj4+Pj4gT24gMTgvMDIv MTggMjA6NDQsIE1hcnRpbiBCbHVtZW5zdGluZ2wgd3JvdGU6Cj4+Pj4+PiBNYW55IFNvQyBwbGF0 Zm9ybXMgaGF2ZSBzZXBhcmF0ZSBkZXZpY2VzIGZvciB0aGUgVVNCIFBIWSB3aGljaCBhcmUKPj4+ Pj4+IHJlZ2lzdGVyZWQgdGhyb3VnaCB0aGUgZ2VuZXJpYyBQSFkgZnJhbWV3b3JrLiBUaGVzZSBQ SFlzIGhhdmUgdG8gYmUKPj4+Pj4+IGVuYWJsZWQgdG8gbWFrZSB0aGUgVVNCIGNvbnRyb2xsZXIg YWN0dWFsbHkgd29yay4gVGhleSBhbHNvIGhhdmUgdG8gYmUKPj4+Pj4+IGRpc2FibGVkIGFnYWlu IG9uIHNodXRkb3duL3N1c3BlbmQuCj4+Pj4+Pgo+Pj4+Pj4gQ3VycmVudGx5IChhdCBsZWFzdCkg dGhlIGZvbGxvd2luZyBIQ0kgcGxhdGZvcm0gZHJpdmVycyBhcmUgdXNpbmcgY3VzdG9tCj4+Pj4+ PiBjb2RlIHRvIG9idGFpbiBhbGwgUEhZcyB2aWEgZGV2aWNldHJlZSBmb3IgdGhlIHJvb3RodWIv Y29udHJvbGxlciBhbmQKPj4+Pj4+IGRpc2FibGUvZW5hYmxlIHRoZW0gd2hlbiByZXF1aXJlZDoK Pj4+Pj4+IC0gZWhjaS1wbGF0Zm9ybS5jIGhhcyBlaGNpX3BsYXRmb3JtX3Bvd2VyX3tvbixvZmZ9 Cj4+Pj4+PiAtIHhoY2ktbXRrLmMgaGFzIHhoY2lfbXRrX3BoeV97aW5pdCxleGl0LHBvd2VyX29u LHBvd2VyX29mZn0KPj4+Pj4+IC0gb2hjaS1wbGF0Zm9ybS5jIGhhcyBvaGNpX3BsYXRmb3JtX3Bv d2VyX3tvbixvZmZ9Cj4+Pj4+Pgo+Pj4+Pj4gV2l0aCB0aGlzIG5ldyB3cmFwcGVyIHRoZSBVU0Ig UEhZcyBjYW4gYmUgc3BlY2lmaWVkIGRpcmVjdGx5IGluIHRoZQo+Pj4+Pj4gVVNCIGNvbnRyb2xs ZXIncyBkZXZpY2V0cmVlIG5vZGUgKGp1c3QgbGlrZSBvbiB0aGUgZHJpdmVycyBsaXN0ZWQKPj4+ Pj4+IGFib3ZlKS4gVGhpcyBhbGxvd3MgU29DcyBsaWtlIHRoZSBBbWxvZ2ljIE1lc29uIEdYTCBm YW1pbHkgdG8gb3BlcmF0ZQo+Pj4+Pj4gY29ycmVjdGx5IG9uY2UgdGhpcyBpcyB3aXJlZCB1cCBj b3JyZWN0bHkuIFRoZXNlIFNvQ3MgdXNlIGEgZHdjMwo+Pj4+Pj4gY29udHJvbGxlciBhbmQgcmVx dWlyZSBhbGwgVVNCIFBIWXMgdG8gYmUgaW5pdGlhbGl6ZWQgKGlmIG9uZSBvZiB0aGUgVVNCCj4+ Pj4+PiBQSFlzIGl0IG5vdCBpbml0aWFsaXplZCB0aGVuIG5vbmUgb2YgVVNCIHBvcnQgd29ya3Mg YXQgYWxsKS4KPj4+Pj4+Cj4+Pj4+PiBTaWduZWQtb2ZmLWJ5OiBNYXJ0aW4gQmx1bWVuc3Rpbmds IDxtYXJ0aW4uYmx1bWVuc3RpbmdsQGdvb2dsZW1haWwuY29tPgo+Pj4+Pj4gVGVzdGVkLWJ5OiBZ aXh1biBMYW4gPHlpeHVuLmxhbkBhbWxvZ2ljLmNvbT4KPj4+Pj4+IENjOiBOZWlsIEFybXN0cm9u ZyA8bmFybXN0cm9uZ0BiYXlsaWJyZS5jb20+Cj4+Pj4+PiBDYzogQ2h1bmZlbmcgWXVuIDxjaHVu ZmVuZy55dW5AbWVkaWF0ZWsuY29tPgo+Pj4+Pgo+Pj4+PiBUaGlzIHBhdGNoIGlzIGJyZWFraW5n IGxvdyBwb3dlciBjYXNlcyBvbiBUSSBTb0NzIHdoZW4gVVNCIGlzIGluIGhvc3QgbW9kZS4KPj4+ Pj4gSSdsbCBleHBsYWluIHdoeSBiZWxvdy4KPj4+PiBiYXNlZCBvbiB5b3VyIGV4cGxhbmF0aW9u IGFuZCByZWFkaW5nIHRoZSBUSSBQSFkgZHJpdmVycyBJIGFtIGFzc3VtaW5nCj4+Pj4gdGhhdCB0 aGUgYWZmZWN0ZWQgU29DcyBhcmUgdXNpbmcgdGhlICJwaHktb21hcC11c2IyIiBkcml2ZXIKPj4+ Pgo+Pj4geWVzIGFuZCBwaHktdGktcGlwZTMgYXMgd2VsbCBpLmUuICJ0aSxwaHktdXNiMyIgYW5k ICJ0aSxvbWFwLXVzYjMiCj4+IEkgbWlzc2VkIHRoYXQsIHRoYW5rcwo+Pgo+Pj4+Pj4gLS0tCj4+ Pj4+PiAgZHJpdmVycy91c2IvY29yZS9NYWtlZmlsZSB8ICAgMiArLQo+Pj4+Pj4gIGRyaXZlcnMv dXNiL2NvcmUvcGh5LmMgICAgfCAxNTggKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKwo+Pj4+Pj4gIGRyaXZlcnMvdXNiL2NvcmUvcGh5LmggICAgfCAgIDcgKysK Pj4+Pj4+ICAzIGZpbGVzIGNoYW5nZWQsIDE2NiBpbnNlcnRpb25zKCspLCAxIGRlbGV0aW9uKC0p Cj4+Pj4+PiAgY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvdXNiL2NvcmUvcGh5LmMKPj4+Pj4+ ICBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy91c2IvY29yZS9waHkuaAo+Pj4+Pj4KPj4+Pj4+ IGRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9jb3JlL01ha2VmaWxlIGIvZHJpdmVycy91c2IvY29y ZS9NYWtlZmlsZQo+Pj4+Pj4gaW5kZXggOTJjOWNlZmI0MzE3Li4xOGU4NzRiMDQ0MWUgMTAwNjQ0 Cj4+Pj4+PiAtLS0gYS9kcml2ZXJzL3VzYi9jb3JlL01ha2VmaWxlCj4+Pj4+PiArKysgYi9kcml2 ZXJzL3VzYi9jb3JlL01ha2VmaWxlCj4+Pj4+PiBAQCAtNiw3ICs2LDcgQEAKPj4+Pj4+ICB1c2Jj b3JlLXkgOj0gdXNiLm8gaHViLm8gaGNkLm8gdXJiLm8gbWVzc2FnZS5vIGRyaXZlci5vCj4+Pj4+ PiAgdXNiY29yZS15ICs9IGNvbmZpZy5vIGZpbGUubyBidWZmZXIubyBzeXNmcy5vIGVuZHBvaW50 Lm8KPj4+Pj4+ICB1c2Jjb3JlLXkgKz0gZGV2aW8ubyBub3RpZnkubyBnZW5lcmljLm8gcXVpcmtz Lm8gZGV2aWNlcy5vCj4+Pj4+PiAtdXNiY29yZS15ICs9IHBvcnQubwo+Pj4+Pj4gK3VzYmNvcmUt eSArPSBwaHkubyBwb3J0Lm8KPj4+Pj4+Cj4+Pj4+PiAgdXNiY29yZS0kKENPTkZJR19PRikgICAg ICAgICArPSBvZi5vCj4+Pj4+PiAgdXNiY29yZS0kKENPTkZJR19VU0JfUENJKSAgICAgICAgICAg ICs9IGhjZC1wY2kubwo+Pj4+Pj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2NvcmUvcGh5LmMg Yi9kcml2ZXJzL3VzYi9jb3JlL3BoeS5jCj4+Pj4+PiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+Pj4+ Pj4gaW5kZXggMDAwMDAwMDAwMDAwLi4wOWI3YzQzYzBlYTQKPj4+Pj4+IC0tLSAvZGV2L251bGwK Pj4+Pj4+ICsrKyBiL2RyaXZlcnMvdXNiL2NvcmUvcGh5LmMKPj4+Pj4+IEBAIC0wLDAgKzEsMTU4 IEBACj4+Pj4+PiArLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjArCj4+Pj4+PiAr LyoKPj4+Pj4+ICsgKiBBIHdyYXBwZXIgZm9yIG11bHRpcGxlIFBIWXMgd2hpY2ggcGFzc2VzIGFs bCBwaHlfKiBmdW5jdGlvbiBjYWxscyB0bwo+Pj4+Pj4gKyAqIG11bHRpcGxlIChhY3R1YWwpIFBI WSBkZXZpY2VzLiBUaGlzIGlzIGNvbWVzIGhhbmR5IHdoZW4gaW5pdGlhbGl6aW5nCj4+Pj4+PiAr ICogYWxsIFBIWXMgb24gYSBIQ0QgYW5kIHRvIGtlZXAgdGhlbSBhbGwgaW4gdGhlIHNhbWUgc3Rh dGUuCj4+Pj4+PiArICoKPj4+Pj4+ICsgKiBDb3B5cmlnaHQgKEMpIDIwMTggTWFydGluIEJsdW1l bnN0aW5nbCA8bWFydGluLmJsdW1lbnN0aW5nbEBnb29nbGVtYWlsLmNvbT4KPj4+Pj4+ICsgKi8K Pj4+Pj4+ICsKPj4+Pj4+ICsjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+Cj4+Pj4+PiArI2luY2x1 ZGUgPGxpbnV4L2xpc3QuaD4KPj4+Pj4+ICsjaW5jbHVkZSA8bGludXgvcGh5L3BoeS5oPgo+Pj4+ Pj4gKyNpbmNsdWRlIDxsaW51eC9vZi5oPgo+Pj4+Pj4gKwo+Pj4+Pj4gKyNpbmNsdWRlICJwaHku aCIKPj4+Pj4+ICsKPj4+Pj4+ICtzdHJ1Y3QgdXNiX3BoeV9yb290aHViIHsKPj4+Pj4+ICsgICAg IHN0cnVjdCBwaHkgICAgICAgICAgICAgICpwaHk7Cj4+Pj4+PiArICAgICBzdHJ1Y3QgbGlzdF9o ZWFkICAgICAgICBsaXN0Owo+Pj4+Pj4gK307Cj4+Pj4+PiArCj4+Pj4+PiArc3RhdGljIHN0cnVj dCB1c2JfcGh5X3Jvb3RodWIgKnVzYl9waHlfcm9vdGh1Yl9hbGxvYyhzdHJ1Y3QgZGV2aWNlICpk ZXYpCj4+Pj4+PiArewo+Pj4+Pj4gKyAgICAgc3RydWN0IHVzYl9waHlfcm9vdGh1YiAqcm9vdGh1 Yl9lbnRyeTsKPj4+Pj4+ICsKPj4+Pj4+ICsgICAgIHJvb3RodWJfZW50cnkgPSBkZXZtX2t6YWxs b2MoZGV2LCBzaXplb2YoKnJvb3RodWJfZW50cnkpLCBHRlBfS0VSTkVMKTsKPj4+Pj4+ICsgICAg IGlmICghcm9vdGh1Yl9lbnRyeSkKPj4+Pj4+ICsgICAgICAgICAgICAgcmV0dXJuIEVSUl9QVFIo LUVOT01FTSk7Cj4+Pj4+PiArCj4+Pj4+PiArICAgICBJTklUX0xJU1RfSEVBRCgmcm9vdGh1Yl9l bnRyeS0+bGlzdCk7Cj4+Pj4+PiArCj4+Pj4+PiArICAgICByZXR1cm4gcm9vdGh1Yl9lbnRyeTsK Pj4+Pj4+ICt9Cj4+Pj4+PiArCj4+Pj4+PiArc3RhdGljIGludCB1c2JfcGh5X3Jvb3RodWJfYWRk X3BoeShzdHJ1Y3QgZGV2aWNlICpkZXYsIGludCBpbmRleCwKPj4+Pj4+ICsgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHN0cnVjdCBsaXN0X2hlYWQgKmxpc3QpCj4+Pj4+PiArewo+Pj4+ Pj4gKyAgICAgc3RydWN0IHVzYl9waHlfcm9vdGh1YiAqcm9vdGh1Yl9lbnRyeTsKPj4+Pj4+ICsg ICAgIHN0cnVjdCBwaHkgKnBoeSA9IGRldm1fb2ZfcGh5X2dldF9ieV9pbmRleChkZXYsIGRldi0+ b2Zfbm9kZSwgaW5kZXgpOwo+Pj4+Pj4gKwo+Pj4+Pj4gKyAgICAgaWYgKElTX0VSUl9PUl9OVUxM KHBoeSkpIHsKPj4+Pj4+ICsgICAgICAgICAgICAgaWYgKCFwaHkgfHwgUFRSX0VSUihwaHkpID09 IC1FTk9ERVYpCj4+Pj4+PiArICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7Cj4+Pj4+PiAr ICAgICAgICAgICAgIGVsc2UKPj4+Pj4+ICsgICAgICAgICAgICAgICAgICAgICByZXR1cm4gUFRS X0VSUihwaHkpOwo+Pj4+Pj4gKyAgICAgfQo+Pj4+Pj4gKwo+Pj4+Pj4gKyAgICAgcm9vdGh1Yl9l bnRyeSA9IHVzYl9waHlfcm9vdGh1Yl9hbGxvYyhkZXYpOwo+Pj4+Pj4gKyAgICAgaWYgKElTX0VS Uihyb290aHViX2VudHJ5KSkKPj4+Pj4+ICsgICAgICAgICAgICAgcmV0dXJuIFBUUl9FUlIocm9v dGh1Yl9lbnRyeSk7Cj4+Pj4+PiArCj4+Pj4+PiArICAgICByb290aHViX2VudHJ5LT5waHkgPSBw aHk7Cj4+Pj4+PiArCj4+Pj4+PiArICAgICBsaXN0X2FkZF90YWlsKCZyb290aHViX2VudHJ5LT5s aXN0LCBsaXN0KTsKPj4+Pj4+ICsKPj4+Pj4+ICsgICAgIHJldHVybiAwOwo+Pj4+Pj4gK30KPj4+ Pj4+ICsKPj4+Pj4+ICtzdHJ1Y3QgdXNiX3BoeV9yb290aHViICp1c2JfcGh5X3Jvb3RodWJfaW5p dChzdHJ1Y3QgZGV2aWNlICpkZXYpCj4+Pj4+PiArewo+Pj4+Pj4gKyAgICAgc3RydWN0IHVzYl9w aHlfcm9vdGh1YiAqcGh5X3Jvb3RodWI7Cj4+Pj4+PiArICAgICBzdHJ1Y3QgdXNiX3BoeV9yb290 aHViICpyb290aHViX2VudHJ5Owo+Pj4+Pj4gKyAgICAgc3RydWN0IGxpc3RfaGVhZCAqaGVhZDsK Pj4+Pj4+ICsgICAgIGludCBpLCBudW1fcGh5cywgZXJyOwo+Pj4+Pj4gKwo+Pj4+Pj4gKyAgICAg bnVtX3BoeXMgPSBvZl9jb3VudF9waGFuZGxlX3dpdGhfYXJncyhkZXYtPm9mX25vZGUsICJwaHlz IiwKPj4+Pj4+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiNw aHktY2VsbHMiKTsKPj4+Pj4+ICsgICAgIGlmIChudW1fcGh5cyA8PSAwKQo+Pj4+Pj4gKyAgICAg ICAgICAgICByZXR1cm4gTlVMTDsKPj4+Pj4+ICsKPj4+Pj4+ICsgICAgIHBoeV9yb290aHViID0g dXNiX3BoeV9yb290aHViX2FsbG9jKGRldik7Cj4+Pj4+PiArICAgICBpZiAoSVNfRVJSKHBoeV9y b290aHViKSkKPj4+Pj4+ICsgICAgICAgICAgICAgcmV0dXJuIHBoeV9yb290aHViOwo+Pj4+Pj4g Kwo+Pj4+Pj4gKyAgICAgZm9yIChpID0gMDsgaSA8IG51bV9waHlzOyBpKyspIHsKPj4+Pj4+ICsg ICAgICAgICAgICAgZXJyID0gdXNiX3BoeV9yb290aHViX2FkZF9waHkoZGV2LCBpLCAmcGh5X3Jv b3RodWItPmxpc3QpOwo+Pj4+Pj4gKyAgICAgICAgICAgICBpZiAoZXJyKQo+Pj4+Pj4gKyAgICAg ICAgICAgICAgICAgICAgIGdvdG8gZXJyX291dDsKPj4+Pj4+ICsgICAgIH0KPj4+Pj4+ICsKPj4+ Pj4+ICsgICAgIGhlYWQgPSAmcGh5X3Jvb3RodWItPmxpc3Q7Cj4+Pj4+PiArCj4+Pj4+PiArICAg ICBsaXN0X2Zvcl9lYWNoX2VudHJ5KHJvb3RodWJfZW50cnksIGhlYWQsIGxpc3QpIHsKPj4+Pj4+ ICsgICAgICAgICAgICAgZXJyID0gcGh5X2luaXQocm9vdGh1Yl9lbnRyeS0+cGh5KTsKPj4+Pj4K Pj4+Pj4gVGhlIHBoeV9pbml0KCkgZnVuY3Rpb24gYWN0dWFsbHkgZW5hYmxlcyB0aGUgUEhZIGNs b2Nrcy4KPj4+Pj4gSXQgc2hvdWxkIGJlIG1vdmVkIHRvIHRoZSB1c2JfcGh5X3Jvb3RodWJfZXhp dCgpIHJvdXRpbmUganVzdCBiZWZvcmUgY2FsbGluZyBwaHlfcG93ZXJfb24oKS4KPj4+PiBkbyB5 b3UgbWVhbiB0aGF0IHBoeV9pbml0IHNob3VsZCBiZSBtb3ZlZCB0byB1c2JfcGh5X3Jvb3RodWJf cG93ZXJfb24KPj4+PiAoanVzdCBiZWZvcmUgcGh5X3Bvd2VyX29uIGlzIGNhbGxlZCB3aXRoaW4g dXNiX3BoeV9yb290aHViX3Bvd2VyX29uKT8KPj4+Pgo+Pj4KPj4+IFllcy4KPj4+Cj4+Pj4gYW4g ZWFybGllciB2ZXJzaW9uIG9mIG15IHBhdGNoIGRpZCBleGFjdGx5IHRoaXMsIGJ1dCBpdCBjYXVz ZWQKPj4+PiBwcm9ibGVtcyBkdXJpbmcgYSBzdXNwZW5kL3Jlc3VtZSBjeWNsZSBvbiBNZWRpYXRl ayBkZXZpY2VzCj4+Pj4gQ2h1bmZlbmcgWXVuIHJlcG9ydGVkIHRoYXQgaXNzdWUgaGVyZSBbMF0s IHF1b3RlIGZyb20gdGhhdCBtYWlsIGZvcgo+Pj4+IGVhc2llciByZWFkaW5nOgo+Pj4+ICJJbiBv cmRlciB0byBrZWVwIGxpbmsgc3RhdGUgb24gbXQ4MTczLCB3ZSBqdXN0IHBvd2VyIG9mZiBhbGwg cGh5cyhub3QKPj4+PiBleGl0KSB3aGVuIHN5c3RlbSBlbnRlciBzdXNwZW5kLCB0aGVuIHBvd2Vy IG9uIHRoZW0gYWdhaW4gKG5lZWRuJ3QKPj4+PiBpbml0LCBvdGhlcndpc2UgZGV2aWNlIHdpbGwg YmUgZGlzY29ubmVjdGVkKSB3aGVuIHN5c3RlbSByZXN1bWUsIHRoaXMKPj4+PiBjYW4gYXZvaWQg cmUtZW51bWVyYXRpbmcgZGV2aWNlLiIKPj4+Pgo+Pj4+Pj4gKyAgICAgICAgICAgICBpZiAoZXJy KQo+Pj4+Pj4gKyAgICAgICAgICAgICAgICAgICAgIGdvdG8gZXJyX2V4aXRfcGh5czsKPj4+Pj4+ ICsgICAgIH0KPj4+Pj4+ICsKPj4+Pj4+ICsgICAgIHJldHVybiBwaHlfcm9vdGh1YjsKPj4+Pj4+ ICsKPj4+Pj4+ICtlcnJfZXhpdF9waHlzOgo+Pj4+Pj4gKyAgICAgbGlzdF9mb3JfZWFjaF9lbnRy eV9jb250aW51ZV9yZXZlcnNlKHJvb3RodWJfZW50cnksIGhlYWQsIGxpc3QpCj4+Pj4+PiArICAg ICAgICAgICAgIHBoeV9leGl0KHJvb3RodWJfZW50cnktPnBoeSk7Cj4+Pj4+PiArCj4+Pj4+PiAr ZXJyX291dDoKPj4+Pj4+ICsgICAgIHJldHVybiBFUlJfUFRSKGVycik7Cj4+Pj4+PiArfQo+Pj4+ Pj4gK0VYUE9SVF9TWU1CT0xfR1BMKHVzYl9waHlfcm9vdGh1Yl9pbml0KTsKPj4+Pj4+ICsKPj4+ Pj4+ICtpbnQgdXNiX3BoeV9yb290aHViX2V4aXQoc3RydWN0IHVzYl9waHlfcm9vdGh1YiAqcGh5 X3Jvb3RodWIpCj4+Pj4+PiArewo+Pj4+Pj4gKyAgICAgc3RydWN0IHVzYl9waHlfcm9vdGh1YiAq cm9vdGh1Yl9lbnRyeTsKPj4+Pj4+ICsgICAgIHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQ7Cj4+Pj4+ PiArICAgICBpbnQgZXJyLCByZXQgPSAwOwo+Pj4+Pj4gKwo+Pj4+Pj4gKyAgICAgaWYgKCFwaHlf cm9vdGh1YikKPj4+Pj4+ICsgICAgICAgICAgICAgcmV0dXJuIDA7Cj4+Pj4+PiArCj4+Pj4+PiAr ICAgICBoZWFkID0gJnBoeV9yb290aHViLT5saXN0Owo+Pj4+Pj4gKwo+Pj4+Pj4gKyAgICAgbGlz dF9mb3JfZWFjaF9lbnRyeShyb290aHViX2VudHJ5LCBoZWFkLCBsaXN0KSB7Cj4+Pj4+PiArICAg ICAgICAgICAgIGVyciA9IHBoeV9leGl0KHJvb3RodWJfZW50cnktPnBoeSk7Cj4+Pj4+PiArICAg ICAgICAgICAgIGlmIChlcnIpCj4+Pj4+PiArICAgICAgICAgICAgICAgICAgICAgcmV0ID0gcmV0 Owo+Pj4+Pj4gKyAgICAgfQo+Pj4+Pgo+Pj4+PiBwaHlfZXhpdCgpIHNob3VsZCBiZSBtb3ZlZCB0 byB1c2JfcGh5X3Jvb3RodWJfcG93ZXJvZmYoKSBqdXN0IGFmdGVyIGNhbGxpbmcgcGh5X3Bvd2Vy X29mZigpLgo+Pj4+IGlmIEkgdW5kZXJzdG9vZCBDaHVuZmVuZyBZdW4gY29ycmVjdGx5IHRoaXMg d2lsbCByZXF1aXJlCj4+Pj4gcmUtZW51bWVyYXRpb24gb2YgdGhlIFVTQiBkZXZpY2VzIGFmdGVy IGEgc3VzcGVuZC9yZXN1bWUgY3ljbGUgb24KPj4+PiBNZWRpYXRlayBTb0NzCj4+Pj4KPj4+Cj4+ PiBPSy4gSSBzdXBwb3NlIHRoYXQgdGhlcmUgYXJlIDIgY2FzZXMKPj4+IDEpIE1lZGlhdGVrJ3Mg Y2FzZTogVVNCIGNvbnRyb2xsZXIgY29udGV4dCByZXRhaW5lZCBhY3Jvc3Mgc3VzcGVuZC9yZXN1 bWUuCj4+PiBSZW1vdGUgd2FrZXVwIHByb2JhYmx5IHJlcXVpcmVkLgo+Pj4gTm8gcmUtZW51bWVy YXRpb24gcHJlZmVycmVkIGFmdGVyIHJlc3VtZS4gcGh5X2V4aXQoKS9waHlfaW5pdCgpIG11c3Qg bm90IGJlIGNhbGxlZAo+Pj4gZHVyaW5nIHN1c3BlbmQvcmVzdW1lIHRvIGtlZXAgUEhZIGxpbmsg YWN0aXZlLgo+PiBEb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvdXNiL21lZGlhdGVr LG10dTMudHh0IGluZGVlZCBzaG93cwo+PiB0aGF0IHRoZSBwYXJlbnQgb2YgdGhlIFVTQiBjb250 cm9sbGVyIGNhbiBiZSBtYXJrZWQgYXMgIndha2V1cC1zb3VyY2UiCj4+Cj4+PiAyKSBUSSdzIGNh c2U6IGxvdyBwb3dlciBpbXBvcnRhbnQ6IFVTQiBjb250ZXh0IGlzIGxvc3QsIE9LIHRvIHJlLWVu dW1lcmF0ZS4KPj4+IHBoeV9leGl0KCkvcGh5X2luaXQoKSBtdXN0IGJlIGNhbGxlZCBkdXJpbmcg c3VzcGVuZC9yZXN1bWUuCj4+IEFDSwo+Pgo+Pj4+PiBXaXRoIHRoYXQgdGhlcmUgaXMgbm90aGlu ZyBlbHNlIGJlaW5nIGRvbmUgaGVyZS4gU2hvdWxkbid0IHdlIGJlIGRvaW5nIHRoZSBlcXVpdmFs ZW50IG9mCj4+Pj4+IHVzYl9waHlfcm9vdGh1Yl9kZWxfcGh5KCkgYW5kIHVzYl9waHlfcm9vdGh1 Yl9mcmVlKCkgaGVyZT8KPj4+Pj4KPj4+Pj4+ICsKPj4+Pj4+ICsgICAgIHJldHVybiByZXQ7Cj4+ Pj4+PiArfQo+Pj4+Pj4gK0VYUE9SVF9TWU1CT0xfR1BMKHVzYl9waHlfcm9vdGh1Yl9leGl0KTsK Pj4+Pj4+ICsKPj4+Pj4+ICtpbnQgdXNiX3BoeV9yb290aHViX3Bvd2VyX29uKHN0cnVjdCB1c2Jf cGh5X3Jvb3RodWIgKnBoeV9yb290aHViKQo+Pj4+Pj4gK3sKPj4+Pj4+ICsgICAgIHN0cnVjdCB1 c2JfcGh5X3Jvb3RodWIgKnJvb3RodWJfZW50cnk7Cj4+Pj4+PiArICAgICBzdHJ1Y3QgbGlzdF9o ZWFkICpoZWFkOwo+Pj4+Pj4gKyAgICAgaW50IGVycjsKPj4+Pj4+ICsKPj4+Pj4+ICsgICAgIGlm ICghcGh5X3Jvb3RodWIpCj4+Pj4+PiArICAgICAgICAgICAgIHJldHVybiAwOwo+Pj4+Pj4gKwo+ Pj4+Pj4gKyAgICAgaGVhZCA9ICZwaHlfcm9vdGh1Yi0+bGlzdDsKPj4+Pj4+ICsKPj4+Pj4+ICsg ICAgIGxpc3RfZm9yX2VhY2hfZW50cnkocm9vdGh1Yl9lbnRyeSwgaGVhZCwgbGlzdCkgewo+Pj4+ Pj4gKyAgICAgICAgICAgICBlcnIgPSBwaHlfcG93ZXJfb24ocm9vdGh1Yl9lbnRyeS0+cGh5KTsK Pj4+Pj4+ICsgICAgICAgICAgICAgaWYgKGVycikKPj4+Pj4+ICsgICAgICAgICAgICAgICAgICAg ICBnb3RvIGVycl9vdXQ7Cj4+Pj4+PiArICAgICB9Cj4+Pj4+PiArCj4+Pj4+PiArICAgICByZXR1 cm4gMDsKPj4+Pj4+ICsKPj4+Pj4+ICtlcnJfb3V0Ogo+Pj4+Pj4gKyAgICAgbGlzdF9mb3JfZWFj aF9lbnRyeV9jb250aW51ZV9yZXZlcnNlKHJvb3RodWJfZW50cnksIGhlYWQsIGxpc3QpCj4+Pj4+ PiArICAgICAgICAgICAgIHBoeV9wb3dlcl9vZmYocm9vdGh1Yl9lbnRyeS0+cGh5KTsKPj4+Pj4+ ICsKPj4+Pj4+ICsgICAgIHJldHVybiBlcnI7Cj4+Pj4+PiArfQo+Pj4+Pj4gK0VYUE9SVF9TWU1C T0xfR1BMKHVzYl9waHlfcm9vdGh1Yl9wb3dlcl9vbik7Cj4+Pj4+PiArCj4+Pj4+PiArdm9pZCB1 c2JfcGh5X3Jvb3RodWJfcG93ZXJfb2ZmKHN0cnVjdCB1c2JfcGh5X3Jvb3RodWIgKnBoeV9yb290 aHViKQo+Pj4+Pj4gK3sKPj4+Pj4+ICsgICAgIHN0cnVjdCB1c2JfcGh5X3Jvb3RodWIgKnJvb3Ro dWJfZW50cnk7Cj4+Pj4+PiArCj4+Pj4+PiArICAgICBpZiAoIXBoeV9yb290aHViKQo+Pj4+Pj4g KyAgICAgICAgICAgICByZXR1cm47Cj4+Pj4+PiArCj4+Pj4+PiArICAgICBsaXN0X2Zvcl9lYWNo X2VudHJ5X3JldmVyc2Uocm9vdGh1Yl9lbnRyeSwgJnBoeV9yb290aHViLT5saXN0LCBsaXN0KQo+ Pj4+Pj4gKyAgICAgICAgICAgICBwaHlfcG93ZXJfb2ZmKHJvb3RodWJfZW50cnktPnBoeSk7Cj4+ Pj4+Cj4+Pj4+IE5vdCBkb2luZyB0aGUgcGh5X2V4aXQoKSBoZXJlIGxlYXZlcyB0aGUgY2xvY2tz IGVuYWJsZWQgb24gb3VyIFNvQyBhbmQKPj4+Pj4gd2UncmUgbm8gbG9uZ2VyIGFibGUgdG8gcmVh Y2ggbG93IHBvd2VyIHN0YXRlcyBvbiBzeXN0ZW0gc3VzcGVuZC4KPj4+PiBJJ20gbm90IHN1cmUg d2hlcmUgdGhpcyBwcm9ibGVtIHNob3VsZCBiZSBzb2x2ZWQ6Cj4+Pj4gLSBzZXQgc2tpcF9waHlf aW5pdGlhbGl6YXRpb24gaW4gc3RydWN0IHVzYl9oY2QgdG8gMSBmb3IgdGhlIGFmZmVjdGVkCj4+ Pj4gVEkgcGxhdGZvcm1zCj4+Pgo+Pj4gTWFueSBUSSBwbGF0Zm9ybXMgYXJlIGFmZmVjdGVkLCBv bWFwNSosIGRyYTcqLCBhbTQzKgo+Pj4KPj4+PiAtIGZpeCB0aGlzIGluIHRoZSB1c2JfcGh5X3Jv b3RodWIgY29kZQo+Pj4KPj4+IEknZCB2b3RlIGZvciBmaXhpbmcgaXQgaW4gdGhlIHVzYl9waHlf cm9vdGh1YiBjb2RlLiBIb3c/Cj4+PiBIb3cgYWJvdXQgdXNpbmcgdGhlIGRldmljZV9jYW5fd2Fr ZXVwKCkgdG8gZGVjaWRlIGlmIHdlIHNob3VsZCBjYWxsIHBoeV9leGl0KCkvaW5pdCgpIG9yIG5v dD8KPj4+IElmIHRoZSBVU0IgZGV2aWNlIGNhbid0IHdha2V1cCB0aGUgc3lzdGVtIHRoZXJlIGlz IG5vIHBvaW50IGluIGtlZXBpbmcgaXQgcG93ZXJlZC9jbG9ja2VkIHJpZ2h0Pwo+PiBAQ2h1bmZl bmc6IGNhbiB5b3UgY29uZmlybSBSb2dlcidzIGlkZWEgdGhhdCB3ZSBjb3VsZCBjYWxsIHBoeV9l eGl0IGlmCj4+IHRoZSBjb250cm9sbGVyIGlzICpOT1QqIG1hcmtlZCBhcyAid2FrZXVwLXNvdXJj ZSI/Cj4+IEkgYW0gYWxzbyBub3Qgc3VyZSBpZiBpdCB3b3VsZCB3b3JrLCBzaW5jZSB0aGUgIndh a2V1cC1zb3VyY2UiCj4+IHByb3BlcnR5IGlzIGRlZmluZWQgb24gdGhlIFVTQiBjb250cm9sbGVy J3MgcGFyZW50IG5vZGUgaW4gY2FzZSBvZiB0aGUKPj4gTWVkaWF0ZWsgTVRVMyAoTWVkaWF0ZWsg VVNCMy4wIERSRCkgY29udHJvbGxlcgo+IAo+IFRoYXQgaXMgYWJvdXQgd2FrZXVwLXNvdXJjZSBh bmQgbm90IGFib3V0IHdoZXRoZXIgcmVtb3RlIHdha2V1cCBzaG91bGQgYmUgZW5hYmxlZCBvciBu b3QuCgpjb3JyZWN0aW9uLiBJdCBpbmRlZWQgbWVhbnMgZW5hYmxlL2Rpc2FibGUgd2FrZXVwIDop LgoKPiBpLmUuIHdha2V1cC1zb3VyY2UgY2FuIGJlIHByZXNlbnQgYnV0IHdha2V1cCBjYW4gc3Rp bGwgYmUgZGlzYWJsZWQgYnkgdGhlIHVzZXIgdmlhIHN5c2ZzLgo+IAo+Pgo+Pj4+IC0gZml4IHRo aXMgaW4gdGhlIFBIWSBkcml2ZXIKPj4+Cj4+PiBUaGVyZSBpcyBub3RoaW5nIHRvIGZpeCBpbiB0 aGUgUEhZIGRyaXZlci4gSXQgaXMgZG9pbmcgd2hhdCBpdCBpcyBzdXBwb3NlZCB0byBkby4KPj4g SSBhY3R1YWxseSB3b25kZXIgaWYgcGh5X29wcyBzaG91bGQgaGF2ZSBleHBsaWNpdCBzdXNwZW5k L3Jlc3VtZSBzdXBwb3J0Ogo+PiAtIGFzc3VtaW5nIHdlIGRlZmluZSB0d28gbmV3IGNhbGxiYWNr czogLnN1c3BlbmQgYW5kIC5yZXN1bWUKPj4gLSB0aGUgUEhZIGZyYW1ld29yayBjb3VsZCBjYWxs IC5wb3dlcl9vZmYgYnkgZGVmYXVsdCBpZiAuc3VzcGVuZCBpcyBub3QgZGVmaW5lZAo+PiAtIHRo ZSBQSFkgZnJhbWV3b3JrIGNvdWxkIGNhbGwgLnBvd2VyX29uIGJ5IGRlZmF1bHQgaWYgLnJlc3Vt ZSBpcyBub3QgZGVmaW5lZAo+PiAtIGRyaXZlcnMgY291bGQgc2V0IC5zdXNwZW5kIGFuZCAucmVz dW1lIG9uIHRoZWlyIG93biwgYWxsb3dpbmcgbW9yZQo+PiBmaW5lLWdyYWluZWQgY29udHJvbCBi eSBmb3IgZXhhbXBsZSAqb25seSogc3RvcHBpbmcgdGhlIGNsb2NrIChidXQgbm90Cj4+IHJlLWlu aXRpYWxpemluZyB0aGUgcmVnaXN0ZXJzLCBldGMuKQo+Pgo+PiBAUm9nZXI6IHdoYXQgZG8geW91 IHRoaW5rIGFib3V0IHRoaXM/Cj4gCj4gTG9va3MgZmluZSB0byBtZS4gSG93ZXZlciBvbmUgdGhp bmcgaXMgc3RpbGwgbm90IGNsZWFyLiBIb3cgZG9lcyB0aGUgUEhZIGRyaXZlcgo+IGRlY2lkZSBp ZiBpdCBuZWVkcyB0byBkbyBhIGZ1bGwgcG93ZXIgb2ZmIG9yIHBhcnRpYWwgcG93ZXIgb2ZmPwo+ IEl0IGRvZXNuJ3Qga25vdyBhYm91dCB0aGUgcm9vdGh1YidzIGRldmljZV9tYXlfd2FrZXVwKCkg c3RhdHVzLgo+IAo+PiBLaXNob24gKHRoZSBQSFkgZnJhbWV3b3JrIG1haW50YWluZXIpIGlzIGFs c28gQ0MnZWQgLSBJIHdvdWxkIGxpa2UgdG8KPj4gaGVhciBoaXMgb3BpbmlvbiB0b28KPj4KPj4+ PiAtIHNvbWV3aGVyZSBlbHNlCj4+Pj4KPj4+Pj4+ICt9Cj4+Pj4+PiArRVhQT1JUX1NZTUJPTF9H UEwodXNiX3BoeV9yb290aHViX3Bvd2VyX29mZik7Cj4+Pj4+PiBkaWZmIC0tZ2l0IGEvZHJpdmVy cy91c2IvY29yZS9waHkuaCBiL2RyaXZlcnMvdXNiL2NvcmUvcGh5LmgKPj4+Pj4+IG5ldyBmaWxl IG1vZGUgMTAwNjQ0Cj4+Pj4+PiBpbmRleCAwMDAwMDAwMDAwMDAuLjZmZGU1OWJmYmZmOAo+Pj4+ Pj4gLS0tIC9kZXYvbnVsbAo+Pj4+Pj4gKysrIGIvZHJpdmVycy91c2IvY29yZS9waHkuaAo+Pj4+ Pj4gQEAgLTAsMCArMSw3IEBACj4+Pj4+PiArc3RydWN0IHVzYl9waHlfcm9vdGh1YjsKPj4+Pj4+ ICsKPj4+Pj4+ICtzdHJ1Y3QgdXNiX3BoeV9yb290aHViICp1c2JfcGh5X3Jvb3RodWJfaW5pdChz dHJ1Y3QgZGV2aWNlICpkZXYpOwo+Pj4+Pj4gK2ludCB1c2JfcGh5X3Jvb3RodWJfZXhpdChzdHJ1 Y3QgdXNiX3BoeV9yb290aHViICpwaHlfcm9vdGh1Yik7Cj4+Pj4+PiArCj4+Pj4+PiAraW50IHVz Yl9waHlfcm9vdGh1Yl9wb3dlcl9vbihzdHJ1Y3QgdXNiX3BoeV9yb290aHViICpwaHlfcm9vdGh1 Yik7Cj4+Pj4+PiArdm9pZCB1c2JfcGh5X3Jvb3RodWJfcG93ZXJfb2ZmKHN0cnVjdCB1c2JfcGh5 X3Jvb3RodWIgKnBoeV9yb290aHViKTsKPj4+Pj4+Cj4+Pj4+Cj4+Pgo+Cg==