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: <1521589645.3717.98.camel@mhfsdcap03> Date: Wed, 21 Mar 2018 07:47:25 +0800 To: Martin Blumenstingl Cc: Kishon Vijay Abraham I , 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" List-ID: SGkgTWFydGluLAoKT24gVHVlLCAyMDE4LTAzLTIwIGF0IDIyOjU3ICswMTAwLCBNYXJ0aW4gQmx1 bWVuc3RpbmdsIHdyb3RlOgo+IEhlbGxvIEtpc2hvbiwKPiAKPiBPbiBUdWUsIE1hciAyMCwgMjAx OCBhdCAxMjoyNyBQTSwgS2lzaG9uIFZpamF5IEFicmFoYW0gSSA8a2lzaG9uQHRpLmNvbT4gd3Jv dGU6Cj4gPiBIaSwKPiA+Cj4gPiBPbiBNb25kYXkgMTkgTWFyY2ggMjAxOCAwOTo0MiBQTSwgTWFy dGluIEJsdW1lbnN0aW5nbCB3cm90ZToKPiA+PiBIaSBSb2dlciwKPiA+Pgo+ID4+IE9uIE1vbiwg TWFyIDE5LCAyMDE4IGF0IDk6NDkgQU0sIFJvZ2VyIFF1YWRyb3MgPHJvZ2VycUB0aS5jb20+IHdy b3RlOgo+ID4+PiBIaSwKPiA+Pj4KPiA+Pj4gT24gMTkvMDMvMTggMDA6MjksIE1hcnRpbiBCbHVt ZW5zdGluZ2wgd3JvdGU6Cj4gPj4+PiBIaSBSb2dlciwKPiA+Pj4+Cj4gPj4+PiBPbiBGcmksIE1h ciAxNiwgMjAxOCBhdCAzOjMyIFBNLCBSb2dlciBRdWFkcm9zIDxyb2dlcnFAdGkuY29tPiB3cm90 ZToKPiA+Pj4+PiArc29tZSBUSSBmb2xrcwo+ID4+Pj4+Cj4gPj4+Pj4gSGkgTWFydGluLAo+ID4+ Pj4+Cj4gPj4+Pj4gT24gMTgvMDIvMTggMjA6NDQsIE1hcnRpbiBCbHVtZW5zdGluZ2wgd3JvdGU6 Cj4gPj4+Pj4+IE1hbnkgU29DIHBsYXRmb3JtcyBoYXZlIHNlcGFyYXRlIGRldmljZXMgZm9yIHRo ZSBVU0IgUEhZIHdoaWNoIGFyZQo+ID4+Pj4+PiByZWdpc3RlcmVkIHRocm91Z2ggdGhlIGdlbmVy aWMgUEhZIGZyYW1ld29yay4gVGhlc2UgUEhZcyBoYXZlIHRvIGJlCj4gPj4+Pj4+IGVuYWJsZWQg dG8gbWFrZSB0aGUgVVNCIGNvbnRyb2xsZXIgYWN0dWFsbHkgd29yay4gVGhleSBhbHNvIGhhdmUg dG8gYmUKPiA+Pj4+Pj4gZGlzYWJsZWQgYWdhaW4gb24gc2h1dGRvd24vc3VzcGVuZC4KPiA+Pj4+ Pj4KPiA+Pj4+Pj4gQ3VycmVudGx5IChhdCBsZWFzdCkgdGhlIGZvbGxvd2luZyBIQ0kgcGxhdGZv cm0gZHJpdmVycyBhcmUgdXNpbmcgY3VzdG9tCj4gPj4+Pj4+IGNvZGUgdG8gb2J0YWluIGFsbCBQ SFlzIHZpYSBkZXZpY2V0cmVlIGZvciB0aGUgcm9vdGh1Yi9jb250cm9sbGVyIGFuZAo+ID4+Pj4+ PiBkaXNhYmxlL2VuYWJsZSB0aGVtIHdoZW4gcmVxdWlyZWQ6Cj4gPj4+Pj4+IC0gZWhjaS1wbGF0 Zm9ybS5jIGhhcyBlaGNpX3BsYXRmb3JtX3Bvd2VyX3tvbixvZmZ9Cj4gPj4+Pj4+IC0geGhjaS1t dGsuYyBoYXMgeGhjaV9tdGtfcGh5X3tpbml0LGV4aXQscG93ZXJfb24scG93ZXJfb2ZmfQo+ID4+ Pj4+PiAtIG9oY2ktcGxhdGZvcm0uYyBoYXMgb2hjaV9wbGF0Zm9ybV9wb3dlcl97b24sb2ZmfQo+ ID4+Pj4+Pgo+ID4+Pj4+PiBXaXRoIHRoaXMgbmV3IHdyYXBwZXIgdGhlIFVTQiBQSFlzIGNhbiBi ZSBzcGVjaWZpZWQgZGlyZWN0bHkgaW4gdGhlCj4gPj4+Pj4+IFVTQiBjb250cm9sbGVyJ3MgZGV2 aWNldHJlZSBub2RlIChqdXN0IGxpa2Ugb24gdGhlIGRyaXZlcnMgbGlzdGVkCj4gPj4+Pj4+IGFi b3ZlKS4gVGhpcyBhbGxvd3MgU29DcyBsaWtlIHRoZSBBbWxvZ2ljIE1lc29uIEdYTCBmYW1pbHkg dG8gb3BlcmF0ZQo+ID4+Pj4+PiBjb3JyZWN0bHkgb25jZSB0aGlzIGlzIHdpcmVkIHVwIGNvcnJl Y3RseS4gVGhlc2UgU29DcyB1c2UgYSBkd2MzCj4gPj4+Pj4+IGNvbnRyb2xsZXIgYW5kIHJlcXVp cmUgYWxsIFVTQiBQSFlzIHRvIGJlIGluaXRpYWxpemVkIChpZiBvbmUgb2YgdGhlIFVTQgo+ID4+ Pj4+PiBQSFlzIGl0IG5vdCBpbml0aWFsaXplZCB0aGVuIG5vbmUgb2YgVVNCIHBvcnQgd29ya3Mg YXQgYWxsKS4KPiA+Pj4+Pj4KPiA+Pj4+Pj4gU2lnbmVkLW9mZi1ieTogTWFydGluIEJsdW1lbnN0 aW5nbCA8bWFydGluLmJsdW1lbnN0aW5nbEBnb29nbGVtYWlsLmNvbT4KPiA+Pj4+Pj4gVGVzdGVk LWJ5OiBZaXh1biBMYW4gPHlpeHVuLmxhbkBhbWxvZ2ljLmNvbT4KPiA+Pj4+Pj4gQ2M6IE5laWwg QXJtc3Ryb25nIDxuYXJtc3Ryb25nQGJheWxpYnJlLmNvbT4KPiA+Pj4+Pj4gQ2M6IENodW5mZW5n IFl1biA8Y2h1bmZlbmcueXVuQG1lZGlhdGVrLmNvbT4KPiA+Pj4+Pgo+ID4+Pj4+IFRoaXMgcGF0 Y2ggaXMgYnJlYWtpbmcgbG93IHBvd2VyIGNhc2VzIG9uIFRJIFNvQ3Mgd2hlbiBVU0IgaXMgaW4g aG9zdCBtb2RlLgo+ID4+Pj4+IEknbGwgZXhwbGFpbiB3aHkgYmVsb3cuCj4gPj4+PiBiYXNlZCBv biB5b3VyIGV4cGxhbmF0aW9uIGFuZCByZWFkaW5nIHRoZSBUSSBQSFkgZHJpdmVycyBJIGFtIGFz c3VtaW5nCj4gPj4+PiB0aGF0IHRoZSBhZmZlY3RlZCBTb0NzIGFyZSB1c2luZyB0aGUgInBoeS1v bWFwLXVzYjIiIGRyaXZlcgo+ID4+Pj4KPiA+Pj4geWVzIGFuZCBwaHktdGktcGlwZTMgYXMgd2Vs bCBpLmUuICJ0aSxwaHktdXNiMyIgYW5kICJ0aSxvbWFwLXVzYjMiCj4gPj4gSSBtaXNzZWQgdGhh dCwgdGhhbmtzCj4gPj4KPiA+Pj4+Pj4gLS0tCj4gPj4+Pj4+ICBkcml2ZXJzL3VzYi9jb3JlL01h a2VmaWxlIHwgICAyICstCj4gPj4+Pj4+ICBkcml2ZXJzL3VzYi9jb3JlL3BoeS5jICAgIHwgMTU4 ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKPiA+Pj4+Pj4g IGRyaXZlcnMvdXNiL2NvcmUvcGh5LmggICAgfCAgIDcgKysKPiA+Pj4+Pj4gIDMgZmlsZXMgY2hh bmdlZCwgMTY2IGluc2VydGlvbnMoKyksIDEgZGVsZXRpb24oLSkKPiA+Pj4+Pj4gIGNyZWF0ZSBt b2RlIDEwMDY0NCBkcml2ZXJzL3VzYi9jb3JlL3BoeS5jCj4gPj4+Pj4+ICBjcmVhdGUgbW9kZSAx MDA2NDQgZHJpdmVycy91c2IvY29yZS9waHkuaAo+ID4+Pj4+Pgo+ID4+Pj4+PiBkaWZmIC0tZ2l0 IGEvZHJpdmVycy91c2IvY29yZS9NYWtlZmlsZSBiL2RyaXZlcnMvdXNiL2NvcmUvTWFrZWZpbGUK PiA+Pj4+Pj4gaW5kZXggOTJjOWNlZmI0MzE3Li4xOGU4NzRiMDQ0MWUgMTAwNjQ0Cj4gPj4+Pj4+ IC0tLSBhL2RyaXZlcnMvdXNiL2NvcmUvTWFrZWZpbGUKPiA+Pj4+Pj4gKysrIGIvZHJpdmVycy91 c2IvY29yZS9NYWtlZmlsZQo+ID4+Pj4+PiBAQCAtNiw3ICs2LDcgQEAKPiA+Pj4+Pj4gIHVzYmNv cmUteSA6PSB1c2IubyBodWIubyBoY2QubyB1cmIubyBtZXNzYWdlLm8gZHJpdmVyLm8KPiA+Pj4+ Pj4gIHVzYmNvcmUteSArPSBjb25maWcubyBmaWxlLm8gYnVmZmVyLm8gc3lzZnMubyBlbmRwb2lu dC5vCj4gPj4+Pj4+ICB1c2Jjb3JlLXkgKz0gZGV2aW8ubyBub3RpZnkubyBnZW5lcmljLm8gcXVp cmtzLm8gZGV2aWNlcy5vCj4gPj4+Pj4+IC11c2Jjb3JlLXkgKz0gcG9ydC5vCj4gPj4+Pj4+ICt1 c2Jjb3JlLXkgKz0gcGh5Lm8gcG9ydC5vCj4gPj4+Pj4+Cj4gPj4+Pj4+ICB1c2Jjb3JlLSQoQ09O RklHX09GKSAgICAgICAgICs9IG9mLm8KPiA+Pj4+Pj4gIHVzYmNvcmUtJChDT05GSUdfVVNCX1BD SSkgICAgICAgICAgICArPSBoY2QtcGNpLm8KPiA+Pj4+Pj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMv dXNiL2NvcmUvcGh5LmMgYi9kcml2ZXJzL3VzYi9jb3JlL3BoeS5jCj4gPj4+Pj4+IG5ldyBmaWxl IG1vZGUgMTAwNjQ0Cj4gPj4+Pj4+IGluZGV4IDAwMDAwMDAwMDAwMC4uMDliN2M0M2MwZWE0Cj4g Pj4+Pj4+IC0tLSAvZGV2L251bGwKPiA+Pj4+Pj4gKysrIGIvZHJpdmVycy91c2IvY29yZS9waHku Ywo+ID4+Pj4+PiBAQCAtMCwwICsxLDE1OCBAQAo+ID4+Pj4+PiArLy8gU1BEWC1MaWNlbnNlLUlk ZW50aWZpZXI6IEdQTC0yLjArCj4gPj4+Pj4+ICsvKgo+ID4+Pj4+PiArICogQSB3cmFwcGVyIGZv ciBtdWx0aXBsZSBQSFlzIHdoaWNoIHBhc3NlcyBhbGwgcGh5XyogZnVuY3Rpb24gY2FsbHMgdG8K PiA+Pj4+Pj4gKyAqIG11bHRpcGxlIChhY3R1YWwpIFBIWSBkZXZpY2VzLiBUaGlzIGlzIGNvbWVz IGhhbmR5IHdoZW4gaW5pdGlhbGl6aW5nCj4gPj4+Pj4+ICsgKiBhbGwgUEhZcyBvbiBhIEhDRCBh bmQgdG8ga2VlcCB0aGVtIGFsbCBpbiB0aGUgc2FtZSBzdGF0ZS4KPiA+Pj4+Pj4gKyAqCj4gPj4+ Pj4+ICsgKiBDb3B5cmlnaHQgKEMpIDIwMTggTWFydGluIEJsdW1lbnN0aW5nbCA8bWFydGluLmJs dW1lbnN0aW5nbEBnb29nbGVtYWlsLmNvbT4KPiA+Pj4+Pj4gKyAqLwo+ID4+Pj4+PiArCj4gPj4+ Pj4+ICsjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+Cj4gPj4+Pj4+ICsjaW5jbHVkZSA8bGludXgv bGlzdC5oPgo+ID4+Pj4+PiArI2luY2x1ZGUgPGxpbnV4L3BoeS9waHkuaD4KPiA+Pj4+Pj4gKyNp bmNsdWRlIDxsaW51eC9vZi5oPgo+ID4+Pj4+PiArCj4gPj4+Pj4+ICsjaW5jbHVkZSAicGh5Lmgi Cj4gPj4+Pj4+ICsKPiA+Pj4+Pj4gK3N0cnVjdCB1c2JfcGh5X3Jvb3RodWIgewo+ID4+Pj4+PiAr ICAgICBzdHJ1Y3QgcGh5ICAgICAgICAgICAgICAqcGh5Owo+ID4+Pj4+PiArICAgICBzdHJ1Y3Qg bGlzdF9oZWFkICAgICAgICBsaXN0Owo+ID4+Pj4+PiArfTsKPiA+Pj4+Pj4gKwo+ID4+Pj4+PiAr c3RhdGljIHN0cnVjdCB1c2JfcGh5X3Jvb3RodWIgKnVzYl9waHlfcm9vdGh1Yl9hbGxvYyhzdHJ1 Y3QgZGV2aWNlICpkZXYpCj4gPj4+Pj4+ICt7Cj4gPj4+Pj4+ICsgICAgIHN0cnVjdCB1c2JfcGh5 X3Jvb3RodWIgKnJvb3RodWJfZW50cnk7Cj4gPj4+Pj4+ICsKPiA+Pj4+Pj4gKyAgICAgcm9vdGh1 Yl9lbnRyeSA9IGRldm1fa3phbGxvYyhkZXYsIHNpemVvZigqcm9vdGh1Yl9lbnRyeSksIEdGUF9L RVJORUwpOwo+ID4+Pj4+PiArICAgICBpZiAoIXJvb3RodWJfZW50cnkpCj4gPj4+Pj4+ICsgICAg ICAgICAgICAgcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7Cj4gPj4+Pj4+ICsKPiA+Pj4+Pj4gKyAg ICAgSU5JVF9MSVNUX0hFQUQoJnJvb3RodWJfZW50cnktPmxpc3QpOwo+ID4+Pj4+PiArCj4gPj4+ Pj4+ICsgICAgIHJldHVybiByb290aHViX2VudHJ5Owo+ID4+Pj4+PiArfQo+ID4+Pj4+PiArCj4g Pj4+Pj4+ICtzdGF0aWMgaW50IHVzYl9waHlfcm9vdGh1Yl9hZGRfcGh5KHN0cnVjdCBkZXZpY2Ug KmRldiwgaW50IGluZGV4LAo+ID4+Pj4+PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0KQo+ID4+Pj4+PiArewo+ID4+Pj4+PiArICAgICBzdHJ1 Y3QgdXNiX3BoeV9yb290aHViICpyb290aHViX2VudHJ5Owo+ID4+Pj4+PiArICAgICBzdHJ1Y3Qg cGh5ICpwaHkgPSBkZXZtX29mX3BoeV9nZXRfYnlfaW5kZXgoZGV2LCBkZXYtPm9mX25vZGUsIGlu ZGV4KTsKPiA+Pj4+Pj4gKwo+ID4+Pj4+PiArICAgICBpZiAoSVNfRVJSX09SX05VTEwocGh5KSkg ewo+ID4+Pj4+PiArICAgICAgICAgICAgIGlmICghcGh5IHx8IFBUUl9FUlIocGh5KSA9PSAtRU5P REVWKQo+ID4+Pj4+PiArICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7Cj4gPj4+Pj4+ICsg ICAgICAgICAgICAgZWxzZQo+ID4+Pj4+PiArICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFBU Ul9FUlIocGh5KTsKPiA+Pj4+Pj4gKyAgICAgfQo+ID4+Pj4+PiArCj4gPj4+Pj4+ICsgICAgIHJv b3RodWJfZW50cnkgPSB1c2JfcGh5X3Jvb3RodWJfYWxsb2MoZGV2KTsKPiA+Pj4+Pj4gKyAgICAg aWYgKElTX0VSUihyb290aHViX2VudHJ5KSkKPiA+Pj4+Pj4gKyAgICAgICAgICAgICByZXR1cm4g UFRSX0VSUihyb290aHViX2VudHJ5KTsKPiA+Pj4+Pj4gKwo+ID4+Pj4+PiArICAgICByb290aHVi X2VudHJ5LT5waHkgPSBwaHk7Cj4gPj4+Pj4+ICsKPiA+Pj4+Pj4gKyAgICAgbGlzdF9hZGRfdGFp bCgmcm9vdGh1Yl9lbnRyeS0+bGlzdCwgbGlzdCk7Cj4gPj4+Pj4+ICsKPiA+Pj4+Pj4gKyAgICAg cmV0dXJuIDA7Cj4gPj4+Pj4+ICt9Cj4gPj4+Pj4+ICsKPiA+Pj4+Pj4gK3N0cnVjdCB1c2JfcGh5 X3Jvb3RodWIgKnVzYl9waHlfcm9vdGh1Yl9pbml0KHN0cnVjdCBkZXZpY2UgKmRldikKPiA+Pj4+ Pj4gK3sKPiA+Pj4+Pj4gKyAgICAgc3RydWN0IHVzYl9waHlfcm9vdGh1YiAqcGh5X3Jvb3RodWI7 Cj4gPj4+Pj4+ICsgICAgIHN0cnVjdCB1c2JfcGh5X3Jvb3RodWIgKnJvb3RodWJfZW50cnk7Cj4g Pj4+Pj4+ICsgICAgIHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQ7Cj4gPj4+Pj4+ICsgICAgIGludCBp LCBudW1fcGh5cywgZXJyOwo+ID4+Pj4+PiArCj4gPj4+Pj4+ICsgICAgIG51bV9waHlzID0gb2Zf Y291bnRfcGhhbmRsZV93aXRoX2FyZ3MoZGV2LT5vZl9ub2RlLCAicGh5cyIsCj4gPj4+Pj4+ICsg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiNwaHktY2VsbHMiKTsK PiA+Pj4+Pj4gKyAgICAgaWYgKG51bV9waHlzIDw9IDApCj4gPj4+Pj4+ICsgICAgICAgICAgICAg cmV0dXJuIE5VTEw7Cj4gPj4+Pj4+ICsKPiA+Pj4+Pj4gKyAgICAgcGh5X3Jvb3RodWIgPSB1c2Jf cGh5X3Jvb3RodWJfYWxsb2MoZGV2KTsKPiA+Pj4+Pj4gKyAgICAgaWYgKElTX0VSUihwaHlfcm9v dGh1YikpCj4gPj4+Pj4+ICsgICAgICAgICAgICAgcmV0dXJuIHBoeV9yb290aHViOwo+ID4+Pj4+ PiArCj4gPj4+Pj4+ICsgICAgIGZvciAoaSA9IDA7IGkgPCBudW1fcGh5czsgaSsrKSB7Cj4gPj4+ Pj4+ICsgICAgICAgICAgICAgZXJyID0gdXNiX3BoeV9yb290aHViX2FkZF9waHkoZGV2LCBpLCAm cGh5X3Jvb3RodWItPmxpc3QpOwo+ID4+Pj4+PiArICAgICAgICAgICAgIGlmIChlcnIpCj4gPj4+ Pj4+ICsgICAgICAgICAgICAgICAgICAgICBnb3RvIGVycl9vdXQ7Cj4gPj4+Pj4+ICsgICAgIH0K PiA+Pj4+Pj4gKwo+ID4+Pj4+PiArICAgICBoZWFkID0gJnBoeV9yb290aHViLT5saXN0Owo+ID4+ Pj4+PiArCj4gPj4+Pj4+ICsgICAgIGxpc3RfZm9yX2VhY2hfZW50cnkocm9vdGh1Yl9lbnRyeSwg aGVhZCwgbGlzdCkgewo+ID4+Pj4+PiArICAgICAgICAgICAgIGVyciA9IHBoeV9pbml0KHJvb3Ro dWJfZW50cnktPnBoeSk7Cj4gPj4+Pj4KPiA+Pj4+PiBUaGUgcGh5X2luaXQoKSBmdW5jdGlvbiBh Y3R1YWxseSBlbmFibGVzIHRoZSBQSFkgY2xvY2tzLgo+ID4+Pj4+IEl0IHNob3VsZCBiZSBtb3Zl ZCB0byB0aGUgdXNiX3BoeV9yb290aHViX2V4aXQoKSByb3V0aW5lIGp1c3QgYmVmb3JlIGNhbGxp bmcgcGh5X3Bvd2VyX29uKCkuCj4gPj4+PiBkbyB5b3UgbWVhbiB0aGF0IHBoeV9pbml0IHNob3Vs ZCBiZSBtb3ZlZCB0byB1c2JfcGh5X3Jvb3RodWJfcG93ZXJfb24KPiA+Pj4+IChqdXN0IGJlZm9y ZSBwaHlfcG93ZXJfb24gaXMgY2FsbGVkIHdpdGhpbiB1c2JfcGh5X3Jvb3RodWJfcG93ZXJfb24p Pwo+ID4+Pj4KPiA+Pj4KPiA+Pj4gWWVzLgo+ID4+Pgo+ID4+Pj4gYW4gZWFybGllciB2ZXJzaW9u IG9mIG15IHBhdGNoIGRpZCBleGFjdGx5IHRoaXMsIGJ1dCBpdCBjYXVzZWQKPiA+Pj4+IHByb2Js ZW1zIGR1cmluZyBhIHN1c3BlbmQvcmVzdW1lIGN5Y2xlIG9uIE1lZGlhdGVrIGRldmljZXMKPiA+ Pj4+IENodW5mZW5nIFl1biByZXBvcnRlZCB0aGF0IGlzc3VlIGhlcmUgWzBdLCBxdW90ZSBmcm9t IHRoYXQgbWFpbCBmb3IKPiA+Pj4+IGVhc2llciByZWFkaW5nOgo+ID4+Pj4gIkluIG9yZGVyIHRv IGtlZXAgbGluayBzdGF0ZSBvbiBtdDgxNzMsIHdlIGp1c3QgcG93ZXIgb2ZmIGFsbCBwaHlzKG5v dAo+ID4+Pj4gZXhpdCkgd2hlbiBzeXN0ZW0gZW50ZXIgc3VzcGVuZCwgdGhlbiBwb3dlciBvbiB0 aGVtIGFnYWluIChuZWVkbid0Cj4gPj4+PiBpbml0LCBvdGhlcndpc2UgZGV2aWNlIHdpbGwgYmUg ZGlzY29ubmVjdGVkKSB3aGVuIHN5c3RlbSByZXN1bWUsIHRoaXMKPiA+Pj4+IGNhbiBhdm9pZCBy ZS1lbnVtZXJhdGluZyBkZXZpY2UuIgo+ID4+Pj4KPiA+Pj4+Pj4gKyAgICAgICAgICAgICBpZiAo ZXJyKQo+ID4+Pj4+PiArICAgICAgICAgICAgICAgICAgICAgZ290byBlcnJfZXhpdF9waHlzOwo+ ID4+Pj4+PiArICAgICB9Cj4gPj4+Pj4+ICsKPiA+Pj4+Pj4gKyAgICAgcmV0dXJuIHBoeV9yb290 aHViOwo+ID4+Pj4+PiArCj4gPj4+Pj4+ICtlcnJfZXhpdF9waHlzOgo+ID4+Pj4+PiArICAgICBs aXN0X2Zvcl9lYWNoX2VudHJ5X2NvbnRpbnVlX3JldmVyc2Uocm9vdGh1Yl9lbnRyeSwgaGVhZCwg bGlzdCkKPiA+Pj4+Pj4gKyAgICAgICAgICAgICBwaHlfZXhpdChyb290aHViX2VudHJ5LT5waHkp Owo+ID4+Pj4+PiArCj4gPj4+Pj4+ICtlcnJfb3V0Ogo+ID4+Pj4+PiArICAgICByZXR1cm4gRVJS X1BUUihlcnIpOwo+ID4+Pj4+PiArfQo+ID4+Pj4+PiArRVhQT1JUX1NZTUJPTF9HUEwodXNiX3Bo eV9yb290aHViX2luaXQpOwo+ID4+Pj4+PiArCj4gPj4+Pj4+ICtpbnQgdXNiX3BoeV9yb290aHVi X2V4aXQoc3RydWN0IHVzYl9waHlfcm9vdGh1YiAqcGh5X3Jvb3RodWIpCj4gPj4+Pj4+ICt7Cj4g Pj4+Pj4+ICsgICAgIHN0cnVjdCB1c2JfcGh5X3Jvb3RodWIgKnJvb3RodWJfZW50cnk7Cj4gPj4+ Pj4+ICsgICAgIHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQ7Cj4gPj4+Pj4+ICsgICAgIGludCBlcnIs IHJldCA9IDA7Cj4gPj4+Pj4+ICsKPiA+Pj4+Pj4gKyAgICAgaWYgKCFwaHlfcm9vdGh1YikKPiA+ Pj4+Pj4gKyAgICAgICAgICAgICByZXR1cm4gMDsKPiA+Pj4+Pj4gKwo+ID4+Pj4+PiArICAgICBo ZWFkID0gJnBoeV9yb290aHViLT5saXN0Owo+ID4+Pj4+PiArCj4gPj4+Pj4+ICsgICAgIGxpc3Rf Zm9yX2VhY2hfZW50cnkocm9vdGh1Yl9lbnRyeSwgaGVhZCwgbGlzdCkgewo+ID4+Pj4+PiArICAg ICAgICAgICAgIGVyciA9IHBoeV9leGl0KHJvb3RodWJfZW50cnktPnBoeSk7Cj4gPj4+Pj4+ICsg ICAgICAgICAgICAgaWYgKGVycikKPiA+Pj4+Pj4gKyAgICAgICAgICAgICAgICAgICAgIHJldCA9 IHJldDsKPiA+Pj4+Pj4gKyAgICAgfQo+ID4+Pj4+Cj4gPj4+Pj4gcGh5X2V4aXQoKSBzaG91bGQg YmUgbW92ZWQgdG8gdXNiX3BoeV9yb290aHViX3Bvd2Vyb2ZmKCkganVzdCBhZnRlciBjYWxsaW5n IHBoeV9wb3dlcl9vZmYoKS4KPiA+Pj4+IGlmIEkgdW5kZXJzdG9vZCBDaHVuZmVuZyBZdW4gY29y cmVjdGx5IHRoaXMgd2lsbCByZXF1aXJlCj4gPj4+PiByZS1lbnVtZXJhdGlvbiBvZiB0aGUgVVNC IGRldmljZXMgYWZ0ZXIgYSBzdXNwZW5kL3Jlc3VtZSBjeWNsZSBvbgo+ID4+Pj4gTWVkaWF0ZWsg U29Dcwo+ID4+Pj4KPiA+Pj4KPiA+Pj4gT0suIEkgc3VwcG9zZSB0aGF0IHRoZXJlIGFyZSAyIGNh c2VzCj4gPj4+IDEpIE1lZGlhdGVrJ3MgY2FzZTogVVNCIGNvbnRyb2xsZXIgY29udGV4dCByZXRh aW5lZCBhY3Jvc3Mgc3VzcGVuZC9yZXN1bWUuCj4gPj4+IFJlbW90ZSB3YWtldXAgcHJvYmFibHkg cmVxdWlyZWQuCj4gPj4+IE5vIHJlLWVudW1lcmF0aW9uIHByZWZlcnJlZCBhZnRlciByZXN1bWUu IHBoeV9leGl0KCkvcGh5X2luaXQoKSBtdXN0IG5vdCBiZSBjYWxsZWQKPiA+Pj4gZHVyaW5nIHN1 c3BlbmQvcmVzdW1lIHRvIGtlZXAgUEhZIGxpbmsgYWN0aXZlLgo+ID4+IERvY3VtZW50YXRpb24v ZGV2aWNldHJlZS9iaW5kaW5ncy91c2IvbWVkaWF0ZWssbXR1My50eHQgaW5kZWVkIHNob3dzCj4g Pj4gdGhhdCB0aGUgcGFyZW50IG9mIHRoZSBVU0IgY29udHJvbGxlciBjYW4gYmUgbWFya2VkIGFz ICJ3YWtldXAtc291cmNlIgo+ID4+Cj4gPj4+IDIpIFRJJ3MgY2FzZTogbG93IHBvd2VyIGltcG9y dGFudDogVVNCIGNvbnRleHQgaXMgbG9zdCwgT0sgdG8gcmUtZW51bWVyYXRlLgo+ID4+PiBwaHlf ZXhpdCgpL3BoeV9pbml0KCkgbXVzdCBiZSBjYWxsZWQgZHVyaW5nIHN1c3BlbmQvcmVzdW1lLgo+ ID4+IEFDSwo+ID4+Cj4gPj4+Pj4gV2l0aCB0aGF0IHRoZXJlIGlzIG5vdGhpbmcgZWxzZSBiZWlu ZyBkb25lIGhlcmUuIFNob3VsZG4ndCB3ZSBiZSBkb2luZyB0aGUgZXF1aXZhbGVudCBvZgo+ID4+ Pj4+IHVzYl9waHlfcm9vdGh1Yl9kZWxfcGh5KCkgYW5kIHVzYl9waHlfcm9vdGh1Yl9mcmVlKCkg aGVyZT8KPiA+Pj4+Pgo+ID4+Pj4+PiArCj4gPj4+Pj4+ICsgICAgIHJldHVybiByZXQ7Cj4gPj4+ Pj4+ICt9Cj4gPj4+Pj4+ICtFWFBPUlRfU1lNQk9MX0dQTCh1c2JfcGh5X3Jvb3RodWJfZXhpdCk7 Cj4gPj4+Pj4+ICsKPiA+Pj4+Pj4gK2ludCB1c2JfcGh5X3Jvb3RodWJfcG93ZXJfb24oc3RydWN0 IHVzYl9waHlfcm9vdGh1YiAqcGh5X3Jvb3RodWIpCj4gPj4+Pj4+ICt7Cj4gPj4+Pj4+ICsgICAg IHN0cnVjdCB1c2JfcGh5X3Jvb3RodWIgKnJvb3RodWJfZW50cnk7Cj4gPj4+Pj4+ICsgICAgIHN0 cnVjdCBsaXN0X2hlYWQgKmhlYWQ7Cj4gPj4+Pj4+ICsgICAgIGludCBlcnI7Cj4gPj4+Pj4+ICsK PiA+Pj4+Pj4gKyAgICAgaWYgKCFwaHlfcm9vdGh1YikKPiA+Pj4+Pj4gKyAgICAgICAgICAgICBy ZXR1cm4gMDsKPiA+Pj4+Pj4gKwo+ID4+Pj4+PiArICAgICBoZWFkID0gJnBoeV9yb290aHViLT5s aXN0Owo+ID4+Pj4+PiArCj4gPj4+Pj4+ICsgICAgIGxpc3RfZm9yX2VhY2hfZW50cnkocm9vdGh1 Yl9lbnRyeSwgaGVhZCwgbGlzdCkgewo+ID4+Pj4+PiArICAgICAgICAgICAgIGVyciA9IHBoeV9w b3dlcl9vbihyb290aHViX2VudHJ5LT5waHkpOwo+ID4+Pj4+PiArICAgICAgICAgICAgIGlmIChl cnIpCj4gPj4+Pj4+ICsgICAgICAgICAgICAgICAgICAgICBnb3RvIGVycl9vdXQ7Cj4gPj4+Pj4+ ICsgICAgIH0KPiA+Pj4+Pj4gKwo+ID4+Pj4+PiArICAgICByZXR1cm4gMDsKPiA+Pj4+Pj4gKwo+ ID4+Pj4+PiArZXJyX291dDoKPiA+Pj4+Pj4gKyAgICAgbGlzdF9mb3JfZWFjaF9lbnRyeV9jb250 aW51ZV9yZXZlcnNlKHJvb3RodWJfZW50cnksIGhlYWQsIGxpc3QpCj4gPj4+Pj4+ICsgICAgICAg ICAgICAgcGh5X3Bvd2VyX29mZihyb290aHViX2VudHJ5LT5waHkpOwo+ID4+Pj4+PiArCj4gPj4+ Pj4+ICsgICAgIHJldHVybiBlcnI7Cj4gPj4+Pj4+ICt9Cj4gPj4+Pj4+ICtFWFBPUlRfU1lNQk9M X0dQTCh1c2JfcGh5X3Jvb3RodWJfcG93ZXJfb24pOwo+ID4+Pj4+PiArCj4gPj4+Pj4+ICt2b2lk IHVzYl9waHlfcm9vdGh1Yl9wb3dlcl9vZmYoc3RydWN0IHVzYl9waHlfcm9vdGh1YiAqcGh5X3Jv b3RodWIpCj4gPj4+Pj4+ICt7Cj4gPj4+Pj4+ICsgICAgIHN0cnVjdCB1c2JfcGh5X3Jvb3RodWIg KnJvb3RodWJfZW50cnk7Cj4gPj4+Pj4+ICsKPiA+Pj4+Pj4gKyAgICAgaWYgKCFwaHlfcm9vdGh1 YikKPiA+Pj4+Pj4gKyAgICAgICAgICAgICByZXR1cm47Cj4gPj4+Pj4+ICsKPiA+Pj4+Pj4gKyAg ICAgbGlzdF9mb3JfZWFjaF9lbnRyeV9yZXZlcnNlKHJvb3RodWJfZW50cnksICZwaHlfcm9vdGh1 Yi0+bGlzdCwgbGlzdCkKPiA+Pj4+Pj4gKyAgICAgICAgICAgICBwaHlfcG93ZXJfb2ZmKHJvb3Ro dWJfZW50cnktPnBoeSk7Cj4gPj4+Pj4KPiA+Pj4+PiBOb3QgZG9pbmcgdGhlIHBoeV9leGl0KCkg aGVyZSBsZWF2ZXMgdGhlIGNsb2NrcyBlbmFibGVkIG9uIG91ciBTb0MgYW5kCj4gPj4+Pj4gd2Un cmUgbm8gbG9uZ2VyIGFibGUgdG8gcmVhY2ggbG93IHBvd2VyIHN0YXRlcyBvbiBzeXN0ZW0gc3Vz cGVuZC4KPiA+Pj4+IEknbSBub3Qgc3VyZSB3aGVyZSB0aGlzIHByb2JsZW0gc2hvdWxkIGJlIHNv bHZlZDoKPiA+Pj4+IC0gc2V0IHNraXBfcGh5X2luaXRpYWxpemF0aW9uIGluIHN0cnVjdCB1c2Jf aGNkIHRvIDEgZm9yIHRoZSBhZmZlY3RlZAo+ID4+Pj4gVEkgcGxhdGZvcm1zCj4gPj4+Cj4gPj4+ IE1hbnkgVEkgcGxhdGZvcm1zIGFyZSBhZmZlY3RlZCwgb21hcDUqLCBkcmE3KiwgYW00MyoKPiA+ Pj4KPiA+Pj4+IC0gZml4IHRoaXMgaW4gdGhlIHVzYl9waHlfcm9vdGh1YiBjb2RlCj4gPj4+Cj4g Pj4+IEknZCB2b3RlIGZvciBmaXhpbmcgaXQgaW4gdGhlIHVzYl9waHlfcm9vdGh1YiBjb2RlLiBI b3c/Cj4gPj4+IEhvdyBhYm91dCB1c2luZyB0aGUgZGV2aWNlX2Nhbl93YWtldXAoKSB0byBkZWNp ZGUgaWYgd2Ugc2hvdWxkIGNhbGwgcGh5X2V4aXQoKS9pbml0KCkgb3Igbm90Pwo+ID4+PiBJZiB0 aGUgVVNCIGRldmljZSBjYW4ndCB3YWtldXAgdGhlIHN5c3RlbSB0aGVyZSBpcyBubyBwb2ludCBp biBrZWVwaW5nIGl0IHBvd2VyZWQvY2xvY2tlZCByaWdodD8KPiA+PiBAQ2h1bmZlbmc6IGNhbiB5 b3UgY29uZmlybSBSb2dlcidzIGlkZWEgdGhhdCB3ZSBjb3VsZCBjYWxsIHBoeV9leGl0IGlmCj4g Pj4gdGhlIGNvbnRyb2xsZXIgaXMgKk5PVCogbWFya2VkIGFzICJ3YWtldXAtc291cmNlIj8KPiA+ PiBJIGFtIGFsc28gbm90IHN1cmUgaWYgaXQgd291bGQgd29yaywgc2luY2UgdGhlICJ3YWtldXAt c291cmNlIgo+ID4+IHByb3BlcnR5IGlzIGRlZmluZWQgb24gdGhlIFVTQiBjb250cm9sbGVyJ3Mg cGFyZW50IG5vZGUgaW4gY2FzZSBvZiB0aGUKPiA+PiBNZWRpYXRlayBNVFUzIChNZWRpYXRlayBV U0IzLjAgRFJEKSBjb250cm9sbGVyCj4gPj4KPiA+Pj4+IC0gZml4IHRoaXMgaW4gdGhlIFBIWSBk cml2ZXIKPiA+Pj4KPiA+Pj4gVGhlcmUgaXMgbm90aGluZyB0byBmaXggaW4gdGhlIFBIWSBkcml2 ZXIuIEl0IGlzIGRvaW5nIHdoYXQgaXQgaXMgc3VwcG9zZWQgdG8gZG8uCj4gPj4gSSBhY3R1YWxs eSB3b25kZXIgaWYgcGh5X29wcyBzaG91bGQgaGF2ZSBleHBsaWNpdCBzdXNwZW5kL3Jlc3VtZSBz dXBwb3J0Ogo+ID4KPiA+IE5vdCBpbiBmYXZvciBvZiBhZGRpbmcgZXhwbGljaXQgc3VzcGVuZC9y ZXN1bWUgb3BzIHNpbmNlIFBNIGZyYW1ld29yayBhbHJlYWR5Cj4gPiBoYXMgdGhvc2UuIEkgdGhp bmsgd2Ugc2hvdWxkIGxldCBQSFkgZHJpdmVycyBtYW5hZ2Ugc3VzcGVuZC9yZXN1bWUgb24gaXRz IG93bgo+ID4gKGFmdGVyIGNyZWF0aW5nIHRoZSBkZXBlbmRlbmN5IGJldHdlZW4gdGhlIGNvbnRy b2xsZXIgZGV2aWNlIGFuZCBQSFkgdXNpbmcKPiA+IGRldmljZV9saW5rX2FkZCkuCj4gZXZlbiBi ZXR0ZXIgaWYgd2UgY2FuIHJlLXVzZSBzb21lIGV4aXN0aW5nIGNvZGUhCj4gCj4gdGhlIHBsYXRm b3JtIEkgYW0gd29ya2luZyBvbiAoNjQtYml0IEFtbG9naWMgTWVzb24gR1hML0dYTSkgZG9lcyBu b3QKPiBzdXBwb3J0IHN1c3BlbmQvcmVzdW1lIHlldCwgc28gdW5mb3J0dW5hdGVseSBJIGNhbm5v dCB0ZXN0IHRoaXMuCj4gYmVzaWRlcyB0aGF0IEkgaGF2ZSB6ZXJvIGV4cGVyaWVuY2Ugd2l0aCBz dXNwZW5kL3Jlc3VtZSBsb2dpYy4KPiAKPiBJJ2xsIHRyeSB0byByZWFkIG1vcmUgYWJvdXQgdGhh dCB0b3BpYywgYnV0IEkgZGVmaW5pdGVseSBuZWVkIHNvbWVvbmUKPiB3aG8gY291bGQgaGVscCB0 ZXN0aW5nIGlmIEkgaGF2ZSBhIHBhdGNoIHJlYWR5Cj4gaW4gYW55IGNhc2U6IEkgdGhpbmsgaW1w bGVtZW50aW5nIHRoaXMgc2hvdWxkIG5vdCBiZSBkb25lIGZvciB2NC4xNwo+IGFueW1vcmUgLSBt YXliZSB3ZSBjYW4gZmluZCBhIHNtYWxsIHNvbHV0aW9uIGZvciB2NC4xNyBhbmQgc3dpdGNoIHRv Cj4geW91ciBwcm9wb3NlZCBzb2x1dGlvbiBsYXRlciAoYXNzdW1pbmcgbm9ib2R5IGhhcyBhcmd1 bWVudHMgYWdhaW5zdAo+IHRoYXQpCj4gCkknbGwgdGVzdCBpdC4KClRoYW5rcwo+IAo+IFJlZ2Fy ZHMKPiBNYXJ0aW4KLS0tClRvIHVuc3Vic2NyaWJlIGZyb20gdGhpcyBsaXN0OiBzZW5kIHRoZSBs aW5lICJ1bnN1YnNjcmliZSBsaW51eC11c2IiIGluCnRoZSBib2R5IG9mIGEgbWVzc2FnZSB0byBt YWpvcmRvbW9Admdlci5rZXJuZWwub3JnCk1vcmUgbWFqb3Jkb21vIGluZm8gYXQgIGh0dHA6Ly92 Z2VyLmtlcm5lbC5vcmcvbWFqb3Jkb21vLWluZm8uaHRtbAo=