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: Chunfeng Yun Message-Id: <1521532486.3717.82.camel@mhfsdcap03> Date: Tue, 20 Mar 2018 15:54:46 +0800 To: Martin Blumenstingl Cc: Roger Quadros , 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" , KISHON VIJAY ABRAHAM List-ID: SGkgTWFydGluLAoKT24gTW9uLCAyMDE4LTAzLTE5IGF0IDE3OjEyICswMTAwLCBNYXJ0aW4gQmx1 bWVuc3RpbmdsIHdyb3RlOgo+IEhpIFJvZ2VyLAo+IAo+IE9uIE1vbiwgTWFyIDE5LCAyMDE4IGF0 IDk6NDkgQU0sIFJvZ2VyIFF1YWRyb3MgPHJvZ2VycUB0aS5jb20+IHdyb3RlOgo+ID4gSGksCj4g Pgo+ID4gT24gMTkvMDMvMTggMDA6MjksIE1hcnRpbiBCbHVtZW5zdGluZ2wgd3JvdGU6Cj4gPj4g SGkgUm9nZXIsCj4gPj4KPiA+PiBPbiBGcmksIE1hciAxNiwgMjAxOCBhdCAzOjMyIFBNLCBSb2dl ciBRdWFkcm9zIDxyb2dlcnFAdGkuY29tPiB3cm90ZToKPiA+Pj4gK3NvbWUgVEkgZm9sa3MKPiA+ Pj4KPiA+Pj4gSGkgTWFydGluLAo+ID4+Pgo+ID4+PiBPbiAxOC8wMi8xOCAyMDo0NCwgTWFydGlu IEJsdW1lbnN0aW5nbCB3cm90ZToKPiA+Pj4+IE1hbnkgU29DIHBsYXRmb3JtcyBoYXZlIHNlcGFy YXRlIGRldmljZXMgZm9yIHRoZSBVU0IgUEhZIHdoaWNoIGFyZQo+ID4+Pj4gcmVnaXN0ZXJlZCB0 aHJvdWdoIHRoZSBnZW5lcmljIFBIWSBmcmFtZXdvcmsuIFRoZXNlIFBIWXMgaGF2ZSB0byBiZQo+ ID4+Pj4gZW5hYmxlZCB0byBtYWtlIHRoZSBVU0IgY29udHJvbGxlciBhY3R1YWxseSB3b3JrLiBU aGV5IGFsc28gaGF2ZSB0byBiZQo+ID4+Pj4gZGlzYWJsZWQgYWdhaW4gb24gc2h1dGRvd24vc3Vz cGVuZC4KPiA+Pj4+Cj4gPj4+PiBDdXJyZW50bHkgKGF0IGxlYXN0KSB0aGUgZm9sbG93aW5nIEhD SSBwbGF0Zm9ybSBkcml2ZXJzIGFyZSB1c2luZyBjdXN0b20KPiA+Pj4+IGNvZGUgdG8gb2J0YWlu IGFsbCBQSFlzIHZpYSBkZXZpY2V0cmVlIGZvciB0aGUgcm9vdGh1Yi9jb250cm9sbGVyIGFuZAo+ ID4+Pj4gZGlzYWJsZS9lbmFibGUgdGhlbSB3aGVuIHJlcXVpcmVkOgo+ID4+Pj4gLSBlaGNpLXBs YXRmb3JtLmMgaGFzIGVoY2lfcGxhdGZvcm1fcG93ZXJfe29uLG9mZn0KPiA+Pj4+IC0geGhjaS1t dGsuYyBoYXMgeGhjaV9tdGtfcGh5X3tpbml0LGV4aXQscG93ZXJfb24scG93ZXJfb2ZmfQo+ID4+ Pj4gLSBvaGNpLXBsYXRmb3JtLmMgaGFzIG9oY2lfcGxhdGZvcm1fcG93ZXJfe29uLG9mZn0KPiA+ Pj4+Cj4gPj4+PiBXaXRoIHRoaXMgbmV3IHdyYXBwZXIgdGhlIFVTQiBQSFlzIGNhbiBiZSBzcGVj aWZpZWQgZGlyZWN0bHkgaW4gdGhlCj4gPj4+PiBVU0IgY29udHJvbGxlcidzIGRldmljZXRyZWUg bm9kZSAoanVzdCBsaWtlIG9uIHRoZSBkcml2ZXJzIGxpc3RlZAo+ID4+Pj4gYWJvdmUpLiBUaGlz IGFsbG93cyBTb0NzIGxpa2UgdGhlIEFtbG9naWMgTWVzb24gR1hMIGZhbWlseSB0byBvcGVyYXRl Cj4gPj4+PiBjb3JyZWN0bHkgb25jZSB0aGlzIGlzIHdpcmVkIHVwIGNvcnJlY3RseS4gVGhlc2Ug U29DcyB1c2UgYSBkd2MzCj4gPj4+PiBjb250cm9sbGVyIGFuZCByZXF1aXJlIGFsbCBVU0IgUEhZ cyB0byBiZSBpbml0aWFsaXplZCAoaWYgb25lIG9mIHRoZSBVU0IKPiA+Pj4+IFBIWXMgaXQgbm90 IGluaXRpYWxpemVkIHRoZW4gbm9uZSBvZiBVU0IgcG9ydCB3b3JrcyBhdCBhbGwpLgo+ID4+Pj4K PiA+Pj4+IFNpZ25lZC1vZmYtYnk6IE1hcnRpbiBCbHVtZW5zdGluZ2wgPG1hcnRpbi5ibHVtZW5z dGluZ2xAZ29vZ2xlbWFpbC5jb20+Cj4gPj4+PiBUZXN0ZWQtYnk6IFlpeHVuIExhbiA8eWl4dW4u bGFuQGFtbG9naWMuY29tPgo+ID4+Pj4gQ2M6IE5laWwgQXJtc3Ryb25nIDxuYXJtc3Ryb25nQGJh eWxpYnJlLmNvbT4KPiA+Pj4+IENjOiBDaHVuZmVuZyBZdW4gPGNodW5mZW5nLnl1bkBtZWRpYXRl ay5jb20+Cj4gPj4+Cj4gPj4+IFRoaXMgcGF0Y2ggaXMgYnJlYWtpbmcgbG93IHBvd2VyIGNhc2Vz IG9uIFRJIFNvQ3Mgd2hlbiBVU0IgaXMgaW4gaG9zdCBtb2RlLgo+ID4+PiBJJ2xsIGV4cGxhaW4g d2h5IGJlbG93Lgo+ID4+IGJhc2VkIG9uIHlvdXIgZXhwbGFuYXRpb24gYW5kIHJlYWRpbmcgdGhl IFRJIFBIWSBkcml2ZXJzIEkgYW0gYXNzdW1pbmcKPiA+PiB0aGF0IHRoZSBhZmZlY3RlZCBTb0Nz IGFyZSB1c2luZyB0aGUgInBoeS1vbWFwLXVzYjIiIGRyaXZlcgo+ID4+Cj4gPiB5ZXMgYW5kIHBo eS10aS1waXBlMyBhcyB3ZWxsIGkuZS4gInRpLHBoeS11c2IzIiBhbmQgInRpLG9tYXAtdXNiMyIK PiBJIG1pc3NlZCB0aGF0LCB0aGFua3MKPiAKPiA+Pj4+IC0tLQo+ID4+Pj4gIGRyaXZlcnMvdXNi L2NvcmUvTWFrZWZpbGUgfCAgIDIgKy0KPiA+Pj4+ICBkcml2ZXJzL3VzYi9jb3JlL3BoeS5jICAg IHwgMTU4ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKPiA+ Pj4+ICBkcml2ZXJzL3VzYi9jb3JlL3BoeS5oICAgIHwgICA3ICsrCj4gPj4+PiAgMyBmaWxlcyBj aGFuZ2VkLCAxNjYgaW5zZXJ0aW9ucygrKSwgMSBkZWxldGlvbigtKQo+ID4+Pj4gIGNyZWF0ZSBt b2RlIDEwMDY0NCBkcml2ZXJzL3VzYi9jb3JlL3BoeS5jCj4gPj4+PiAgY3JlYXRlIG1vZGUgMTAw NjQ0IGRyaXZlcnMvdXNiL2NvcmUvcGh5LmgKPiA+Pj4+Cj4gPj4+PiBkaWZmIC0tZ2l0IGEvZHJp dmVycy91c2IvY29yZS9NYWtlZmlsZSBiL2RyaXZlcnMvdXNiL2NvcmUvTWFrZWZpbGUKPiA+Pj4+ IGluZGV4IDkyYzljZWZiNDMxNy4uMThlODc0YjA0NDFlIDEwMDY0NAo+ID4+Pj4gLS0tIGEvZHJp dmVycy91c2IvY29yZS9NYWtlZmlsZQo+ID4+Pj4gKysrIGIvZHJpdmVycy91c2IvY29yZS9NYWtl ZmlsZQo+ID4+Pj4gQEAgLTYsNyArNiw3IEBACj4gPj4+PiAgdXNiY29yZS15IDo9IHVzYi5vIGh1 Yi5vIGhjZC5vIHVyYi5vIG1lc3NhZ2UubyBkcml2ZXIubwo+ID4+Pj4gIHVzYmNvcmUteSArPSBj b25maWcubyBmaWxlLm8gYnVmZmVyLm8gc3lzZnMubyBlbmRwb2ludC5vCj4gPj4+PiAgdXNiY29y ZS15ICs9IGRldmlvLm8gbm90aWZ5Lm8gZ2VuZXJpYy5vIHF1aXJrcy5vIGRldmljZXMubwo+ID4+ Pj4gLXVzYmNvcmUteSArPSBwb3J0Lm8KPiA+Pj4+ICt1c2Jjb3JlLXkgKz0gcGh5Lm8gcG9ydC5v Cj4gPj4+Pgo+ID4+Pj4gIHVzYmNvcmUtJChDT05GSUdfT0YpICAgICAgICAgKz0gb2Yubwo+ID4+ Pj4gIHVzYmNvcmUtJChDT05GSUdfVVNCX1BDSSkgICAgICAgICAgICArPSBoY2QtcGNpLm8KPiA+ Pj4+IGRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9jb3JlL3BoeS5jIGIvZHJpdmVycy91c2IvY29y ZS9waHkuYwo+ID4+Pj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQKPiA+Pj4+IGluZGV4IDAwMDAwMDAw MDAwMC4uMDliN2M0M2MwZWE0Cj4gPj4+PiAtLS0gL2Rldi9udWxsCj4gPj4+PiArKysgYi9kcml2 ZXJzL3VzYi9jb3JlL3BoeS5jCj4gPj4+PiBAQCAtMCwwICsxLDE1OCBAQAo+ID4+Pj4gKy8vIFNQ RFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wKwo+ID4+Pj4gKy8qCj4gPj4+PiArICogQSB3 cmFwcGVyIGZvciBtdWx0aXBsZSBQSFlzIHdoaWNoIHBhc3NlcyBhbGwgcGh5XyogZnVuY3Rpb24g Y2FsbHMgdG8KPiA+Pj4+ICsgKiBtdWx0aXBsZSAoYWN0dWFsKSBQSFkgZGV2aWNlcy4gVGhpcyBp cyBjb21lcyBoYW5keSB3aGVuIGluaXRpYWxpemluZwo+ID4+Pj4gKyAqIGFsbCBQSFlzIG9uIGEg SENEIGFuZCB0byBrZWVwIHRoZW0gYWxsIGluIHRoZSBzYW1lIHN0YXRlLgo+ID4+Pj4gKyAqCj4g Pj4+PiArICogQ29weXJpZ2h0IChDKSAyMDE4IE1hcnRpbiBCbHVtZW5zdGluZ2wgPG1hcnRpbi5i bHVtZW5zdGluZ2xAZ29vZ2xlbWFpbC5jb20+Cj4gPj4+PiArICovCj4gPj4+PiArCj4gPj4+PiAr I2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgo+ID4+Pj4gKyNpbmNsdWRlIDxsaW51eC9saXN0Lmg+ Cj4gPj4+PiArI2luY2x1ZGUgPGxpbnV4L3BoeS9waHkuaD4KPiA+Pj4+ICsjaW5jbHVkZSA8bGlu dXgvb2YuaD4KPiA+Pj4+ICsKPiA+Pj4+ICsjaW5jbHVkZSAicGh5LmgiCj4gPj4+PiArCj4gPj4+ PiArc3RydWN0IHVzYl9waHlfcm9vdGh1YiB7Cj4gPj4+PiArICAgICBzdHJ1Y3QgcGh5ICAgICAg ICAgICAgICAqcGh5Owo+ID4+Pj4gKyAgICAgc3RydWN0IGxpc3RfaGVhZCAgICAgICAgbGlzdDsK PiA+Pj4+ICt9Owo+ID4+Pj4gKwo+ID4+Pj4gK3N0YXRpYyBzdHJ1Y3QgdXNiX3BoeV9yb290aHVi ICp1c2JfcGh5X3Jvb3RodWJfYWxsb2Moc3RydWN0IGRldmljZSAqZGV2KQo+ID4+Pj4gK3sKPiA+ Pj4+ICsgICAgIHN0cnVjdCB1c2JfcGh5X3Jvb3RodWIgKnJvb3RodWJfZW50cnk7Cj4gPj4+PiAr Cj4gPj4+PiArICAgICByb290aHViX2VudHJ5ID0gZGV2bV9remFsbG9jKGRldiwgc2l6ZW9mKCpy b290aHViX2VudHJ5KSwgR0ZQX0tFUk5FTCk7Cj4gPj4+PiArICAgICBpZiAoIXJvb3RodWJfZW50 cnkpCj4gPj4+PiArICAgICAgICAgICAgIHJldHVybiBFUlJfUFRSKC1FTk9NRU0pOwo+ID4+Pj4g Kwo+ID4+Pj4gKyAgICAgSU5JVF9MSVNUX0hFQUQoJnJvb3RodWJfZW50cnktPmxpc3QpOwo+ID4+ Pj4gKwo+ID4+Pj4gKyAgICAgcmV0dXJuIHJvb3RodWJfZW50cnk7Cj4gPj4+PiArfQo+ID4+Pj4g Kwo+ID4+Pj4gK3N0YXRpYyBpbnQgdXNiX3BoeV9yb290aHViX2FkZF9waHkoc3RydWN0IGRldmlj ZSAqZGV2LCBpbnQgaW5kZXgsCj4gPj4+PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0KQo+ID4+Pj4gK3sKPiA+Pj4+ICsgICAgIHN0cnVjdCB1 c2JfcGh5X3Jvb3RodWIgKnJvb3RodWJfZW50cnk7Cj4gPj4+PiArICAgICBzdHJ1Y3QgcGh5ICpw aHkgPSBkZXZtX29mX3BoeV9nZXRfYnlfaW5kZXgoZGV2LCBkZXYtPm9mX25vZGUsIGluZGV4KTsK PiA+Pj4+ICsKPiA+Pj4+ICsgICAgIGlmIChJU19FUlJfT1JfTlVMTChwaHkpKSB7Cj4gPj4+PiAr ICAgICAgICAgICAgIGlmICghcGh5IHx8IFBUUl9FUlIocGh5KSA9PSAtRU5PREVWKQo+ID4+Pj4g KyAgICAgICAgICAgICAgICAgICAgIHJldHVybiAwOwo+ID4+Pj4gKyAgICAgICAgICAgICBlbHNl Cj4gPj4+PiArICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFBUUl9FUlIocGh5KTsKPiA+Pj4+ ICsgICAgIH0KPiA+Pj4+ICsKPiA+Pj4+ICsgICAgIHJvb3RodWJfZW50cnkgPSB1c2JfcGh5X3Jv b3RodWJfYWxsb2MoZGV2KTsKPiA+Pj4+ICsgICAgIGlmIChJU19FUlIocm9vdGh1Yl9lbnRyeSkp Cj4gPj4+PiArICAgICAgICAgICAgIHJldHVybiBQVFJfRVJSKHJvb3RodWJfZW50cnkpOwo+ID4+ Pj4gKwo+ID4+Pj4gKyAgICAgcm9vdGh1Yl9lbnRyeS0+cGh5ID0gcGh5Owo+ID4+Pj4gKwo+ID4+ Pj4gKyAgICAgbGlzdF9hZGRfdGFpbCgmcm9vdGh1Yl9lbnRyeS0+bGlzdCwgbGlzdCk7Cj4gPj4+ PiArCj4gPj4+PiArICAgICByZXR1cm4gMDsKPiA+Pj4+ICt9Cj4gPj4+PiArCj4gPj4+PiArc3Ry dWN0IHVzYl9waHlfcm9vdGh1YiAqdXNiX3BoeV9yb290aHViX2luaXQoc3RydWN0IGRldmljZSAq ZGV2KQo+ID4+Pj4gK3sKPiA+Pj4+ICsgICAgIHN0cnVjdCB1c2JfcGh5X3Jvb3RodWIgKnBoeV9y b290aHViOwo+ID4+Pj4gKyAgICAgc3RydWN0IHVzYl9waHlfcm9vdGh1YiAqcm9vdGh1Yl9lbnRy eTsKPiA+Pj4+ICsgICAgIHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQ7Cj4gPj4+PiArICAgICBpbnQg aSwgbnVtX3BoeXMsIGVycjsKPiA+Pj4+ICsKPiA+Pj4+ICsgICAgIG51bV9waHlzID0gb2ZfY291 bnRfcGhhbmRsZV93aXRoX2FyZ3MoZGV2LT5vZl9ub2RlLCAicGh5cyIsCj4gPj4+PiArICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIjcGh5LWNlbGxzIik7Cj4gPj4+ PiArICAgICBpZiAobnVtX3BoeXMgPD0gMCkKPiA+Pj4+ICsgICAgICAgICAgICAgcmV0dXJuIE5V TEw7Cj4gPj4+PiArCj4gPj4+PiArICAgICBwaHlfcm9vdGh1YiA9IHVzYl9waHlfcm9vdGh1Yl9h bGxvYyhkZXYpOwo+ID4+Pj4gKyAgICAgaWYgKElTX0VSUihwaHlfcm9vdGh1YikpCj4gPj4+PiAr ICAgICAgICAgICAgIHJldHVybiBwaHlfcm9vdGh1YjsKPiA+Pj4+ICsKPiA+Pj4+ICsgICAgIGZv ciAoaSA9IDA7IGkgPCBudW1fcGh5czsgaSsrKSB7Cj4gPj4+PiArICAgICAgICAgICAgIGVyciA9 IHVzYl9waHlfcm9vdGh1Yl9hZGRfcGh5KGRldiwgaSwgJnBoeV9yb290aHViLT5saXN0KTsKPiA+ Pj4+ICsgICAgICAgICAgICAgaWYgKGVycikKPiA+Pj4+ICsgICAgICAgICAgICAgICAgICAgICBn b3RvIGVycl9vdXQ7Cj4gPj4+PiArICAgICB9Cj4gPj4+PiArCj4gPj4+PiArICAgICBoZWFkID0g JnBoeV9yb290aHViLT5saXN0Owo+ID4+Pj4gKwo+ID4+Pj4gKyAgICAgbGlzdF9mb3JfZWFjaF9l bnRyeShyb290aHViX2VudHJ5LCBoZWFkLCBsaXN0KSB7Cj4gPj4+PiArICAgICAgICAgICAgIGVy ciA9IHBoeV9pbml0KHJvb3RodWJfZW50cnktPnBoeSk7Cj4gPj4+Cj4gPj4+IFRoZSBwaHlfaW5p dCgpIGZ1bmN0aW9uIGFjdHVhbGx5IGVuYWJsZXMgdGhlIFBIWSBjbG9ja3MuCj4gPj4+IEl0IHNo b3VsZCBiZSBtb3ZlZCB0byB0aGUgdXNiX3BoeV9yb290aHViX2V4aXQoKSByb3V0aW5lIGp1c3Qg YmVmb3JlIGNhbGxpbmcgcGh5X3Bvd2VyX29uKCkuCj4gPj4gZG8geW91IG1lYW4gdGhhdCBwaHlf aW5pdCBzaG91bGQgYmUgbW92ZWQgdG8gdXNiX3BoeV9yb290aHViX3Bvd2VyX29uCj4gPj4gKGp1 c3QgYmVmb3JlIHBoeV9wb3dlcl9vbiBpcyBjYWxsZWQgd2l0aGluIHVzYl9waHlfcm9vdGh1Yl9w b3dlcl9vbik/Cj4gPj4KPiA+Cj4gPiBZZXMuCj4gPgo+ID4+IGFuIGVhcmxpZXIgdmVyc2lvbiBv ZiBteSBwYXRjaCBkaWQgZXhhY3RseSB0aGlzLCBidXQgaXQgY2F1c2VkCj4gPj4gcHJvYmxlbXMg ZHVyaW5nIGEgc3VzcGVuZC9yZXN1bWUgY3ljbGUgb24gTWVkaWF0ZWsgZGV2aWNlcwo+ID4+IENo dW5mZW5nIFl1biByZXBvcnRlZCB0aGF0IGlzc3VlIGhlcmUgWzBdLCBxdW90ZSBmcm9tIHRoYXQg bWFpbCBmb3IKPiA+PiBlYXNpZXIgcmVhZGluZzoKPiA+PiAiSW4gb3JkZXIgdG8ga2VlcCBsaW5r IHN0YXRlIG9uIG10ODE3Mywgd2UganVzdCBwb3dlciBvZmYgYWxsIHBoeXMobm90Cj4gPj4gZXhp dCkgd2hlbiBzeXN0ZW0gZW50ZXIgc3VzcGVuZCwgdGhlbiBwb3dlciBvbiB0aGVtIGFnYWluIChu ZWVkbid0Cj4gPj4gaW5pdCwgb3RoZXJ3aXNlIGRldmljZSB3aWxsIGJlIGRpc2Nvbm5lY3RlZCkg d2hlbiBzeXN0ZW0gcmVzdW1lLCB0aGlzCj4gPj4gY2FuIGF2b2lkIHJlLWVudW1lcmF0aW5nIGRl dmljZS4iCj4gPj4KPiA+Pj4+ICsgICAgICAgICAgICAgaWYgKGVycikKPiA+Pj4+ICsgICAgICAg ICAgICAgICAgICAgICBnb3RvIGVycl9leGl0X3BoeXM7Cj4gPj4+PiArICAgICB9Cj4gPj4+PiAr Cj4gPj4+PiArICAgICByZXR1cm4gcGh5X3Jvb3RodWI7Cj4gPj4+PiArCj4gPj4+PiArZXJyX2V4 aXRfcGh5czoKPiA+Pj4+ICsgICAgIGxpc3RfZm9yX2VhY2hfZW50cnlfY29udGludWVfcmV2ZXJz ZShyb290aHViX2VudHJ5LCBoZWFkLCBsaXN0KQo+ID4+Pj4gKyAgICAgICAgICAgICBwaHlfZXhp dChyb290aHViX2VudHJ5LT5waHkpOwo+ID4+Pj4gKwo+ID4+Pj4gK2Vycl9vdXQ6Cj4gPj4+PiAr ICAgICByZXR1cm4gRVJSX1BUUihlcnIpOwo+ID4+Pj4gK30KPiA+Pj4+ICtFWFBPUlRfU1lNQk9M X0dQTCh1c2JfcGh5X3Jvb3RodWJfaW5pdCk7Cj4gPj4+PiArCj4gPj4+PiAraW50IHVzYl9waHlf cm9vdGh1Yl9leGl0KHN0cnVjdCB1c2JfcGh5X3Jvb3RodWIgKnBoeV9yb290aHViKQo+ID4+Pj4g K3sKPiA+Pj4+ICsgICAgIHN0cnVjdCB1c2JfcGh5X3Jvb3RodWIgKnJvb3RodWJfZW50cnk7Cj4g Pj4+PiArICAgICBzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkOwo+ID4+Pj4gKyAgICAgaW50IGVyciwg cmV0ID0gMDsKPiA+Pj4+ICsKPiA+Pj4+ICsgICAgIGlmICghcGh5X3Jvb3RodWIpCj4gPj4+PiAr ICAgICAgICAgICAgIHJldHVybiAwOwo+ID4+Pj4gKwo+ID4+Pj4gKyAgICAgaGVhZCA9ICZwaHlf cm9vdGh1Yi0+bGlzdDsKPiA+Pj4+ICsKPiA+Pj4+ICsgICAgIGxpc3RfZm9yX2VhY2hfZW50cnko cm9vdGh1Yl9lbnRyeSwgaGVhZCwgbGlzdCkgewo+ID4+Pj4gKyAgICAgICAgICAgICBlcnIgPSBw aHlfZXhpdChyb290aHViX2VudHJ5LT5waHkpOwo+ID4+Pj4gKyAgICAgICAgICAgICBpZiAoZXJy KQo+ID4+Pj4gKyAgICAgICAgICAgICAgICAgICAgIHJldCA9IHJldDsKPiA+Pj4+ICsgICAgIH0K PiA+Pj4KPiA+Pj4gcGh5X2V4aXQoKSBzaG91bGQgYmUgbW92ZWQgdG8gdXNiX3BoeV9yb290aHVi X3Bvd2Vyb2ZmKCkganVzdCBhZnRlciBjYWxsaW5nIHBoeV9wb3dlcl9vZmYoKS4KPiA+PiBpZiBJ IHVuZGVyc3Rvb2QgQ2h1bmZlbmcgWXVuIGNvcnJlY3RseSB0aGlzIHdpbGwgcmVxdWlyZQo+ID4+ IHJlLWVudW1lcmF0aW9uIG9mIHRoZSBVU0IgZGV2aWNlcyBhZnRlciBhIHN1c3BlbmQvcmVzdW1l IGN5Y2xlIG9uCj4gPj4gTWVkaWF0ZWsgU29Dcwo+ID4+Cj4gPgo+ID4gT0suIEkgc3VwcG9zZSB0 aGF0IHRoZXJlIGFyZSAyIGNhc2VzCj4gPiAxKSBNZWRpYXRlaydzIGNhc2U6IFVTQiBjb250cm9s bGVyIGNvbnRleHQgcmV0YWluZWQgYWNyb3NzIHN1c3BlbmQvcmVzdW1lLgo+ID4gUmVtb3RlIHdh a2V1cCBwcm9iYWJseSByZXF1aXJlZC4KPiA+IE5vIHJlLWVudW1lcmF0aW9uIHByZWZlcnJlZCBh ZnRlciByZXN1bWUuIHBoeV9leGl0KCkvcGh5X2luaXQoKSBtdXN0IG5vdCBiZSBjYWxsZWQKPiA+ IGR1cmluZyBzdXNwZW5kL3Jlc3VtZSB0byBrZWVwIFBIWSBsaW5rIGFjdGl2ZS4KPiBEb2N1bWVu dGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvdXNiL21lZGlhdGVrLG10dTMudHh0IGluZGVlZCBz aG93cwo+IHRoYXQgdGhlIHBhcmVudCBvZiB0aGUgVVNCIGNvbnRyb2xsZXIgY2FuIGJlIG1hcmtl ZCBhcyAid2FrZXVwLXNvdXJjZSIKSW4gZmFjdCwgeGhjaS1tdGsgZHJpdmVyIGFsd2F5cyBrZWVw cyBsaW5rIHN0YXRlIGFjcm9zcyBzdXNwZW5kL3Jlc3VtZSwKbm8gbWF0dGVyICJ3YWtldXAtc291 cmNlIiBpcyBtYXJrZWQgb3Igbm90LCBpdCdzIGp1c3QgdXNlZCB0bwplbmFibGUvZGlzYWJsZSB0 byBzZW5kIHdha2V1cCBzaWduYWwgdG8gU1BNLgoKPiAKPiA+IDIpIFRJJ3MgY2FzZTogbG93IHBv d2VyIGltcG9ydGFudDogVVNCIGNvbnRleHQgaXMgbG9zdCwgT0sgdG8gcmUtZW51bWVyYXRlLgo+ ID4gcGh5X2V4aXQoKS9waHlfaW5pdCgpIG11c3QgYmUgY2FsbGVkIGR1cmluZyBzdXNwZW5kL3Jl c3VtZS4KPiBBQ0sKPiAKPiA+Pj4gV2l0aCB0aGF0IHRoZXJlIGlzIG5vdGhpbmcgZWxzZSBiZWlu ZyBkb25lIGhlcmUuIFNob3VsZG4ndCB3ZSBiZSBkb2luZyB0aGUgZXF1aXZhbGVudCBvZgo+ID4+ PiB1c2JfcGh5X3Jvb3RodWJfZGVsX3BoeSgpIGFuZCB1c2JfcGh5X3Jvb3RodWJfZnJlZSgpIGhl cmU/Cj4gPj4+Cj4gPj4+PiArCj4gPj4+PiArICAgICByZXR1cm4gcmV0Owo+ID4+Pj4gK30KPiA+ Pj4+ICtFWFBPUlRfU1lNQk9MX0dQTCh1c2JfcGh5X3Jvb3RodWJfZXhpdCk7Cj4gPj4+PiArCj4g Pj4+PiAraW50IHVzYl9waHlfcm9vdGh1Yl9wb3dlcl9vbihzdHJ1Y3QgdXNiX3BoeV9yb290aHVi ICpwaHlfcm9vdGh1YikKPiA+Pj4+ICt7Cj4gPj4+PiArICAgICBzdHJ1Y3QgdXNiX3BoeV9yb290 aHViICpyb290aHViX2VudHJ5Owo+ID4+Pj4gKyAgICAgc3RydWN0IGxpc3RfaGVhZCAqaGVhZDsK PiA+Pj4+ICsgICAgIGludCBlcnI7Cj4gPj4+PiArCj4gPj4+PiArICAgICBpZiAoIXBoeV9yb290 aHViKQo+ID4+Pj4gKyAgICAgICAgICAgICByZXR1cm4gMDsKPiA+Pj4+ICsKPiA+Pj4+ICsgICAg IGhlYWQgPSAmcGh5X3Jvb3RodWItPmxpc3Q7Cj4gPj4+PiArCj4gPj4+PiArICAgICBsaXN0X2Zv cl9lYWNoX2VudHJ5KHJvb3RodWJfZW50cnksIGhlYWQsIGxpc3QpIHsKPiA+Pj4+ICsgICAgICAg ICAgICAgZXJyID0gcGh5X3Bvd2VyX29uKHJvb3RodWJfZW50cnktPnBoeSk7Cj4gPj4+PiArICAg ICAgICAgICAgIGlmIChlcnIpCj4gPj4+PiArICAgICAgICAgICAgICAgICAgICAgZ290byBlcnJf b3V0Owo+ID4+Pj4gKyAgICAgfQo+ID4+Pj4gKwo+ID4+Pj4gKyAgICAgcmV0dXJuIDA7Cj4gPj4+ PiArCj4gPj4+PiArZXJyX291dDoKPiA+Pj4+ICsgICAgIGxpc3RfZm9yX2VhY2hfZW50cnlfY29u dGludWVfcmV2ZXJzZShyb290aHViX2VudHJ5LCBoZWFkLCBsaXN0KQo+ID4+Pj4gKyAgICAgICAg ICAgICBwaHlfcG93ZXJfb2ZmKHJvb3RodWJfZW50cnktPnBoeSk7Cj4gPj4+PiArCj4gPj4+PiAr ICAgICByZXR1cm4gZXJyOwo+ID4+Pj4gK30KPiA+Pj4+ICtFWFBPUlRfU1lNQk9MX0dQTCh1c2Jf cGh5X3Jvb3RodWJfcG93ZXJfb24pOwo+ID4+Pj4gKwo+ID4+Pj4gK3ZvaWQgdXNiX3BoeV9yb290 aHViX3Bvd2VyX29mZihzdHJ1Y3QgdXNiX3BoeV9yb290aHViICpwaHlfcm9vdGh1YikKPiA+Pj4+ ICt7Cj4gPj4+PiArICAgICBzdHJ1Y3QgdXNiX3BoeV9yb290aHViICpyb290aHViX2VudHJ5Owo+ ID4+Pj4gKwo+ID4+Pj4gKyAgICAgaWYgKCFwaHlfcm9vdGh1YikKPiA+Pj4+ICsgICAgICAgICAg ICAgcmV0dXJuOwo+ID4+Pj4gKwo+ID4+Pj4gKyAgICAgbGlzdF9mb3JfZWFjaF9lbnRyeV9yZXZl cnNlKHJvb3RodWJfZW50cnksICZwaHlfcm9vdGh1Yi0+bGlzdCwgbGlzdCkKPiA+Pj4+ICsgICAg ICAgICAgICAgcGh5X3Bvd2VyX29mZihyb290aHViX2VudHJ5LT5waHkpOwo+ID4+Pgo+ID4+PiBO b3QgZG9pbmcgdGhlIHBoeV9leGl0KCkgaGVyZSBsZWF2ZXMgdGhlIGNsb2NrcyBlbmFibGVkIG9u IG91ciBTb0MgYW5kCj4gPj4+IHdlJ3JlIG5vIGxvbmdlciBhYmxlIHRvIHJlYWNoIGxvdyBwb3dl ciBzdGF0ZXMgb24gc3lzdGVtIHN1c3BlbmQuCj4gPj4gSSdtIG5vdCBzdXJlIHdoZXJlIHRoaXMg cHJvYmxlbSBzaG91bGQgYmUgc29sdmVkOgo+ID4+IC0gc2V0IHNraXBfcGh5X2luaXRpYWxpemF0 aW9uIGluIHN0cnVjdCB1c2JfaGNkIHRvIDEgZm9yIHRoZSBhZmZlY3RlZAo+ID4+IFRJIHBsYXRm b3Jtcwo+ID4KPiA+IE1hbnkgVEkgcGxhdGZvcm1zIGFyZSBhZmZlY3RlZCwgb21hcDUqLCBkcmE3 KiwgYW00MyoKPiA+Cj4gPj4gLSBmaXggdGhpcyBpbiB0aGUgdXNiX3BoeV9yb290aHViIGNvZGUK PiA+Cj4gPiBJJ2Qgdm90ZSBmb3IgZml4aW5nIGl0IGluIHRoZSB1c2JfcGh5X3Jvb3RodWIgY29k ZS4gSG93Pwo+ID4gSG93IGFib3V0IHVzaW5nIHRoZSBkZXZpY2VfY2FuX3dha2V1cCgpIHRvIGRl Y2lkZSBpZiB3ZSBzaG91bGQgY2FsbCBwaHlfZXhpdCgpL2luaXQoKSBvciBub3Q/Cj4gPiBJZiB0 aGUgVVNCIGRldmljZSBjYW4ndCB3YWtldXAgdGhlIHN5c3RlbSB0aGVyZSBpcyBubyBwb2ludCBp biBrZWVwaW5nIGl0IHBvd2VyZWQvY2xvY2tlZCByaWdodD8KPiBAQ2h1bmZlbmc6IGNhbiB5b3Ug Y29uZmlybSBSb2dlcidzIGlkZWEgdGhhdCB3ZSBjb3VsZCBjYWxsIHBoeV9leGl0IGlmCj4gdGhl IGNvbnRyb2xsZXIgaXMgKk5PVCogbWFya2VkIGFzICJ3YWtldXAtc291cmNlIj8KPiBJIGFtIGFs c28gbm90IHN1cmUgaWYgaXQgd291bGQgd29yaywgc2luY2UgdGhlICJ3YWtldXAtc291cmNlIgo+ IHByb3BlcnR5IGlzIGRlZmluZWQgb24gdGhlIFVTQiBjb250cm9sbGVyJ3MgcGFyZW50IG5vZGUg aW4gY2FzZSBvZiB0aGUKPiBNZWRpYXRlayBNVFUzIChNZWRpYXRlayBVU0IzLjAgRFJEKSBjb250 cm9sbGVyCkknbSBhZnJhaWQgaXQgZG9lc24ndCB3b3JrLgpJZiByZS1pbml0aWFsaXplIHBoeXMg d2hlbiBzeXN0ZW0gcmVzdW1lLCBpdCB3aWxsIGNhdXNlIHVzYiBjb250cm9sbGVyCnRvIGJlIHJl LWluaXRpYWxpemVkIHRvbywgYnV0IHRoZSBkcml2ZXIgZG9lc24ndCBzdXBwb3J0IGl0IGN1cnJl bnRseS4KCj4gCj4gPj4gLSBmaXggdGhpcyBpbiB0aGUgUEhZIGRyaXZlcgo+ID4KPiA+IFRoZXJl IGlzIG5vdGhpbmcgdG8gZml4IGluIHRoZSBQSFkgZHJpdmVyLiBJdCBpcyBkb2luZyB3aGF0IGl0 IGlzIHN1cHBvc2VkIHRvIGRvLgo+IEkgYWN0dWFsbHkgd29uZGVyIGlmIHBoeV9vcHMgc2hvdWxk IGhhdmUgZXhwbGljaXQgc3VzcGVuZC9yZXN1bWUgc3VwcG9ydDoKPiAtIGFzc3VtaW5nIHdlIGRl ZmluZSB0d28gbmV3IGNhbGxiYWNrczogLnN1c3BlbmQgYW5kIC5yZXN1bWUKPiAtIHRoZSBQSFkg ZnJhbWV3b3JrIGNvdWxkIGNhbGwgLnBvd2VyX29mZiBieSBkZWZhdWx0IGlmIC5zdXNwZW5kIGlz IG5vdCBkZWZpbmVkCj4gLSB0aGUgUEhZIGZyYW1ld29yayBjb3VsZCBjYWxsIC5wb3dlcl9vbiBi eSBkZWZhdWx0IGlmIC5yZXN1bWUgaXMgbm90IGRlZmluZWQKPiAtIGRyaXZlcnMgY291bGQgc2V0 IC5zdXNwZW5kIGFuZCAucmVzdW1lIG9uIHRoZWlyIG93biwgYWxsb3dpbmcgbW9yZQo+IGZpbmUt Z3JhaW5lZCBjb250cm9sIGJ5IGZvciBleGFtcGxlICpvbmx5KiBzdG9wcGluZyB0aGUgY2xvY2sg KGJ1dCBub3QKPiByZS1pbml0aWFsaXppbmcgdGhlIHJlZ2lzdGVycywgZXRjLikKPiAKPiBAUm9n ZXI6IHdoYXQgZG8geW91IHRoaW5rIGFib3V0IHRoaXM/Cj4gS2lzaG9uICh0aGUgUEhZIGZyYW1l d29yayBtYWludGFpbmVyKSBpcyBhbHNvIENDJ2VkIC0gSSB3b3VsZCBsaWtlIHRvCj4gaGVhciBo aXMgb3BpbmlvbiB0b28KPiAKPiA+PiAtIHNvbWV3aGVyZSBlbHNlCj4gPj4KPiA+Pj4+ICt9Cj4g Pj4+PiArRVhQT1JUX1NZTUJPTF9HUEwodXNiX3BoeV9yb290aHViX3Bvd2VyX29mZik7Cj4gPj4+ PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvY29yZS9waHkuaCBiL2RyaXZlcnMvdXNiL2NvcmUv cGh5LmgKPiA+Pj4+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4gPj4+PiBpbmRleCAwMDAwMDAwMDAw MDAuLjZmZGU1OWJmYmZmOAo+ID4+Pj4gLS0tIC9kZXYvbnVsbAo+ID4+Pj4gKysrIGIvZHJpdmVy cy91c2IvY29yZS9waHkuaAo+ID4+Pj4gQEAgLTAsMCArMSw3IEBACj4gPj4+PiArc3RydWN0IHVz Yl9waHlfcm9vdGh1YjsKPiA+Pj4+ICsKPiA+Pj4+ICtzdHJ1Y3QgdXNiX3BoeV9yb290aHViICp1 c2JfcGh5X3Jvb3RodWJfaW5pdChzdHJ1Y3QgZGV2aWNlICpkZXYpOwo+ID4+Pj4gK2ludCB1c2Jf cGh5X3Jvb3RodWJfZXhpdChzdHJ1Y3QgdXNiX3BoeV9yb290aHViICpwaHlfcm9vdGh1Yik7Cj4g Pj4+PiArCj4gPj4+PiAraW50IHVzYl9waHlfcm9vdGh1Yl9wb3dlcl9vbihzdHJ1Y3QgdXNiX3Bo eV9yb290aHViICpwaHlfcm9vdGh1Yik7Cj4gPj4+PiArdm9pZCB1c2JfcGh5X3Jvb3RodWJfcG93 ZXJfb2ZmKHN0cnVjdCB1c2JfcGh5X3Jvb3RodWIgKnBoeV9yb290aHViKTsKPiA+Pj4+Cj4gPj4+ Cj4gPgo+ID4gPHNuaXA+Cj4gPgo+ID4gLS0KPiA+IGNoZWVycywKPiA+IC1yb2dlcgo+ID4KPiA+ IFRleGFzIEluc3RydW1lbnRzIEZpbmxhbmQgT3ksIFBvcmtrYWxhbmthdHUgMjIsIDAwMTgwIEhl bHNpbmtpLiBZLXR1bm51cy9CdXNpbmVzcyBJRDogMDYxNTUyMS00LiBLb3RpcGFpa2thL0RvbWlj aWxlOiBIZWxzaW5raQo+IAo+IAo+IFJlZ2FyZHMKPiBNYXJ0aW4KLS0tClRvIHVuc3Vic2NyaWJl IGZyb20gdGhpcyBsaXN0OiBzZW5kIHRoZSBsaW5lICJ1bnN1YnNjcmliZSBsaW51eC11c2IiIGlu CnRoZSBib2R5IG9mIGEgbWVzc2FnZSB0byBtYWpvcmRvbW9Admdlci5rZXJuZWwub3JnCk1vcmUg bWFqb3Jkb21vIGluZm8gYXQgIGh0dHA6Ly92Z2VyLmtlcm5lbC5vcmcvbWFqb3Jkb21vLWluZm8u aHRtbAo=