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: <1521775181.3717.158.camel@mhfsdcap03> Date: Fri, 23 Mar 2018 11:19:41 +0800 To: Roger Quadros Cc: Martin Blumenstingl , 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: T24gVGh1LCAyMDE4LTAzLTIyIGF0IDE0OjQxICswMjAwLCBSb2dlciBRdWFkcm9zIHdyb3RlOgo+ IE9uIDIyLzAzLzE4IDEwOjEwLCBDaHVuZmVuZyBZdW4gd3JvdGU6Cj4gPiBIaSwKPiA+IE9uIFdl ZCwgMjAxOC0wMy0yMSBhdCAxMzozMCArMDIwMCwgUm9nZXIgUXVhZHJvcyB3cm90ZToKPiA+PiBN YXJ0aW4sCj4gPj4KPiA+PiBPbiAyMS8wMy8xOCAwMDowMSwgTWFydGluIEJsdW1lbnN0aW5nbCB3 cm90ZToKPiA+Pj4gSGkgUm9nZXIsIEhpIENodW5mZW5nLAo+ID4+Pgo+ID4+PiBPbiBUdWUsIE1h ciAyMCwgMjAxOCBhdCAxOjA0IFBNLCBDaHVuZmVuZyBZdW4gPGNodW5mZW5nLnl1bkBtZWRpYXRl ay5jb20+IHdyb3RlOgo+ID4+Pj4gSGkgTWFydGluICYgUm9nZXI6Cj4gPj4+Pgo+ID4+Pj4gT24g TW9uLCAyMDE4LTAzLTE5IGF0IDE3OjEyICswMTAwLCBNYXJ0aW4gQmx1bWVuc3RpbmdsIHdyb3Rl Ogo+ID4+Pj4+IEhpIFJvZ2VyLAo+ID4+Pj4+Cj4gPj4+Pj4gT24gTW9uLCBNYXIgMTksIDIwMTgg YXQgOTo0OSBBTSwgUm9nZXIgUXVhZHJvcyA8cm9nZXJxQHRpLmNvbT4gd3JvdGU6Cj4gPj4+Pj4+ IEhpLAo+ID4+Pj4+Pgo+ID4+Pj4+PiBPbiAxOS8wMy8xOCAwMDoyOSwgTWFydGluIEJsdW1lbnN0 aW5nbCB3cm90ZToKPiA+Pj4+Pj4+IEhpIFJvZ2VyLAo+ID4+Pj4+Pj4KPiA+Pj4+Pj4+IE9uIEZy aSwgTWFyIDE2LCAyMDE4IGF0IDM6MzIgUE0sIFJvZ2VyIFF1YWRyb3MgPHJvZ2VycUB0aS5jb20+ IHdyb3RlOgo+ID4+Pj4+Pj4+ICtzb21lIFRJIGZvbGtzCj4gPj4+Pj4+Pj4KPiA+Pj4+Pj4+PiBI aSBNYXJ0aW4sCj4gPj4+Pj4+Pj4KPiA+Pj4+Pj4+PiBPbiAxOC8wMi8xOCAyMDo0NCwgTWFydGlu IEJsdW1lbnN0aW5nbCB3cm90ZToKPiA+Pj4+Pj4+Pj4gTWFueSBTb0MgcGxhdGZvcm1zIGhhdmUg c2VwYXJhdGUgZGV2aWNlcyBmb3IgdGhlIFVTQiBQSFkgd2hpY2ggYXJlCj4gPj4+Pj4+Pj4+IHJl Z2lzdGVyZWQgdGhyb3VnaCB0aGUgZ2VuZXJpYyBQSFkgZnJhbWV3b3JrLiBUaGVzZSBQSFlzIGhh dmUgdG8gYmUKPiA+Pj4+Pj4+Pj4gZW5hYmxlZCB0byBtYWtlIHRoZSBVU0IgY29udHJvbGxlciBh Y3R1YWxseSB3b3JrLiBUaGV5IGFsc28gaGF2ZSB0byBiZQo+ID4+Pj4+Pj4+PiBkaXNhYmxlZCBh Z2FpbiBvbiBzaHV0ZG93bi9zdXNwZW5kLgo+ID4+Pj4+Pj4+Pgo+ID4+Pj4+Pj4+PiBDdXJyZW50 bHkgKGF0IGxlYXN0KSB0aGUgZm9sbG93aW5nIEhDSSBwbGF0Zm9ybSBkcml2ZXJzIGFyZSB1c2lu ZyBjdXN0b20KPiA+Pj4+Pj4+Pj4gY29kZSB0byBvYnRhaW4gYWxsIFBIWXMgdmlhIGRldmljZXRy ZWUgZm9yIHRoZSByb290aHViL2NvbnRyb2xsZXIgYW5kCj4gPj4+Pj4+Pj4+IGRpc2FibGUvZW5h YmxlIHRoZW0gd2hlbiByZXF1aXJlZDoKPiA+Pj4+Pj4+Pj4gLSBlaGNpLXBsYXRmb3JtLmMgaGFz IGVoY2lfcGxhdGZvcm1fcG93ZXJfe29uLG9mZn0KPiA+Pj4+Pj4+Pj4gLSB4aGNpLW10ay5jIGhh cyB4aGNpX210a19waHlfe2luaXQsZXhpdCxwb3dlcl9vbixwb3dlcl9vZmZ9Cj4gPj4+Pj4+Pj4+ IC0gb2hjaS1wbGF0Zm9ybS5jIGhhcyBvaGNpX3BsYXRmb3JtX3Bvd2VyX3tvbixvZmZ9Cj4gPj4+ Pj4+Pj4+Cj4gPj4+Pj4+Pj4+IFdpdGggdGhpcyBuZXcgd3JhcHBlciB0aGUgVVNCIFBIWXMgY2Fu IGJlIHNwZWNpZmllZCBkaXJlY3RseSBpbiB0aGUKPiA+Pj4+Pj4+Pj4gVVNCIGNvbnRyb2xsZXIn cyBkZXZpY2V0cmVlIG5vZGUgKGp1c3QgbGlrZSBvbiB0aGUgZHJpdmVycyBsaXN0ZWQKPiA+Pj4+ Pj4+Pj4gYWJvdmUpLiBUaGlzIGFsbG93cyBTb0NzIGxpa2UgdGhlIEFtbG9naWMgTWVzb24gR1hM IGZhbWlseSB0byBvcGVyYXRlCj4gPj4+Pj4+Pj4+IGNvcnJlY3RseSBvbmNlIHRoaXMgaXMgd2ly ZWQgdXAgY29ycmVjdGx5LiBUaGVzZSBTb0NzIHVzZSBhIGR3YzMKPiA+Pj4+Pj4+Pj4gY29udHJv bGxlciBhbmQgcmVxdWlyZSBhbGwgVVNCIFBIWXMgdG8gYmUgaW5pdGlhbGl6ZWQgKGlmIG9uZSBv ZiB0aGUgVVNCCj4gPj4+Pj4+Pj4+IFBIWXMgaXQgbm90IGluaXRpYWxpemVkIHRoZW4gbm9uZSBv ZiBVU0IgcG9ydCB3b3JrcyBhdCBhbGwpLgo+ID4+Pj4+Pj4+Pgo+ID4+Pj4+Pj4+PiBTaWduZWQt b2ZmLWJ5OiBNYXJ0aW4gQmx1bWVuc3RpbmdsIDxtYXJ0aW4uYmx1bWVuc3RpbmdsQGdvb2dsZW1h aWwuY29tPgo+ID4+Pj4+Pj4+PiBUZXN0ZWQtYnk6IFlpeHVuIExhbiA8eWl4dW4ubGFuQGFtbG9n aWMuY29tPgo+ID4+Pj4+Pj4+PiBDYzogTmVpbCBBcm1zdHJvbmcgPG5hcm1zdHJvbmdAYmF5bGli cmUuY29tPgo+ID4+Pj4+Pj4+PiBDYzogQ2h1bmZlbmcgWXVuIDxjaHVuZmVuZy55dW5AbWVkaWF0 ZWsuY29tPgo+ID4+Pj4+Pj4+Cj4gPj4+Pj4+Pj4gVGhpcyBwYXRjaCBpcyBicmVha2luZyBsb3cg cG93ZXIgY2FzZXMgb24gVEkgU29DcyB3aGVuIFVTQiBpcyBpbiBob3N0IG1vZGUuCj4gPj4+Pj4+ Pj4gSSdsbCBleHBsYWluIHdoeSBiZWxvdy4KPiA+Pj4+Pj4+IGJhc2VkIG9uIHlvdXIgZXhwbGFu YXRpb24gYW5kIHJlYWRpbmcgdGhlIFRJIFBIWSBkcml2ZXJzIEkgYW0gYXNzdW1pbmcKPiA+Pj4+ Pj4+IHRoYXQgdGhlIGFmZmVjdGVkIFNvQ3MgYXJlIHVzaW5nIHRoZSAicGh5LW9tYXAtdXNiMiIg ZHJpdmVyCj4gPj4+Pj4+Pgo+ID4+Pj4+PiB5ZXMgYW5kIHBoeS10aS1waXBlMyBhcyB3ZWxsIGku ZS4gInRpLHBoeS11c2IzIiBhbmQgInRpLG9tYXAtdXNiMyIKPiA+Pj4+PiBJIG1pc3NlZCB0aGF0 LCB0aGFua3MKPiA+Pj4+Pgo+ID4+Pj4+Pj4+PiAtLS0KPiA+Pj4+Pj4+Pj4gIGRyaXZlcnMvdXNi L2NvcmUvTWFrZWZpbGUgfCAgIDIgKy0KPiA+Pj4+Pj4+Pj4gIGRyaXZlcnMvdXNiL2NvcmUvcGh5 LmMgICAgfCAxNTggKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr Kwo+ID4+Pj4+Pj4+PiAgZHJpdmVycy91c2IvY29yZS9waHkuaCAgICB8ICAgNyArKwo+ID4+Pj4+ Pj4+PiAgMyBmaWxlcyBjaGFuZ2VkLCAxNjYgaW5zZXJ0aW9ucygrKSwgMSBkZWxldGlvbigtKQo+ ID4+Pj4+Pj4+PiAgY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvdXNiL2NvcmUvcGh5LmMKPiA+ Pj4+Pj4+Pj4gIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL3VzYi9jb3JlL3BoeS5oCj4gPj4+ Pj4+Pj4+Cj4gPj4+Pj4+Pj4+IGRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9jb3JlL01ha2VmaWxl IGIvZHJpdmVycy91c2IvY29yZS9NYWtlZmlsZQo+ID4+Pj4+Pj4+PiBpbmRleCA5MmM5Y2VmYjQz MTcuLjE4ZTg3NGIwNDQxZSAxMDA2NDQKPiA+Pj4+Pj4+Pj4gLS0tIGEvZHJpdmVycy91c2IvY29y ZS9NYWtlZmlsZQo+ID4+Pj4+Pj4+PiArKysgYi9kcml2ZXJzL3VzYi9jb3JlL01ha2VmaWxlCj4g Pj4+Pj4+Pj4+IEBAIC02LDcgKzYsNyBAQAo+ID4+Pj4+Pj4+PiAgdXNiY29yZS15IDo9IHVzYi5v IGh1Yi5vIGhjZC5vIHVyYi5vIG1lc3NhZ2UubyBkcml2ZXIubwo+ID4+Pj4+Pj4+PiAgdXNiY29y ZS15ICs9IGNvbmZpZy5vIGZpbGUubyBidWZmZXIubyBzeXNmcy5vIGVuZHBvaW50Lm8KPiA+Pj4+ Pj4+Pj4gIHVzYmNvcmUteSArPSBkZXZpby5vIG5vdGlmeS5vIGdlbmVyaWMubyBxdWlya3MubyBk ZXZpY2VzLm8KPiA+Pj4+Pj4+Pj4gLXVzYmNvcmUteSArPSBwb3J0Lm8KPiA+Pj4+Pj4+Pj4gK3Vz YmNvcmUteSArPSBwaHkubyBwb3J0Lm8KPiA+Pj4+Pj4+Pj4KPiA+Pj4+Pj4+Pj4gIHVzYmNvcmUt JChDT05GSUdfT0YpICAgICAgICAgKz0gb2Yubwo+ID4+Pj4+Pj4+PiAgdXNiY29yZS0kKENPTkZJ R19VU0JfUENJKSAgICAgICAgICAgICs9IGhjZC1wY2kubwo+ID4+Pj4+Pj4+PiBkaWZmIC0tZ2l0 IGEvZHJpdmVycy91c2IvY29yZS9waHkuYyBiL2RyaXZlcnMvdXNiL2NvcmUvcGh5LmMKPiA+Pj4+ Pj4+Pj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQKPiA+Pj4+Pj4+Pj4gaW5kZXggMDAwMDAwMDAwMDAw Li4wOWI3YzQzYzBlYTQKPiA+Pj4+Pj4+Pj4gLS0tIC9kZXYvbnVsbAo+ID4+Pj4+Pj4+PiArKysg Yi9kcml2ZXJzL3VzYi9jb3JlL3BoeS5jCj4gPj4+Pj4+Pj4+IEBAIC0wLDAgKzEsMTU4IEBACj4g Pj4+Pj4+Pj4+ICsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCsKPiA+Pj4+Pj4+ Pj4gKy8qCj4gPj4+Pj4+Pj4+ICsgKiBBIHdyYXBwZXIgZm9yIG11bHRpcGxlIFBIWXMgd2hpY2gg cGFzc2VzIGFsbCBwaHlfKiBmdW5jdGlvbiBjYWxscyB0bwo+ID4+Pj4+Pj4+PiArICogbXVsdGlw bGUgKGFjdHVhbCkgUEhZIGRldmljZXMuIFRoaXMgaXMgY29tZXMgaGFuZHkgd2hlbiBpbml0aWFs aXppbmcKPiA+Pj4+Pj4+Pj4gKyAqIGFsbCBQSFlzIG9uIGEgSENEIGFuZCB0byBrZWVwIHRoZW0g YWxsIGluIHRoZSBzYW1lIHN0YXRlLgo+ID4+Pj4+Pj4+PiArICoKPiA+Pj4+Pj4+Pj4gKyAqIENv cHlyaWdodCAoQykgMjAxOCBNYXJ0aW4gQmx1bWVuc3RpbmdsIDxtYXJ0aW4uYmx1bWVuc3Rpbmds QGdvb2dsZW1haWwuY29tPgo+ID4+Pj4+Pj4+PiArICovCj4gPj4+Pj4+Pj4+ICsKPiA+Pj4+Pj4+ Pj4gKyNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KPiA+Pj4+Pj4+Pj4gKyNpbmNsdWRlIDxsaW51 eC9saXN0Lmg+Cj4gPj4+Pj4+Pj4+ICsjaW5jbHVkZSA8bGludXgvcGh5L3BoeS5oPgo+ID4+Pj4+ Pj4+PiArI2luY2x1ZGUgPGxpbnV4L29mLmg+Cj4gPj4+Pj4+Pj4+ICsKPiA+Pj4+Pj4+Pj4gKyNp bmNsdWRlICJwaHkuaCIKPiA+Pj4+Pj4+Pj4gKwo+ID4+Pj4+Pj4+PiArc3RydWN0IHVzYl9waHlf cm9vdGh1YiB7Cj4gPj4+Pj4+Pj4+ICsgICAgIHN0cnVjdCBwaHkgICAgICAgICAgICAgICpwaHk7 Cj4gPj4+Pj4+Pj4+ICsgICAgIHN0cnVjdCBsaXN0X2hlYWQgICAgICAgIGxpc3Q7Cj4gPj4+Pj4+ Pj4+ICt9Owo+ID4+Pj4+Pj4+PiArCj4gPj4+Pj4+Pj4+ICtzdGF0aWMgc3RydWN0IHVzYl9waHlf cm9vdGh1YiAqdXNiX3BoeV9yb290aHViX2FsbG9jKHN0cnVjdCBkZXZpY2UgKmRldikKPiA+Pj4+ Pj4+Pj4gK3sKPiA+Pj4+Pj4+Pj4gKyAgICAgc3RydWN0IHVzYl9waHlfcm9vdGh1YiAqcm9vdGh1 Yl9lbnRyeTsKPiA+Pj4+Pj4+Pj4gKwo+ID4+Pj4+Pj4+PiArICAgICByb290aHViX2VudHJ5ID0g ZGV2bV9remFsbG9jKGRldiwgc2l6ZW9mKCpyb290aHViX2VudHJ5KSwgR0ZQX0tFUk5FTCk7Cj4g Pj4+Pj4+Pj4+ICsgICAgIGlmICghcm9vdGh1Yl9lbnRyeSkKPiA+Pj4+Pj4+Pj4gKyAgICAgICAg ICAgICByZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKPiA+Pj4+Pj4+Pj4gKwo+ID4+Pj4+Pj4+PiAr ICAgICBJTklUX0xJU1RfSEVBRCgmcm9vdGh1Yl9lbnRyeS0+bGlzdCk7Cj4gPj4+Pj4+Pj4+ICsK PiA+Pj4+Pj4+Pj4gKyAgICAgcmV0dXJuIHJvb3RodWJfZW50cnk7Cj4gPj4+Pj4+Pj4+ICt9Cj4g Pj4+Pj4+Pj4+ICsKPiA+Pj4+Pj4+Pj4gK3N0YXRpYyBpbnQgdXNiX3BoeV9yb290aHViX2FkZF9w aHkoc3RydWN0IGRldmljZSAqZGV2LCBpbnQgaW5kZXgsCj4gPj4+Pj4+Pj4+ICsgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBsaXN0X2hlYWQgKmxpc3QpCj4gPj4+Pj4+Pj4+ ICt7Cj4gPj4+Pj4+Pj4+ICsgICAgIHN0cnVjdCB1c2JfcGh5X3Jvb3RodWIgKnJvb3RodWJfZW50 cnk7Cj4gPj4+Pj4+Pj4+ICsgICAgIHN0cnVjdCBwaHkgKnBoeSA9IGRldm1fb2ZfcGh5X2dldF9i eV9pbmRleChkZXYsIGRldi0+b2Zfbm9kZSwgaW5kZXgpOwo+ID4+Pj4+Pj4+PiArCj4gPj4+Pj4+ Pj4+ICsgICAgIGlmIChJU19FUlJfT1JfTlVMTChwaHkpKSB7Cj4gPj4+Pj4+Pj4+ICsgICAgICAg ICAgICAgaWYgKCFwaHkgfHwgUFRSX0VSUihwaHkpID09IC1FTk9ERVYpCj4gPj4+Pj4+Pj4+ICsg ICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDsKPiA+Pj4+Pj4+Pj4gKyAgICAgICAgICAgICBl bHNlCj4gPj4+Pj4+Pj4+ICsgICAgICAgICAgICAgICAgICAgICByZXR1cm4gUFRSX0VSUihwaHkp Owo+ID4+Pj4+Pj4+PiArICAgICB9Cj4gPj4+Pj4+Pj4+ICsKPiA+Pj4+Pj4+Pj4gKyAgICAgcm9v dGh1Yl9lbnRyeSA9IHVzYl9waHlfcm9vdGh1Yl9hbGxvYyhkZXYpOwo+ID4+Pj4+Pj4+PiArICAg ICBpZiAoSVNfRVJSKHJvb3RodWJfZW50cnkpKQo+ID4+Pj4+Pj4+PiArICAgICAgICAgICAgIHJl dHVybiBQVFJfRVJSKHJvb3RodWJfZW50cnkpOwo+ID4+Pj4+Pj4+PiArCj4gPj4+Pj4+Pj4+ICsg ICAgIHJvb3RodWJfZW50cnktPnBoeSA9IHBoeTsKPiA+Pj4+Pj4+Pj4gKwo+ID4+Pj4+Pj4+PiAr ICAgICBsaXN0X2FkZF90YWlsKCZyb290aHViX2VudHJ5LT5saXN0LCBsaXN0KTsKPiA+Pj4+Pj4+ Pj4gKwo+ID4+Pj4+Pj4+PiArICAgICByZXR1cm4gMDsKPiA+Pj4+Pj4+Pj4gK30KPiA+Pj4+Pj4+ Pj4gKwo+ID4+Pj4+Pj4+PiArc3RydWN0IHVzYl9waHlfcm9vdGh1YiAqdXNiX3BoeV9yb290aHVi X2luaXQoc3RydWN0IGRldmljZSAqZGV2KQo+ID4+Pj4+Pj4+PiArewo+ID4+Pj4+Pj4+PiArICAg ICBzdHJ1Y3QgdXNiX3BoeV9yb290aHViICpwaHlfcm9vdGh1YjsKPiA+Pj4+Pj4+Pj4gKyAgICAg c3RydWN0IHVzYl9waHlfcm9vdGh1YiAqcm9vdGh1Yl9lbnRyeTsKPiA+Pj4+Pj4+Pj4gKyAgICAg c3RydWN0IGxpc3RfaGVhZCAqaGVhZDsKPiA+Pj4+Pj4+Pj4gKyAgICAgaW50IGksIG51bV9waHlz LCBlcnI7Cj4gPj4+Pj4+Pj4+ICsKPiA+Pj4+Pj4+Pj4gKyAgICAgbnVtX3BoeXMgPSBvZl9jb3Vu dF9waGFuZGxlX3dpdGhfYXJncyhkZXYtPm9mX25vZGUsICJwaHlzIiwKPiA+Pj4+Pj4+Pj4gKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiI3BoeS1jZWxscyIpOwo+ ID4+Pj4+Pj4+PiArICAgICBpZiAobnVtX3BoeXMgPD0gMCkKPiA+Pj4+Pj4+Pj4gKyAgICAgICAg ICAgICByZXR1cm4gTlVMTDsKPiA+Pj4+Pj4+Pj4gKwo+ID4+Pj4+Pj4+PiArICAgICBwaHlfcm9v dGh1YiA9IHVzYl9waHlfcm9vdGh1Yl9hbGxvYyhkZXYpOwo+ID4+Pj4+Pj4+PiArICAgICBpZiAo SVNfRVJSKHBoeV9yb290aHViKSkKPiA+Pj4+Pj4+Pj4gKyAgICAgICAgICAgICByZXR1cm4gcGh5 X3Jvb3RodWI7Cj4gPj4+Pj4+Pj4+ICsKPiA+Pj4+Pj4+Pj4gKyAgICAgZm9yIChpID0gMDsgaSA8 IG51bV9waHlzOyBpKyspIHsKPiA+Pj4+Pj4+Pj4gKyAgICAgICAgICAgICBlcnIgPSB1c2JfcGh5 X3Jvb3RodWJfYWRkX3BoeShkZXYsIGksICZwaHlfcm9vdGh1Yi0+bGlzdCk7Cj4gPj4+Pj4+Pj4+ ICsgICAgICAgICAgICAgaWYgKGVycikKPiA+Pj4+Pj4+Pj4gKyAgICAgICAgICAgICAgICAgICAg IGdvdG8gZXJyX291dDsKPiA+Pj4+Pj4+Pj4gKyAgICAgfQo+ID4+Pj4+Pj4+PiArCj4gPj4+Pj4+ Pj4+ICsgICAgIGhlYWQgPSAmcGh5X3Jvb3RodWItPmxpc3Q7Cj4gPj4+Pj4+Pj4+ICsKPiA+Pj4+ Pj4+Pj4gKyAgICAgbGlzdF9mb3JfZWFjaF9lbnRyeShyb290aHViX2VudHJ5LCBoZWFkLCBsaXN0 KSB7Cj4gPj4+Pj4+Pj4+ICsgICAgICAgICAgICAgZXJyID0gcGh5X2luaXQocm9vdGh1Yl9lbnRy eS0+cGh5KTsKPiA+Pj4+Pj4+Pgo+ID4+Pj4+Pj4+IFRoZSBwaHlfaW5pdCgpIGZ1bmN0aW9uIGFj dHVhbGx5IGVuYWJsZXMgdGhlIFBIWSBjbG9ja3MuCj4gPj4+Pj4+Pj4gSXQgc2hvdWxkIGJlIG1v dmVkIHRvIHRoZSB1c2JfcGh5X3Jvb3RodWJfZXhpdCgpIHJvdXRpbmUganVzdCBiZWZvcmUgY2Fs bGluZyBwaHlfcG93ZXJfb24oKS4KPiA+Pj4+Pj4+IGRvIHlvdSBtZWFuIHRoYXQgcGh5X2luaXQg c2hvdWxkIGJlIG1vdmVkIHRvIHVzYl9waHlfcm9vdGh1Yl9wb3dlcl9vbgo+ID4+Pj4+Pj4gKGp1 c3QgYmVmb3JlIHBoeV9wb3dlcl9vbiBpcyBjYWxsZWQgd2l0aGluIHVzYl9waHlfcm9vdGh1Yl9w b3dlcl9vbik/Cj4gPj4+Pj4+Pgo+ID4+Pj4+Pgo+ID4+Pj4+PiBZZXMuCj4gPj4+Pj4+Cj4gPj4+ Pj4+PiBhbiBlYXJsaWVyIHZlcnNpb24gb2YgbXkgcGF0Y2ggZGlkIGV4YWN0bHkgdGhpcywgYnV0 IGl0IGNhdXNlZAo+ID4+Pj4+Pj4gcHJvYmxlbXMgZHVyaW5nIGEgc3VzcGVuZC9yZXN1bWUgY3lj bGUgb24gTWVkaWF0ZWsgZGV2aWNlcwo+ID4+Pj4+Pj4gQ2h1bmZlbmcgWXVuIHJlcG9ydGVkIHRo YXQgaXNzdWUgaGVyZSBbMF0sIHF1b3RlIGZyb20gdGhhdCBtYWlsIGZvcgo+ID4+Pj4+Pj4gZWFz aWVyIHJlYWRpbmc6Cj4gPj4+Pj4+PiAiSW4gb3JkZXIgdG8ga2VlcCBsaW5rIHN0YXRlIG9uIG10 ODE3Mywgd2UganVzdCBwb3dlciBvZmYgYWxsIHBoeXMobm90Cj4gPj4+Pj4+PiBleGl0KSB3aGVu IHN5c3RlbSBlbnRlciBzdXNwZW5kLCB0aGVuIHBvd2VyIG9uIHRoZW0gYWdhaW4gKG5lZWRuJ3QK PiA+Pj4+Pj4+IGluaXQsIG90aGVyd2lzZSBkZXZpY2Ugd2lsbCBiZSBkaXNjb25uZWN0ZWQpIHdo ZW4gc3lzdGVtIHJlc3VtZSwgdGhpcwo+ID4+Pj4+Pj4gY2FuIGF2b2lkIHJlLWVudW1lcmF0aW5n IGRldmljZS4iCj4gPj4+Pj4+Pgo+ID4+Pj4+Pj4+PiArICAgICAgICAgICAgIGlmIChlcnIpCj4g Pj4+Pj4+Pj4+ICsgICAgICAgICAgICAgICAgICAgICBnb3RvIGVycl9leGl0X3BoeXM7Cj4gPj4+ Pj4+Pj4+ICsgICAgIH0KPiA+Pj4+Pj4+Pj4gKwo+ID4+Pj4+Pj4+PiArICAgICByZXR1cm4gcGh5 X3Jvb3RodWI7Cj4gPj4+Pj4+Pj4+ICsKPiA+Pj4+Pj4+Pj4gK2Vycl9leGl0X3BoeXM6Cj4gPj4+ Pj4+Pj4+ICsgICAgIGxpc3RfZm9yX2VhY2hfZW50cnlfY29udGludWVfcmV2ZXJzZShyb290aHVi X2VudHJ5LCBoZWFkLCBsaXN0KQo+ID4+Pj4+Pj4+PiArICAgICAgICAgICAgIHBoeV9leGl0KHJv b3RodWJfZW50cnktPnBoeSk7Cj4gPj4+Pj4+Pj4+ICsKPiA+Pj4+Pj4+Pj4gK2Vycl9vdXQ6Cj4g Pj4+Pj4+Pj4+ICsgICAgIHJldHVybiBFUlJfUFRSKGVycik7Cj4gPj4+Pj4+Pj4+ICt9Cj4gPj4+ Pj4+Pj4+ICtFWFBPUlRfU1lNQk9MX0dQTCh1c2JfcGh5X3Jvb3RodWJfaW5pdCk7Cj4gPj4+Pj4+ Pj4+ICsKPiA+Pj4+Pj4+Pj4gK2ludCB1c2JfcGh5X3Jvb3RodWJfZXhpdChzdHJ1Y3QgdXNiX3Bo eV9yb290aHViICpwaHlfcm9vdGh1YikKPiA+Pj4+Pj4+Pj4gK3sKPiA+Pj4+Pj4+Pj4gKyAgICAg c3RydWN0IHVzYl9waHlfcm9vdGh1YiAqcm9vdGh1Yl9lbnRyeTsKPiA+Pj4+Pj4+Pj4gKyAgICAg c3RydWN0IGxpc3RfaGVhZCAqaGVhZDsKPiA+Pj4+Pj4+Pj4gKyAgICAgaW50IGVyciwgcmV0ID0g MDsKPiA+Pj4+Pj4+Pj4gKwo+ID4+Pj4+Pj4+PiArICAgICBpZiAoIXBoeV9yb290aHViKQo+ID4+ Pj4+Pj4+PiArICAgICAgICAgICAgIHJldHVybiAwOwo+ID4+Pj4+Pj4+PiArCj4gPj4+Pj4+Pj4+ ICsgICAgIGhlYWQgPSAmcGh5X3Jvb3RodWItPmxpc3Q7Cj4gPj4+Pj4+Pj4+ICsKPiA+Pj4+Pj4+ Pj4gKyAgICAgbGlzdF9mb3JfZWFjaF9lbnRyeShyb290aHViX2VudHJ5LCBoZWFkLCBsaXN0KSB7 Cj4gPj4+Pj4+Pj4+ICsgICAgICAgICAgICAgZXJyID0gcGh5X2V4aXQocm9vdGh1Yl9lbnRyeS0+ cGh5KTsKPiA+Pj4+Pj4+Pj4gKyAgICAgICAgICAgICBpZiAoZXJyKQo+ID4+Pj4+Pj4+PiArICAg ICAgICAgICAgICAgICAgICAgcmV0ID0gcmV0Owo+ID4+Pj4+Pj4+PiArICAgICB9Cj4gPj4+Pj4+ Pj4KPiA+Pj4+Pj4+PiBwaHlfZXhpdCgpIHNob3VsZCBiZSBtb3ZlZCB0byB1c2JfcGh5X3Jvb3Ro dWJfcG93ZXJvZmYoKSBqdXN0IGFmdGVyIGNhbGxpbmcgcGh5X3Bvd2VyX29mZigpLgo+ID4+Pj4+ Pj4gaWYgSSB1bmRlcnN0b29kIENodW5mZW5nIFl1biBjb3JyZWN0bHkgdGhpcyB3aWxsIHJlcXVp cmUKPiA+Pj4+Pj4+IHJlLWVudW1lcmF0aW9uIG9mIHRoZSBVU0IgZGV2aWNlcyBhZnRlciBhIHN1 c3BlbmQvcmVzdW1lIGN5Y2xlIG9uCj4gPj4+Pj4+PiBNZWRpYXRlayBTb0NzCj4gPj4+Pj4+Pgo+ ID4+Pj4+Pgo+ID4+Pj4+PiBPSy4gSSBzdXBwb3NlIHRoYXQgdGhlcmUgYXJlIDIgY2FzZXMKPiA+ Pj4+Pj4gMSkgTWVkaWF0ZWsncyBjYXNlOiBVU0IgY29udHJvbGxlciBjb250ZXh0IHJldGFpbmVk IGFjcm9zcyBzdXNwZW5kL3Jlc3VtZS4KPiA+Pj4+Pj4gUmVtb3RlIHdha2V1cCBwcm9iYWJseSBy ZXF1aXJlZC4KPiA+Pj4+Pj4gTm8gcmUtZW51bWVyYXRpb24gcHJlZmVycmVkIGFmdGVyIHJlc3Vt ZS4gcGh5X2V4aXQoKS9waHlfaW5pdCgpIG11c3Qgbm90IGJlIGNhbGxlZAo+ID4+Pj4+PiBkdXJp bmcgc3VzcGVuZC9yZXN1bWUgdG8ga2VlcCBQSFkgbGluayBhY3RpdmUuCj4gPj4+Pj4gRG9jdW1l bnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL3VzYi9tZWRpYXRlayxtdHUzLnR4dCBpbmRlZWQg c2hvd3MKPiA+Pj4+PiB0aGF0IHRoZSBwYXJlbnQgb2YgdGhlIFVTQiBjb250cm9sbGVyIGNhbiBi ZSBtYXJrZWQgYXMgIndha2V1cC1zb3VyY2UiCj4gPj4+Pj4KPiA+Pj4+Pj4gMikgVEkncyBjYXNl OiBsb3cgcG93ZXIgaW1wb3J0YW50OiBVU0IgY29udGV4dCBpcyBsb3N0LCBPSyB0byByZS1lbnVt ZXJhdGUuCj4gPj4+Pj4+IHBoeV9leGl0KCkvcGh5X2luaXQoKSBtdXN0IGJlIGNhbGxlZCBkdXJp bmcgc3VzcGVuZC9yZXN1bWUuCj4gPj4+Pj4gQUNLCj4gPj4+Pj4KPiA+Pj4+Pj4+PiBXaXRoIHRo YXQgdGhlcmUgaXMgbm90aGluZyBlbHNlIGJlaW5nIGRvbmUgaGVyZS4gU2hvdWxkbid0IHdlIGJl IGRvaW5nIHRoZSBlcXVpdmFsZW50IG9mCj4gPj4+Pj4+Pj4gdXNiX3BoeV9yb290aHViX2RlbF9w aHkoKSBhbmQgdXNiX3BoeV9yb290aHViX2ZyZWUoKSBoZXJlPwo+ID4+Pj4+Pj4+Cj4gPj4+Pj4+ Pj4+ICsKPiA+Pj4+Pj4+Pj4gKyAgICAgcmV0dXJuIHJldDsKPiA+Pj4+Pj4+Pj4gK30KPiA+Pj4+ Pj4+Pj4gK0VYUE9SVF9TWU1CT0xfR1BMKHVzYl9waHlfcm9vdGh1Yl9leGl0KTsKPiA+Pj4+Pj4+ Pj4gKwo+ID4+Pj4+Pj4+PiAraW50IHVzYl9waHlfcm9vdGh1Yl9wb3dlcl9vbihzdHJ1Y3QgdXNi X3BoeV9yb290aHViICpwaHlfcm9vdGh1YikKPiA+Pj4+Pj4+Pj4gK3sKPiA+Pj4+Pj4+Pj4gKyAg ICAgc3RydWN0IHVzYl9waHlfcm9vdGh1YiAqcm9vdGh1Yl9lbnRyeTsKPiA+Pj4+Pj4+Pj4gKyAg ICAgc3RydWN0IGxpc3RfaGVhZCAqaGVhZDsKPiA+Pj4+Pj4+Pj4gKyAgICAgaW50IGVycjsKPiA+ Pj4+Pj4+Pj4gKwo+ID4+Pj4+Pj4+PiArICAgICBpZiAoIXBoeV9yb290aHViKQo+ID4+Pj4+Pj4+ PiArICAgICAgICAgICAgIHJldHVybiAwOwo+ID4+Pj4+Pj4+PiArCj4gPj4+Pj4+Pj4+ICsgICAg IGhlYWQgPSAmcGh5X3Jvb3RodWItPmxpc3Q7Cj4gPj4+Pj4+Pj4+ICsKPiA+Pj4+Pj4+Pj4gKyAg ICAgbGlzdF9mb3JfZWFjaF9lbnRyeShyb290aHViX2VudHJ5LCBoZWFkLCBsaXN0KSB7Cj4gPj4+ Pj4+Pj4+ICsgICAgICAgICAgICAgZXJyID0gcGh5X3Bvd2VyX29uKHJvb3RodWJfZW50cnktPnBo eSk7Cj4gPj4+Pj4+Pj4+ICsgICAgICAgICAgICAgaWYgKGVycikKPiA+Pj4+Pj4+Pj4gKyAgICAg ICAgICAgICAgICAgICAgIGdvdG8gZXJyX291dDsKPiA+Pj4+Pj4+Pj4gKyAgICAgfQo+ID4+Pj4+ Pj4+PiArCj4gPj4+Pj4+Pj4+ICsgICAgIHJldHVybiAwOwo+ID4+Pj4+Pj4+PiArCj4gPj4+Pj4+ Pj4+ICtlcnJfb3V0Ogo+ID4+Pj4+Pj4+PiArICAgICBsaXN0X2Zvcl9lYWNoX2VudHJ5X2NvbnRp bnVlX3JldmVyc2Uocm9vdGh1Yl9lbnRyeSwgaGVhZCwgbGlzdCkKPiA+Pj4+Pj4+Pj4gKyAgICAg ICAgICAgICBwaHlfcG93ZXJfb2ZmKHJvb3RodWJfZW50cnktPnBoeSk7Cj4gPj4+Pj4+Pj4+ICsK PiA+Pj4+Pj4+Pj4gKyAgICAgcmV0dXJuIGVycjsKPiA+Pj4+Pj4+Pj4gK30KPiA+Pj4+Pj4+Pj4g K0VYUE9SVF9TWU1CT0xfR1BMKHVzYl9waHlfcm9vdGh1Yl9wb3dlcl9vbik7Cj4gPj4+Pj4+Pj4+ ICsKPiA+Pj4+Pj4+Pj4gK3ZvaWQgdXNiX3BoeV9yb290aHViX3Bvd2VyX29mZihzdHJ1Y3QgdXNi X3BoeV9yb290aHViICpwaHlfcm9vdGh1YikKPiA+Pj4+Pj4+Pj4gK3sKPiA+Pj4+Pj4+Pj4gKyAg ICAgc3RydWN0IHVzYl9waHlfcm9vdGh1YiAqcm9vdGh1Yl9lbnRyeTsKPiA+Pj4+Pj4+Pj4gKwo+ ID4+Pj4+Pj4+PiArICAgICBpZiAoIXBoeV9yb290aHViKQo+ID4+Pj4+Pj4+PiArICAgICAgICAg ICAgIHJldHVybjsKPiA+Pj4+Pj4+Pj4gKwo+ID4+Pj4+Pj4+PiArICAgICBsaXN0X2Zvcl9lYWNo X2VudHJ5X3JldmVyc2Uocm9vdGh1Yl9lbnRyeSwgJnBoeV9yb290aHViLT5saXN0LCBsaXN0KQo+ ID4+Pj4+Pj4+PiArICAgICAgICAgICAgIHBoeV9wb3dlcl9vZmYocm9vdGh1Yl9lbnRyeS0+cGh5 KTsKPiA+Pj4+Pj4+Pgo+ID4+Pj4+Pj4+IE5vdCBkb2luZyB0aGUgcGh5X2V4aXQoKSBoZXJlIGxl YXZlcyB0aGUgY2xvY2tzIGVuYWJsZWQgb24gb3VyIFNvQyBhbmQKPiA+Pj4+Pj4+PiB3ZSdyZSBu byBsb25nZXIgYWJsZSB0byByZWFjaCBsb3cgcG93ZXIgc3RhdGVzIG9uIHN5c3RlbSBzdXNwZW5k Lgo+ID4+Pj4+Pj4gSSdtIG5vdCBzdXJlIHdoZXJlIHRoaXMgcHJvYmxlbSBzaG91bGQgYmUgc29s dmVkOgo+ID4+Pj4+Pj4gLSBzZXQgc2tpcF9waHlfaW5pdGlhbGl6YXRpb24gaW4gc3RydWN0IHVz Yl9oY2QgdG8gMSBmb3IgdGhlIGFmZmVjdGVkCj4gPj4+Pj4+PiBUSSBwbGF0Zm9ybXMKPiA+Pj4+ Pj4KPiA+Pj4+Pj4gTWFueSBUSSBwbGF0Zm9ybXMgYXJlIGFmZmVjdGVkLCBvbWFwNSosIGRyYTcq LCBhbTQzKgo+ID4+Pj4+Pgo+ID4+Pj4+Pj4gLSBmaXggdGhpcyBpbiB0aGUgdXNiX3BoeV9yb290 aHViIGNvZGUKPiA+Pj4+Pj4KPiA+Pj4+Pj4gSSdkIHZvdGUgZm9yIGZpeGluZyBpdCBpbiB0aGUg dXNiX3BoeV9yb290aHViIGNvZGUuIEhvdz8KPiA+Pj4+Pj4gSG93IGFib3V0IHVzaW5nIHRoZSBk ZXZpY2VfY2FuX3dha2V1cCgpIHRvIGRlY2lkZSBpZiB3ZSBzaG91bGQgY2FsbCBwaHlfZXhpdCgp L2luaXQoKSBvciBub3Q/Cj4gPj4+Pj4+IElmIHRoZSBVU0IgZGV2aWNlIGNhbid0IHdha2V1cCB0 aGUgc3lzdGVtIHRoZXJlIGlzIG5vIHBvaW50IGluIGtlZXBpbmcgaXQgcG93ZXJlZC9jbG9ja2Vk IHJpZ2h0Pwo+ID4+Pj4+IEBDaHVuZmVuZzogY2FuIHlvdSBjb25maXJtIFJvZ2VyJ3MgaWRlYSB0 aGF0IHdlIGNvdWxkIGNhbGwgcGh5X2V4aXQgaWYKPiA+Pj4+PiB0aGUgY29udHJvbGxlciBpcyAq Tk9UKiBtYXJrZWQgYXMgIndha2V1cC1zb3VyY2UiPwo+ID4+Pj4+IEkgYW0gYWxzbyBub3Qgc3Vy ZSBpZiBpdCB3b3VsZCB3b3JrLCBzaW5jZSB0aGUgIndha2V1cC1zb3VyY2UiCj4gPj4+Pj4gcHJv cGVydHkgaXMgZGVmaW5lZCBvbiB0aGUgVVNCIGNvbnRyb2xsZXIncyBwYXJlbnQgbm9kZSBpbiBj YXNlIG9mIHRoZQo+ID4+Pj4+IE1lZGlhdGVrIE1UVTMgKE1lZGlhdGVrIFVTQjMuMCBEUkQpIGNv bnRyb2xsZXIKPiA+Pj4+Pgo+ID4+Pj4gVmVyeSBzb3JyeSwgSSBmb3Jnb3QgdGhhdCBNVFUzICYg eEhDSSBkcml2ZXJzIGFsd2F5cyBzZXQgdGhlbSBhcyB3YWtldXAKPiA+Pj4+IGRldmljZXMgYnkg ZGV2aWNlX2luaXRfd2FrZXVwKGRldiwgdHJ1ZSksYnV0IG5vdCBkZXBlbmRlbnQgb24KPiA+Pj4+ ICJ3YWtldXAtc291cmNlIiBwcm9wZXJ0eSwgc28gbWF5YmUgd2UgY2FuIHVzZSBkZXZpY2VfY2Fu X3dha2V1cCgpIHRvCj4gPj4+PiBkZWNpZGUgd2hldGhlciBjYWxsIHBoeV9leGl0KCkvaW5pdCgp IG9yIG5vdC4KPiA+Pj4gdGhlIDY0LWJpdCBBbWxvZ2ljIE1lc29uIEdYTC9HWE0gU29DcyBkb24n dCBzdXBwb3J0IHN1c3BlbmQvcmVzdW1lCj4gPj4+IHlldCwgc28gSSBjYW5ub3QgdGVzdCB0aGlz Cj4gPj4+IGJhc2VkIG9uIHRoaXMgc3VnZ2VzdGlvbiBJIHRocmV3IHVwIHR3byBwYXRjaGVzIHdo aWNoIGFyZSAqY29tcGlsZQo+ID4+PiB0ZXN0ZWQgb25seSogYmFzZWQgb24gR3JlZydzIHVzYi1u ZXh0IGJyYW5jaAo+ID4+PiB5b3UgY2FuIGZpbmQgdGhlbSBoZXJlOiBbMF0gKGFzIHdlbGwgYXMg YXR0YWNoZWQgdG8gdGhpcyBtYWlsKQo+ID4+Pgo+ID4+PiBAQ2h1bmZlbmc6IGNhbiB5b3UgcGxl YXNlIHRlc3QgdGhpcyBvbiBvbmUgb2YgeW91ciBNZWRpYXRlayBTb0NzPwo+ID4+PiBAUm9nZXI6 IGNhbiB5b3UgcGxlYXNlIHRlc3QgdGhpcyBvbiBhIFRJIFNvQz8KPiA+Pj4KPiA+Pj4gKGFwb2xv Z2llcyBpbiBhZHZhbmNlIGlmIHRoZXNlIHBhdGNoZXMgZG9uJ3Qgd29yaykKPiA+Pj4KPiA+Pj4g cGxlYXNlIG5vdGUgdGhhdCBJIHdvbid0IGhhdmUgYWNjZXNzIHRvIG15IGNvbXB1dGVyIHVudGls IFNhdHVyZGF5Lgo+ID4+PiBpZiB0aGVzZSBwYXRjaGVzIG5lZWQgdG8gYmUgcmV3cml0dGVuL3Jl cGxhY2VkL2V0Yy4gdGhlbiBmZWVsIGZyZWUgdG8KPiA+Pj4gc2VuZCB5b3VyIG93biB2ZXJzaW9u IHRvIHRoZSBsaXN0Cj4gPj4KPiA+PiBIYWQgdG8gZG8gdGhlIGZvbGxvd2luZyB0byBidWlsZAo+ ID4+Cj4gPj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2NvcmUvaGNkLmMgYi9kcml2ZXJzL3Vz Yi9jb3JlL2hjZC5jCj4gPj4gaW5kZXggNmQ0YTQxOS4uMjg4NDYwNyAxMDA2NDQKPiA+PiAtLS0g YS9kcml2ZXJzL3VzYi9jb3JlL2hjZC5jCj4gPj4gKysrIGIvZHJpdmVycy91c2IvY29yZS9oY2Qu Ywo+ID4+IEBAIC0yMjYyLDcgKzIyNjIsNyBAQCBpbnQgaGNkX2J1c19zdXNwZW5kKHN0cnVjdCB1 c2JfZGV2aWNlICpyaGRldiwgcG1fbWVzc2FnZV90IG1zZykKPiA+PiAgCQloY2QtPnN0YXRlID0g SENfU1RBVEVfU1VTUEVOREVEOwo+ID4+ICAKPiA+PiAgCQlpZiAoIVBNU0dfSVNfQVVUTyhtc2cp KQo+ID4+IC0JCQl1c2JfcGh5X3Jvb3RodWJfc3VzcGVuZChoY2QtPnBoeV9yb290aHViKTsKPiA+ PiArCQkJdXNiX3BoeV9yb290aHViX3N1c3BlbmQoJnJoZGV2LT5kZXYsIGhjZC0+cGh5X3Jvb3Ro dWIpOwo+ID4gCj4gPiBUcnkgdG8gdXNlIGhjZC0+c2VsZi5jb250cm9sbGVyIGluc3RlYWQgb2Yg JnJoZGV2LT5kZXY7Cj4gCj4gQWN0dWFsbHkgaXQgc2hvdWxkIGJlIGhjZC0+c2VsZi5zeXNkZXYu CkkgZmluZCB0aGF0IHhoY2ktcGxhdC5jIGVuYWJsZXMgd2FrZXVwIGJ5IGhjZC0+c2VsZi5jb250 cm9sbGVyIHdoaWNoIGlzCmRpZmZlcmVudCBmcm9tIGhjZC0+c2VsZi5zeXNkZXYgc29tZXRpbWVz LgoKQW5kIGhjZC0+c2VsZi5jb250cm9sbGVyIGlzIHRoZSBzYW1lIGFzIGhjZC0+c2VsZi5zeXNk ZXYgb24gTVRLJ3MKcGxhdGZvcm0uCgo+ID4gCj4gPj4gIAo+ID4+ICAJCS8qIERpZCB3ZSByYWNl IHdpdGggYSByb290LWh1YiB3YWtldXAgZXZlbnQ/ICovCj4gPj4gIAkJaWYgKHJoZGV2LT5kb19y ZW1vdGVfd2FrZXVwKSB7Cj4gPj4gQEAgLTIzMDIsNyArMjMwMiw3IEBAIGludCBoY2RfYnVzX3Jl c3VtZShzdHJ1Y3QgdXNiX2RldmljZSAqcmhkZXYsIHBtX21lc3NhZ2VfdCBtc2cpCj4gPj4gIAl9 Cj4gPj4gIAo+ID4+ICAJaWYgKCFQTVNHX0lTX0FVVE8obXNnKSkgewo+ID4+IC0JCXN0YXR1cyA9 IHVzYl9waHlfcm9vdGh1Yl9yZXN1bWUoaGNkLT5waHlfcm9vdGh1Yik7Cj4gPj4gKwkJc3RhdHVz ID0gdXNiX3BoeV9yb290aHViX3Jlc3VtZSgmcmhkZXYtPmRldiwgaGNkLT5waHlfcm9vdGh1Yik7 Cj4gPiBkaXR0bwo+ID4+ICAJCWlmIChzdGF0dXMpCj4gPj4gIAkJCXJldHVybiBzdGF0dXM7Cj4g Pj4gIAl9Cj4gPj4gQEAgLTIzNDQsNyArMjM0NCw3IEBAIGludCBoY2RfYnVzX3Jlc3VtZShzdHJ1 Y3QgdXNiX2RldmljZSAqcmhkZXYsIHBtX21lc3NhZ2VfdCBtc2cpCj4gPj4gIAkJfQo+ID4+ICAJ fSBlbHNlIHsKPiA+PiAgCQloY2QtPnN0YXRlID0gb2xkX3N0YXRlOwo+ID4+IC0JCXVzYl9waHlf cm9vdGh1Yl9zdXNwZW5kKGhjZC0+cGh5X3Jvb3RodWIpOwo+ID4+ICsJCXVzYl9waHlfcm9vdGh1 Yl9zdXNwZW5kKCZyaGRldi0+ZGV2LCBoY2QtPnBoeV9yb290aHViKTsKPiA+IGRpdHRvCj4gPj4g IAkJZGV2X2RiZygmcmhkZXYtPmRldiwgImJ1cyAlcyBmYWlsLCBlcnIgJWRcbiIsCj4gPj4gIAkJ CQkicmVzdW1lIiwgc3RhdHVzKTsKPiA+PiAgCQlpZiAoc3RhdHVzICE9IC1FU0hVVERPV04pCj4g Pj4KPiA+Pgo+ID4+IEFuZCB0aGUgZm9sbG93aW5nIHRvIGZpeCBydW50aW1lIGlzc3Vlcwo+ID4+ Cj4gPj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2NvcmUvcGh5LmMgYi9kcml2ZXJzL3VzYi9j b3JlL3BoeS5jCj4gPj4gaW5kZXggMmVjYTM3MS4uODU5ODkwNiAxMDA2NDQKPiA+PiAtLS0gYS9k cml2ZXJzL3VzYi9jb3JlL3BoeS5jCj4gPj4gKysrIGIvZHJpdmVycy91c2IvY29yZS9waHkuYwo+ ID4+IEBAIC0zMiw5ICszMiw5IEBAIHN0YXRpYyBpbnQgdXNiX3BoeV9yb290aHViX2FkZF9waHko c3RydWN0IGRldmljZSAqZGV2LCBpbnQgaW5kZXgsCj4gPj4gIAkJCXJldHVybiBQVFJfRVJSKHBo eSk7Cj4gPj4gIAl9Cj4gPj4gIAo+ID4+IC0Jcm9vdGh1Yl9lbnRyeSA9IHVzYl9waHlfcm9vdGh1 Yl9hbGxvYyhkZXYpOwo+ID4+IC0JaWYgKElTX0VSUihyb290aHViX2VudHJ5KSkKPiA+PiAtCQly ZXR1cm4gUFRSX0VSUihyb290aHViX2VudHJ5KTsKPiA+PiArCXJvb3RodWJfZW50cnkgPSBkZXZt X2t6YWxsb2MoZGV2LCBzaXplb2YoKnJvb3RodWJfZW50cnkpLCBHRlBfS0VSTkVMKTsKPiA+PiAr CWlmICghcm9vdGh1Yl9lbnRyeSkKPiA+PiArCQlyZXR1cm4gLUVOT01FTTsKPiA+PiAgCj4gPj4g IAlyb290aHViX2VudHJ5LT5waHkgPSBwaHk7Cj4gPj4gIAo+ID4+IEBAIC0xNjIsNyArMTYyLDcg QEAgaW50IHVzYl9waHlfcm9vdGh1Yl9zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKmRldiwKPiA+PiAg CXVzYl9waHlfcm9vdGh1Yl9wb3dlcl9vZmYocGh5X3Jvb3RodWIpOwo+ID4+ICAKPiA+PiAgCS8q IGtlZXAgdGhlIFBIWXMgaW5pdGlhbGl6ZWQgc28gdGhlIGRldmljZSBjYW4gd2FrZSB1cCB0aGUg c3lzdGVtICovCj4gPj4gLQlpZiAoZGV2aWNlX2Nhbl93YWtldXAoZGV2KSkKPiA+PiArCWlmIChk ZXZpY2VfbWF5X3dha2V1cChkZXYpKQo+ID4gSXQncyBvawo+IAo+IEkgaGFkIHRvIGFkZGl0aW9u YWxseSBmaXggdXNiX3BoeV9yb290aHViX3Jlc3VtZSgpIGZyb20KPiAJaWYgKGRldmljZV9jYW5f d2FrZXVwKGRldikpCj4gdG8KPiAJaWYgKCFkZXZpY2VfbWF5X3dha2V1cChkZXYpKQo+IAo+ID4+ ICAJCXJldHVybiAwOwo+ID4+ICAKPiA+PiAgCXJldHVybiB1c2JfcGh5X3Jvb3RodWJfZXhpdChw aHlfcm9vdGh1Yik7Cj4gPj4KPiA+Pgo+ID4+IEhlcmUgYXJlIG15IG9iZXJ2YXRpb25zCj4gPj4g LSBpZiB3YWtldXAgaXMgZGlzYWJsZWQgaXQgd29ya3MgZmluZSBhcyBleHBlY3RlZCwgcGh5X2V4 aXQoKSBpcyBjYWxsZWQgYW5kIEknbSBhYmxlIHRvIHJlYWNoCj4gPj4gbG93IHBvd2VyIHN0YXRl cy4KPiA+Pgo+ID4+IC0gaWYgd2FrZXVwIGlzIGVuYWJsZWQgKC9zeXMvYnVzL3VzYi9kZXZpY2Uv dXNiMi9wb3dlci93YWtldXApLCB0aGVuIGhjZF9idXNfc3VzcGVuZCgpIGlzIG5ldmVyIGNhbGxl ZAo+ID4+IGFuZCBzbyBwaHlfcG93ZXJfb2ZmIHdvbid0IGJlIGNhbGxlZCBlaXRoZXIuCj4gPj4K PiA+PiBUaGlzIG1lYW5zIHRoYXQgdGhlIGRldmljZV9tYXlfd2FrZXVwKCkgY2hlY2sgaXMgcmVk dW5kYW50LiBTb3JyeSBmb3Igc3VnZ2VzdGluZyB0aGlzLgo+ID4gWW91IG1heWJlIHVzZSBhIHdy b25nIGRldmljZS4KPiAKPiBZZXMsIGFmdGVyIHVzaW5nIHRoZSBjb3JyZWN0IGRldmljZSBJIGRv bid0IHNlZSB0aGUgcHJvYmxlbS4KPiAKPiBDYW4geW91IHBsZWFzZSB0cnkgdGhlIGJlbG93IHBh dGNoIG9uIHRvcCBvZiB0aGUgMiBQYXRjaGVzIHRoYXQgTWFydGluIHNlbnQgYW5kIHRoZSBuZXcg cGF0Y2ggeW91IHNlbnQ/Cj4gT25jZSB5b3UgY29uZmlybSBpdCB3b3JrcyBmb3IgeW91IEkgY2Fu IHNlbmQgdGhlIDIgcGF0Y2hlcyBvZmZpY2lhbGx5LgpJdCB3b3JrcyBvbiBNVEsncyBwbGF0Zm9y bSwgSSdsbCB0ZXN0IGl0IGFnYWluIHdoZW4gb2ZmaWNpYWwgcGF0Y2hlcyBhcmUKc2VudCBvdXQu CgpUaGFua3MgYSBsb3QKPiAKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvY29yZS9oY2QuYyBi L2RyaXZlcnMvdXNiL2NvcmUvaGNkLmMKPiBpbmRleCA2ZDRhNDE5Li4wNGNjNDUzIDEwMDY0NAo+ IC0tLSBhL2RyaXZlcnMvdXNiL2NvcmUvaGNkLmMKPiArKysgYi9kcml2ZXJzL3VzYi9jb3JlL2hj ZC5jCj4gQEAgLTIyNjIsNyArMjI2Miw3IEBAIGludCBoY2RfYnVzX3N1c3BlbmQoc3RydWN0IHVz Yl9kZXZpY2UgKnJoZGV2LCBwbV9tZXNzYWdlX3QgbXNnKQo+ICAJCWhjZC0+c3RhdGUgPSBIQ19T VEFURV9TVVNQRU5ERUQ7Cj4gIAo+ICAJCWlmICghUE1TR19JU19BVVRPKG1zZykpCj4gLQkJCXVz Yl9waHlfcm9vdGh1Yl9zdXNwZW5kKGhjZC0+cGh5X3Jvb3RodWIpOwo+ICsJCQl1c2JfcGh5X3Jv b3RodWJfc3VzcGVuZChoY2QtPnNlbGYuc3lzZGV2LCBoY2QtPnBoeV9yb290aHViKTsKPiAgCj4g IAkJLyogRGlkIHdlIHJhY2Ugd2l0aCBhIHJvb3QtaHViIHdha2V1cCBldmVudD8gKi8KPiAgCQlp ZiAocmhkZXYtPmRvX3JlbW90ZV93YWtldXApIHsKPiBAQCAtMjMwMiw3ICsyMzAyLDcgQEAgaW50 IGhjZF9idXNfcmVzdW1lKHN0cnVjdCB1c2JfZGV2aWNlICpyaGRldiwgcG1fbWVzc2FnZV90IG1z ZykKPiAgCX0KPiAgCj4gIAlpZiAoIVBNU0dfSVNfQVVUTyhtc2cpKSB7Cj4gLQkJc3RhdHVzID0g dXNiX3BoeV9yb290aHViX3Jlc3VtZShoY2QtPnBoeV9yb290aHViKTsKPiArCQlzdGF0dXMgPSB1 c2JfcGh5X3Jvb3RodWJfcmVzdW1lKGhjZC0+c2VsZi5zeXNkZXYsIGhjZC0+cGh5X3Jvb3RodWIp Owo+ICAJCWlmIChzdGF0dXMpCj4gIAkJCXJldHVybiBzdGF0dXM7Cj4gIAl9Cj4gQEAgLTIzNDQs NyArMjM0NCw3IEBAIGludCBoY2RfYnVzX3Jlc3VtZShzdHJ1Y3QgdXNiX2RldmljZSAqcmhkZXYs IHBtX21lc3NhZ2VfdCBtc2cpCj4gIAkJfQo+ICAJfSBlbHNlIHsKPiAgCQloY2QtPnN0YXRlID0g b2xkX3N0YXRlOwo+IC0JCXVzYl9waHlfcm9vdGh1Yl9zdXNwZW5kKGhjZC0+cGh5X3Jvb3RodWIp Owo+ICsJCXVzYl9waHlfcm9vdGh1Yl9zdXNwZW5kKGhjZC0+c2VsZi5zeXNkZXYsIGhjZC0+cGh5 X3Jvb3RodWIpOwo+ICAJCWRldl9kYmcoJnJoZGV2LT5kZXYsICJidXMgJXMgZmFpbCwgZXJyICVk XG4iLAo+ICAJCQkJInJlc3VtZSIsIHN0YXR1cyk7Cj4gIAkJaWYgKHN0YXR1cyAhPSAtRVNIVVRE T1dOKQo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9jb3JlL3BoeS5jIGIvZHJpdmVycy91c2Iv Y29yZS9waHkuYwo+IGluZGV4IDJlY2EzNzEuLjI1ZmU3MjkgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVy cy91c2IvY29yZS9waHkuYwo+ICsrKyBiL2RyaXZlcnMvdXNiL2NvcmUvcGh5LmMKPiBAQCAtMzIs OSArMzIsOSBAQCBzdGF0aWMgaW50IHVzYl9waHlfcm9vdGh1Yl9hZGRfcGh5KHN0cnVjdCBkZXZp Y2UgKmRldiwgaW50IGluZGV4LAo+ICAJCQlyZXR1cm4gUFRSX0VSUihwaHkpOwo+ICAJfQo+ICAK PiAtCXJvb3RodWJfZW50cnkgPSB1c2JfcGh5X3Jvb3RodWJfYWxsb2MoZGV2KTsKPiAtCWlmIChJ U19FUlIocm9vdGh1Yl9lbnRyeSkpCj4gLQkJcmV0dXJuIFBUUl9FUlIocm9vdGh1Yl9lbnRyeSk7 Cj4gKwlyb290aHViX2VudHJ5ID0gZGV2bV9remFsbG9jKGRldiwgc2l6ZW9mKCpyb290aHViX2Vu dHJ5KSwgR0ZQX0tFUk5FTCk7Cj4gKwlpZiAoIXJvb3RodWJfZW50cnkpCj4gKwkJcmV0dXJuIC1F Tk9NRU07Cj4gIAo+ICAJcm9vdGh1Yl9lbnRyeS0+cGh5ID0gcGh5Owo+ICAKPiBAQCAtMTYyLDcg KzE2Miw3IEBAIGludCB1c2JfcGh5X3Jvb3RodWJfc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICpkZXYs Cj4gIAl1c2JfcGh5X3Jvb3RodWJfcG93ZXJfb2ZmKHBoeV9yb290aHViKTsKPiAgCj4gIAkvKiBr ZWVwIHRoZSBQSFlzIGluaXRpYWxpemVkIHNvIHRoZSBkZXZpY2UgY2FuIHdha2UgdXAgdGhlIHN5 c3RlbSAqLwo+IC0JaWYgKGRldmljZV9jYW5fd2FrZXVwKGRldikpCj4gKwlpZiAoZGV2aWNlX21h eV93YWtldXAoZGV2KSkKPiAgCQlyZXR1cm4gMDsKPiAgCj4gIAlyZXR1cm4gdXNiX3BoeV9yb290 aHViX2V4aXQocGh5X3Jvb3RodWIpOwo+IEBAIC0xNzUsNyArMTc1LDcgQEAgaW50IHVzYl9waHlf cm9vdGh1Yl9yZXN1bWUoc3RydWN0IGRldmljZSAqZGV2LAo+ICAJaW50IGVycjsKPiAgCj4gIAkv KiBpZiB0aGUgZGV2aWNlIGNhbid0IHdha2UgdXAgdGhlIHN5c3RlbSBfZXhpdCB3YXMgY2FsbGVk ICovCj4gLQlpZiAoZGV2aWNlX2Nhbl93YWtldXAoZGV2KSkgewo+ICsJaWYgKCFkZXZpY2VfbWF5 X3dha2V1cChkZXYpKSB7Cj4gIAkJZXJyID0gdXNiX3BoeV9yb290aHViX2luaXQocGh5X3Jvb3Ro dWIpOwo+ICAJCWlmIChlcnIpCj4gIAkJCXJldHVybiBlcnI7Ci0tLQpUbyB1bnN1YnNjcmliZSBm cm9tIHRoaXMgbGlzdDogc2VuZCB0aGUgbGluZSAidW5zdWJzY3JpYmUgbGludXgtdXNiIiBpbgp0 aGUgYm9keSBvZiBhIG1lc3NhZ2UgdG8gbWFqb3Jkb21vQHZnZXIua2VybmVsLm9yZwpNb3JlIG1h am9yZG9tbyBpbmZvIGF0ICBodHRwOi8vdmdlci5rZXJuZWwub3JnL21ham9yZG9tby1pbmZvLmh0 bWwK