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: musb: Support gadget mode when the port is set to dual role From: Bin Liu Message-Id: <20190322132846.GD25852@uda0271908> Date: Fri, 22 Mar 2019 08:28:46 -0500 To: Maxime Ripard Cc: Greg Kroah-Hartman , Paul Kocialkowski , Paul Kocialkowski , linux-kernel@vger.kernel.org, linux-usb@vger.kernel.org, Chen-Yu Tsai List-ID: T24gRnJpLCBNYXIgMjIsIDIwMTkgYXQgMDI6MDk6NTNQTSArMDEwMCwgTWF4aW1lIFJpcGFyZCB3 cm90ZToKPiBPbiBGcmksIE1hciAyMiwgMjAxOSBhdCAwNzo0NjoyMkFNIC0wNTAwLCBCaW4gTGl1 IHdyb3RlOgo+ID4gT24gVGh1LCBNYXIgMjEsIDIwMTkgYXQgMDU6NDE6MzhQTSArMDEwMCwgR3Jl ZyBLcm9haC1IYXJ0bWFuIHdyb3RlOgo+ID4gPiBPbiBUaHUsIE1hciAyMSwgMjAxOSBhdCAwMjow MTozM1BNICswMTAwLCBNYXhpbWUgUmlwYXJkIHdyb3RlOgo+ID4gPiA+IEhpLAo+ID4gPiA+Cj4g PiA+ID4gSSdtIHJldml2aW5nIHRoaXMgdGhyZWFkIGEgYml0LCBiZWNhdXNlIEkgZW5jb3VudGVy ZWQgdGhpcyBidWcgdG9kYXkuCj4gPiA+ID4KPiA+ID4gPiBPbiBUaHUsIE1hciAyMSwgMjAxOSBh dCAxMTowMjoxMEFNICswMTAwLCBCaW4gTGl1IHdyb3RlOgo+ID4gPiA+ID4gT24gU2F0LCBBcHIg MjEsIDIwMTggYXQgMTI6NTk6MjNQTSArMDIwMCwgUGF1bCBLb2NpYWxrb3dza2kgd3JvdGU6Cj4g PiA+ID4gPiA+IEhpLAo+ID4gPiA+ID4gPgo+ID4gPiA+ID4gPiBMZSB2ZW5kcmVkaSAyMCBhdnJp bCAyMDE4IMOgIDA5OjI1IC0wNTAwLCBCaW4gTGl1IGEgw6ljcml0IDoKPiA+ID4gPiA+ID4gPiBP biBUaHUsIE1hciAyOSwgMjAxOCBhdCAwMTo1NzoyNFBNICswMjAwLCBQYXVsIEtvY2lhbGtvd3Nr aSB3cm90ZToKPiA+ID4gPiA+ID4gPiA+IEhpLAo+ID4gPiA+ID4gPiA+ID4KPiA+ID4gPiA+ID4g PiA+IE9uIFRodSwgMjAxOC0wMy0yOSBhdCAxMToyMyArMDIwMCwgTWF4aW1lIFJpcGFyZCB3cm90 ZToKPiA+ID4gPiA+ID4gPiA+ID4gT24gV2VkLCBNYXIgMjgsIDIwMTggYXQgMTE6NTI6MTNQTSAr MDIwMCwgUGF1bCBLb2NpYWxrb3dza2kgd3JvdGU6Cj4gPiA+ID4gPiA+ID4gPiA+ID4gVGhpcyBh bGxvd3MgZHVhbC1yb2xlIHBvcnRzIHRvIGJlIHJlcG9ydGVkIGFzIGhhdmluZyBnYWRnZXQgbW9k ZQo+ID4gPiA+ID4gPiA+ID4gPiA+IGJ5Cj4gPiA+ID4gPiA+ID4gPiA+ID4gdGhlCj4gPiA+ID4g PiA+ID4gPiA+ID4gbXVzYl9oYXNfZ2FkZ2V0IGhlbHBlci4gVGhpcyBpcyByZXF1aXJlZCB0byBl bmFibGUgTVVTQiBhdCBhbGwKPiA+ID4gPiA+ID4gPiA+ID4gPiB3aXRoCj4gPiA+ID4gPiA+ID4g PiA+ID4gTVVTQgo+ID4gPiA+ID4gPiA+ID4gPiA+IGdsdWUgbGF5ZXJzIHRoYXQgc2V0IHRoZSBw b3J0IG1vZGUgdG8gTVVTQl9QT1JUX01PREVfRFVBTF9ST0xFCj4gPiA+ID4gPiA+ID4gPiA+ID4g YXQKPiA+ID4gPiA+ID4gPiA+ID4gPiBpbml0Lgo+ID4gPiA+ID4gPiA+ID4gPiA+Cj4gPiA+ID4g PiA+ID4gPiA+ID4gTW9zdCBub3RhYmx5LCB0aGlzIGFsbG93cyBjYWxsaW5nIG11c2Jfc3RhcnQg d2hlbiBuZWVkZWQgaW4gdGhlCj4gPiA+ID4gPiA+ID4gPiA+ID4gdmlydHVhbAo+ID4gPiA+ID4g PiA+ID4gPiA+IE1VU0Igcm9vdCBIVUIsIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciB0aGUgY3VycmVu dCBtb2RlIHNob3VsZCBiZQo+ID4gPiA+ID4gPiA+ID4gPiA+IGdhZGdldAo+ID4gPiA+ID4gPiA+ ID4gPiA+IG9yIGhvc3QuCj4gPiA+ID4gPiA+ID4gPiA+ID4KPiA+ID4gPiA+ID4gPiA+ID4gPiBU aGlzIGZpeGVzIFVTQiBPVEcgb24gQWxsd2lubmVyIGRldmljZXMgdGhhdCBJIGNvdWxkIHRlc3Qg aXQKPiA+ID4gPiA+ID4gPiA+ID4gPiB3aXRoLAo+ID4gPiA+ID4gPiA+ID4gPiA+IG1haW5seSBB MjAgZGV2aWNlcy4KPiA+ID4gPiA+ID4gPiA+ID4gPgo+ID4gPiA+ID4gPiA+ID4gPiA+IFNpZ25l ZC1vZmYtYnk6IFBhdWwgS29jaWFsa293c2tpIDxjb250YWN0QHBhdWxrLmZyPgo+ID4gPiA+ID4g PiA+ID4gPgo+ID4gPiA+ID4gPiA+ID4gPiBTdXJlbHkgdGhlcmUncyBtb3JlIHRvIGl0IHRoYW4g dGhhdC4gVGhlIGdhZGdldCBtb2RlIG9mIEEyMCBib2FyZHMKPiA+ID4gPiA+ID4gPiA+ID4gaGF2 ZSBiZWVuIHdvcmtpbmcgaW4gdGhlIHBhc3QsIGluY2x1ZGluZyB3aGVuIGNvbXBpbGluZyB3aXRo IG1VU0IKPiA+ID4gPiA+ID4gPiA+ID4gc2V0dXAgYXMgZHVhbCByb2xlLgo+ID4gPiA+ID4gPiA+ ID4gPgo+ID4gPiA+ID4gPiA+ID4gPiBJcyB0aGlzIGEgcmVncmVzc2lvbiBzaW5jZSBhIHBhcnRp Y3VsYXIgY29tbWl0PyBPciBpcyB0aGVyZQo+ID4gPiA+ID4gPiA+ID4gPiBhbm90aGVyLAo+ID4g PiA+ID4gPiA+ID4gPiBkZWVwZXIgaXNzdWUgb3Zlcmxvb2tlZCBpbiB0aGUgY29tbWl0IGxvZz8K PiA+ID4gPiA+ID4gPiA+Cj4gPiA+ID4gPiA+ID4gPiBUaGUgcm9vdCBvZiB0aGUgaXNzdWUgaGVy ZSBpcyB0aGF0IG11c2Jfc3RhcnQgaXMgbm90IGNhbGxlZCBhdCBhbnkKPiA+ID4gPiA+ID4gPiA+ IHBvaW50Cj4gPiA+ID4gPiA+ID4gPiB3aXRob3V0IHRoaXMgcGF0Y2guIE15IHVuZGVyc3RhbmRp bmcgb2YgdGhlIGZsb3cgaXMgdGhlIGZvbGxvd2luZzoKPiA+ID4gPiA+ID4gPiA+IHdoZW4KPiA+ ID4gPiA+ID4gPiA+IHRoZSBQSFkgZGV0ZWN0cyB0aGF0IHRoZXJlIHdhcyBhIFZCVVMvSUQgY2hh bmdlLCBpdCB3aWxsIG5vdGlmeSBpdHMKPiA+ID4gPiA+ID4gPiA+IGxpc3RlbmVycyAobWFpbmx5 IHRoZSBtdXNiIHN1bnhpIGdsdWUgbGF5ZXIpLiBUaGlzIHdpbGwgdGhlbgo+ID4gPiA+ID4gPiA+ ID4gc2NoZWR1bGUKPiA+ID4gPiA+ID4gPiA+IHRoZSBkcml2ZXIncyB3b3JrIChzdW54aV9tdXNi X3dvcmspLCB3aGljaCBkb2VzIG5vdGhpbmcgc2luY2UgdGhlCj4gPiA+ID4gPiA+ID4gPiBTVU5Y SV9NVVNCX0ZMX0VOQUJMRUQgYml0IHdhcyBuZXZlciBzZXQuIFRoaXMgYml0IGlzIG9ubHkgc2V0 IGFmdGVyCj4gPiA+ID4gPiA+ID4gPiBjYWxsaW5nIHN1bnhpX211c2JfZW5hYmxlLCB3aGljaCBp cyBjYWxsZWQgZnJvbQo+ID4gPiA+ID4gPiA+ID4gbXVzYl9wbGF0Zm9ybV9lbmFibGUsCj4gPiA+ ID4gPiA+ID4gPiB0aGF0IG9yaWdpbmF0ZXMgZnJvbSBtdXNiX3N0YXJ0Lgo+ID4gPiA+ID4gPiA+ ID4KPiA+ID4gPiA+ID4gPiA+IEN1cnJlbnRseSBJIHNlZSB0d28gcGxhY2VzIHdoZXJlIG11c2Jf c3RhcnQgaXMgY2FsbGVkOgo+ID4gPiA+ID4gPiA+ID4gKiBtdXNiX3ZpcnRodWIKPiA+ID4gPiA+ ID4gPiA+ICogbXVzYl9nYWRnZXQKPiA+ID4gPiA+ID4gPiA+Cj4gPiA+ID4gPiA+ID4gPiBJbiB0 aGUgbGF0dGVyIGNhc2UsIGl0IGlzIGluIHR1cm4gY2FsbGVkIGZyb20gdWRjX3N0YXJ0LCB3aGlj aAo+ID4gPiA+ID4gPiA+ID4gc2hvdWxkCj4gPiA+ID4gPiA+ID4gPiBwcm9iYWJseSAoY29ycmVj dCBtZSBpZiBJJ20gd3JvbmcpIGhhcHBlbiBsYXRlciBpbiB0aGUgY2FsbCBjaGFpbgo+ID4gPiA+ ID4gPiA+ID4gdGhhbgo+ID4gPiA+ID4gPiA+ID4gSUQvVkJVUyBjaGFuZ2Ugbm90aWZpY2F0aW9u IHRpbWUuCj4gPiA+ID4gPiA+ID4KPiA+ID4gPiA+ID4gPiBJIGRvbid0IHRoaW5rIGl0IGlzIGNv cnJlY3QgdGhhdCB1ZGNfc3RhcnQoKSBpcyB0cmlnZ2VyZWQgYnkgSUQvVkJVUwo+ID4gPiA+ID4g PiA+IGV2ZW50cywgYnV0IEkgZG9uJ3QgaGF2ZSBhbiBBbGx3aW5uZXIgcGxhdGZvcm0gdG8gdmVy aWZ5IHRoZSBjYWxsZmxvdy4KPiA+ID4gPiA+ID4KPiA+ID4gPiA+ID4gWWVzIHlvdSdyZSByaWdo dCwgSSBkaWRuJ3QgbWFrZSBteXNlbGYgdmVyeSBjbGVhciBoZXJlLiBJIGRpZG4ndAo+ID4gPiA+ ID4gPiBpbnZlc3RpZ2F0ZSB0aGUgdWRjX3N0YXJ0IGNhbGwgcGF0aCBtdWNoIHNpbmNlIGl0IHdh cyBhcHBhcmVudGx5IG5vdCB0aGUKPiA+ID4gPiA+ID4gY3VscHJpdC4KPiA+ID4gPiA+ID4KPiA+ ID4gPiA+ID4gPiBIYXZlIHlvdSB0cmllZCB0byBsb2FkIHdpdGggYSBnYWRnZXQgZHJpdmVyPyBX aGVuIGEgZ2FkZ2V0IGZ1bmN0aW9uIGlzCj4gPiA+ID4gPiA+ID4gYm91bmQgdG8gVURDLCB1ZGNf c3RhcnQoKSBpcyB0cmlnZ2VyZWQsIHdoaWNoIGluIHR1cm4gY2FsbHMKPiA+ID4gPiA+ID4gPiBt dXNiX3N0YXJ0KCkuCj4gPiA+ID4gPiA+Cj4gPiA+ID4gPiA+IEl0IGRvZXMgd29yayB1bmRlciB0 aGF0IHNjZW5hcmlvLCBhbHRob3VnaCBteSB1c2VkIGNhc2UgaGVyZSBpcyB1c2luZwo+ID4gPiA+ ID4gPiBtdXNiIHdpdGggRFVBTF9ST0xFIGJ1dCBubyBnYWRnZXQgZHJpdmVyIGxvYWRlZC4gVGhh dCBpdCwgSSB3YW50IHRoZQo+ID4gPiA+ID4gPiBtdXNiX3N0YXJ0IGNhbGwgdG8gb3JpZ2luYXRl IGZyb20gdGhlIHZpcnR1YWwgaHViLCBub3QgZnJvbSB0aGUgZ2FkZ2V0Cj4gPiA+ID4gPiA+IHNp ZGUuCj4gPiA+ID4gPiA+Cj4gPiA+ID4gPiA+ID4gPiBJbiB0aGUgZm9ybWVyIGNhc2UsIG11c2Jf c3RhcnQgaXMgY2FsbGVkIGluIHRoZSByb290IGNvbnRyb2xsZXIgaHViCj4gPiA+ID4gPiA+ID4g PiBjb250cm9sLCB3aGVuIHNldHRpbmcgdGhlIFVTQl9QT1JUX0ZFQVRfUE9XRVIgZmVhdHVyZS4g VGhpcyBsb29rcwo+ID4gPiA+ID4gPiA+ID4gcGVyZmVjdGx5IGxlZ2l0IGFuZCBJTU8gdGhpcyBp cyB3aGVyZSBpdCBzaG91bGQgYmUgaW5pdGlhbGx5IGNhbGxpbmcKPiA+ID4gPiA+ID4gPiA+IG11 c2Jfc3RhcnQgaW4gdGhlIGR1YWwgcm9sZSBjYXNlLiBUaGUga2VybmVsIGlzIGluZGVlZCBzZXR0 aW5nIHRoZQo+ID4gPiA+ID4gPiA+Cj4gPiA+ID4gPiA+ID4gTm8gYWN0dWFsbHkuIEEgZHVhbC1y b2xlIHBvcnQgc2hvdWxkIGJlIGluIGJfaWRsZSBzdGF0ZSBieSBkZWZhdWx0LCBzbwo+ID4gPiA+ ID4gPiA+IGxvZ2ljYWxseSBhbGwgYWN0aW9ucyBzaG91bGQgZ28gdG8gdGhlIGdhZGdldCBwYXRo IHVudGlsIHRoZSBwb3J0Cj4gPiA+ID4gPiA+ID4gc3dpdGNoZXMgdG8gaG9zdCBtb2RlLgo+ID4g PiA+ID4gPgo+ID4gPiA+ID4gPiBJdCBtYWtlcyBzZW5zZSB0aGF0IHRoZSBwb3J0IHNob3VsZCBi ZSBpbiBiX2lkbGUgc3RhdGUgYnkgZGVmYXVsdCwgYnV0Cj4gPiA+ID4gPiA+IGhlcmUgaXQgZmFp bHMgdG8gc3dpdGNoIHRvIGhvc3QgbW9kZSB3aGVuIHRoZSBJRCBwaW4gZGV0ZWN0cyB0aGF0IGl0 Cj4gPiA+ID4gPiA+IHNob3VsZC4gT3IgZG9lcyBiX2lkbGUgc3RhdGUgZW50YWlsIHRoYXQgYSBn YWRnZXQgbXVzdCBiZSBsb2FkZWQgKHBlcgo+ID4gPiA+ID4gPiB0aGUgVVNCIHNwZWMpLCBhbmQg dGh1cyBub3RoaW5nIHNob3VsZCAoZXZlcikgaGFwcGVuIHVudGlsIHRoYXQgaGFwcGVucz8KPiA+ ID4gPiA+ID4KPiA+ID4gPiA+ID4gSSBmaW5kIGl0IHJlYWxseSBvZGQgdG8gbmVlZCBhIGdhZGdl dCBkZXZpY2UgdG8gdHJpZ2dlciBob3N0IG1vZGUuCj4gPiA+ID4gPiA+IFRoaXMgcGF0Y2ggZG9l cyBmaXggdGhlIGlzc3VlLCBidXQgSSBhbSBwdXp6bGVkIGFzIHRvIHdoeSBpdCBpcyBuZWVkZWQK PiA+ID4gPiA+ID4gaW4gdGhlIGZpcnN0IHBsYWNlLiBUaGUgY29tbWVudCBhYm92ZSBpdCBtZW50 aW9ucyB0aGF0ICJJbiBPVEcgbW9kZSB3ZQo+ID4gPiA+ID4gPiBoYXZlIHRvIHdhaXQgdW50aWwg d2UgbG9hZGVkIGEgZ2FkZ2V0LiBXZSBkb24ndCByZWFsbHkgbmVlZCBhIGdhZGdldCBpZgo+ID4g PiA+ID4gPiB3ZSBvcGVyYXRlIGFzIGEgaG9zdCBidXQgd2Ugc2hvdWxkIG5vdCBzdGFydCBhIHNl c3Npb24gYXMgYSBkZXZpY2UKPiA+ID4gPiA+ID4gd2l0aG91dCBhIGdhZGdldCBvciBlbHNlIHdl IGV4cGxvZGUuIiwgd2hpY2ggaXMgYXBwYXJlbnRseSBjb21wYXRpYmxlCj4gPiA+ID4gPiA+IHdp dGggbXkgdXNlIGNhc2U6IGEgZ2FkZ2V0IGlzIG5vdCByZWFsbHkgbmVlZGVkIGFuZCBJJ20gbm90 IHRyeWluZyB0bwo+ID4gPiA+ID4gPiBzdGFydCBhIHNlc3Npb24gYXMgYSBkZXZpY2Ugd2l0aG91 dCBhIGdhZGdldCBsb2FkZWQuCj4gPiA+ID4gPiA+Cj4gPiA+ID4gPiA+IFdoYXQgZG8geW91IHRo aW5rPwo+ID4gPiA+ID4KPiA+ID4gPiA+IE9rYXksIHRoaXMgY2FtZSBkb3duIHRvIGFuIGFyZ3Vt ZW50IHRoYXQgd2hldGhlciB3ZSBzaG91bGQgcmVxdWlyZQo+ID4gPiA+ID4gbG9hZGluZyBhIGdh ZGdldCBkcml2ZXIgb24gYSBkdWFsLXJvbGUgcG9ydCB0byB3b3JrIGluIGhvc3QgbW9kZSwKPiA+ ID4gPiA+IHdoaWNoIGlzIGN1cnJlbnRseSByZXF1aXJlZCBvbiBtdXNiIHNpbmNlIGEgbG9uZyBs b25nIHRpbWUgYWdvLgo+ID4gPiA+ID4KPiA+ID4gPiA+IEkgdW5kZXJzdGFuZCB0aGUgcmVxdWly ZW1lbnQgaXMga2luZGEgdW5uZWNlc3NhcnksIGJ1dCBzaW5jZSBpdCBhbHJlYWR5Cj4gPiA+ID4g PiBleGlzdHMgb24gbXVzYiBzdGFjayBmb3IgYSBsb25nIHRpbWUsIEkgZG9uJ3QgcGxhbiB0byBj aGFuZ2UgaXQuIEJlY2F1c2UgSQo+ID4gPiA+ID4gY2Fubm90IHRoaW5rIG9mIGEgdXNlIGNhc2Ug aW4gcmVhbCBwcm9kdWN0cyB0aGF0IGRvZXNuJ3QgYXV0b21hdGljYWxseQo+ID4gPiA+ID4gbG9h ZCBhIGdhZGdldCBmdW5jdGlvbiBvbiB0aGUgZHVhbC1yb2xlIHBvcnQuCj4gPiA+ID4gPgo+ID4g PiA+ID4gSWYgeW91IGNhbiBleHBsYWluIGEgdXNlIGNhc2UgaW4gcmVhbCB3b3JsZCAobm90IGEg ZW5naW5lZXJpbmcgbGFiKSB0aGF0Cj4gPiA+ID4gPiB0aGUgZ2FkZ2V0IGRyaXZlciB3aWxsIG5v dCBiZSBsb2FkZWQgYXQgbGludXggYm9vdGluZyB1cCwgYnV0IGxhdGVyCj4gPiA+ID4gPiBiYXNl ZCBvbiB1c2VyJ3MgaW5wdXQsIEkgd2lsbCByZWNvbnNpZGVyIG15IGRlY2lzaW9uLiBUbyByZW1v dmUgdGhpcwo+ID4gPiA+ID4gcmVxdWlyZW1lbnQgZnJvbSBtdXNiIHN0YWNrLCB0aGUgd29yayBp cyBtb3JlIHRoYW4gdGhpcyBwYXRjaC4KPiA+ID4gPgo+ID4gPiA+IEkgaGF2ZSBvbmUgZm9yIHlv dTogd2UncmUgd29ya2luZyBvbiBhIGRldmljZSB0aGF0IGJvb3RzIHByZXR0eSBmYXN0LAo+ID4g PiA+IGFuZCB0aGVyZWZvcmUgYXJlIHB1c2hpbmcgYXMgbXVjaCB0aGluZ3MgYXMgd2UgY2FuIHRv IG1vZHVsZXMuIEl0Cj4gPiA+ID4gaW5jbHVkZXMgZ2FkZ2V0cywgdGhlIG11c2IgZHJpdmVyIGFu ZCBnbHVlLCBldGMuIFRoYXQgZG9lc24ndCBzb3VuZAo+ID4gPiA+IHdheSB2ZXJ5IGRpZmZlcmVu dCBmcm9tIHdoYXQgYSBnZW5lcmljIGRpc3RybyB3b3VsZCBkbyBhcyB3ZWxsLgo+ID4gPiA+Cj4g PiA+ID4gQXQgYm9vdCwgdGhlIHZhcmlvdXMgbW9kdWxlcyBmb3IgdGhlIGhhcmR3YXJlIGFyZSBs b2FkZWQKPiA+ID4gPiBhdXRvbWF0aWNhbGx5OiB0aGUgbXVzYiBnbHVlLCB0aGUgbXVzYiBjb3Jl LCBvdXIgVVNCIFBIWSwgZXRjLiBXZSBlbmQKPiA+ID4gPiB1cCBpbiBhIHNpdHVhdGlvbiB3aGVy ZSB0aGUgbXVzYiBkcml2ZXIgaXMgbG9hZGVkIGFuZCByZXBvcnRlZCB0byB3b3JrCj4gPiA+ID4g cHJvcGVybHkuIFRoZSBVU0IgY2FibGUgdG8gdGhlIE9URyBwb3J0IChpbiBwZXJpcGhlcmFsKSBt aWdodCBvciBtaWdodAo+ID4gPiA+IG5vdCBiZSBjb25uZWN0ZWQsIGl0J3Mga2luZCBvZiBpcnJl bGV2YW50Lgo+ID4gPiA+Cj4gPiA+ID4gVGhlIGdhZGdldHMsIGhvd2V2ZXIsIGFyZSBub3QgbG9h ZGVkIGF1dG9tYXRpY2FsbHkuCj4gPiA+ID4KPiA+ID4gPiBOb3cgY29tZXMgYSB1c2VyIHRoYXQg d2FudHMgdG8gdXNlIG11c2IgYXMgYSBob3N0LCBhbmQgY29ubmVjdCBhCj4gPiA+ID4gcHJvcGVy IFVTQiBhZGFwdGVyLCB0aGF0IHdpcmVzIHRoZSBJRCBwaW4gcHJvcGVybHkuIEluIG91ciBjYXNl LCB0aGUKPiA+ID4gPiBwaHkgZGV0ZWN0cyBpdCwgcmVwb3J0cyB0aGUgbW9kZSBjaGFuZ2UsIGFu ZCAuLi4uIG5vdGhpbmcuCj4gPiA+ID4KPiA+ID4gPiBUaGF0IGRvZXNuJ3QgcmVhbGx5IGxvb2sg bGlrZSBhbiBlbmdpbmVlcmluZyBsYWIgc2V0dXAgdG8gbWUuCj4gPiA+Cj4gPiA+IEkgYWdyZWUs IHRoYXQgc291bmRzIGxpa2UgYSB2YWxpZCBzZXR1cC4KPiA+ID4KPiA+ID4gQWxzbyByZWFsaXpl IHRoYXQgQW5kcm9pZCBpcyBwdXNoaW5nIHRvIGhhdmUgYWxsIGRyaXZlcnMgYXMgbW9kdWxlcywg c28KPiA+ID4geW91IHdpbGwgc3RhcnQgdG8gc2VlIGEgd2hvbGUgbG90IG1vcmUgZGV2aWNlcyBv dXQgdGhlcmUgYmUgbW9kdWxhcgo+ID4gPiBpbnN0ZWFkIG9mIHN0YXRpY2FsbHkgYnVpbHQga2Vy bmVscy4gIFNvIGlzc3VlcyBsaWtlIHRoaXMgYXJlIGdvb2QgdG8KPiA+ID4gcmVzb2x2ZSA6KQo+ ID4KPiA+IFRoaXMgaXNzdWUgaGVyZSBpcyBub3QgcmVsYXRlZCB0byBidWlsZGluZyBhbGwgZHJp dmVycyBhcyBtb2R1bGVzLiBUb2RheQo+ID4gd2UgYWxyZWFkeSBoYXZlIGFsbCBtdXNiIHJlbGF0 ZWQgZHJpdmVycyBpbmNsdWRpbmcgZ2FkZ2V0IGRyaXZlcnMgaW4KPiA+IG1vZHVsZXMuCj4gPgo+ ID4gVGhlIGlzc3VlIGRpc2N1c3NlZCBoZXJlIGlzIHRoYXQgd2hlbiBtdXNiIGlzIGNvbmZpZ3Vy ZWQgaW4gZHVhbC1yb2xlCj4gPiBtb2RlIChkcl9tb2RlID0gJ290ZycgaW4gZHRzKSwgYSBnYWRn ZXQgZHJpdmVyIGhhcyB0byBiZSBib3VuZCB0byB0aGUKPiA+IHVkYyB0byBtYWtlIG11c2Igd29y a2luZyBpbiBob3N0IG1vZGUuCj4gPgo+ID4gSSBuZXZlciBkaXNhZ3JlZSBpdCBpcyBub3QgaWRl YWwsIGJ1dCBJIGNvbnNpZGVyIGl0IGlzIG1pbm9yIC0gc2luY2UgdGhlCj4gPiBwb3J0IGlzIGNv bmZpZ3VyZWQgdG8gZHVhbC1yb2xlIG1vZGUsIGl0IGlzIGludGVuZGVkIHRvIHdvcmsgaW4KPiA+ IHBlcmlwaGVyYWwgbW9kZSwgdGhlbiB3aHkgbm90IGF1dG9tYXRpY2FsbHkgbG9hZCB0aGUgZ2Fk Z2V0IGRyaXZlciB3aGVuCj4gPiBsaW51eCBib290cyB1cC4KCkFnYWluLCB0aGluayBhYm91dCBh biBlbWJlZGRlZCBwcm9kdWN0LCBpZiBkcl9tb2RlIGlzICdvdGcnIHdoaWNoCmluZGljYXRlcyB0 aGUgcGVyaXBoZXJhbCBtb2RlIHdpbGwgYmUgdXNlZCBhdCBzb21lIHBvaW50LCB3aGVuIGFuZCBo b3cKdG8gbG9hZCB0aGUgZ2FkZ2V0IGRyaXZlciBpZiBpdCBpcyBub3QgbG9hZGVkIGF1dG9tYXRp Y2FsbHkgd2hlbiBMaW51eApib290cyB1cD8gdGhlIGVuZCB1c2VyIGRvZXNuJ3QgaGF2ZSBhY2Nl c3MgdG8gdGhlIGNvbnNvbGUuCgo+IEJlY2F1c2Ugbm8gb3RoZXIgY29udHJvbGxlciByZXF1aXJl cyBpdCBhbmQgdGhlcmVmb3JlIGl0J3Mgbm90Cj4gc3RhbmRhcmQgYW5kIHZpb2xhdGVzIHRoZSBw cmluY2lwbGUgb2YgbGVhc3Qgc3VycHJpc2U/CgpJIGtub3cgbm8gb3RoZXIgY29udHJvbGxlciBk b2VzIHRoaXMsIGJ1dCB0aGlzIGRvZXNuJ3QgbWVhbiBpdCBpcyBub3QKc3RhbmRhcmQuCgo+IEFu ZCBldmVuIHdpdGhvdXQgdGFraW5nIHRoaXMgaW50byBhY2NvdW50LCB0aGVyZSdzIGFsc28gdGhl IGZhY3QgdGhhdAo+IHdoaWxlIHRoZSAqaGFyZHdhcmUqIGNhbiBkbyBkdWFsIHJvbGUsIHRoZSBz b2Z0d2FyZSBtaWdodCBkZWNpZGUKPiBvdGhlcndpc2UuIElmIEkgZG9uJ3Qgd2FudCB0byBoYXZl IHN1cHBvcnQgZm9yIGFueSBnYWRnZXQgKGF0IGFsbCkgaW4KPiB0aGUgZW5kIHN5c3RlbSwgdGhl biB3aHkgc2hvdWxkIEkgYmUgZm9yY2VkIHRvIGNvbXBpbGUgYW5kIGxvYWQKPiBzb21ldGhpbmcg SSBkb24ndCBldmVuIHdhbnQgdG8gdXNlIGluIHRoZSBmaXJzdCBwbGFjZT8KCnRoZW4gZHJfbW9k ZSBzaG91bGQgYmUgc2V0IHRvICdob3N0JyBpbnN0ZWFkLCB5b3UgZG9uJ3QgaGF2ZSB0byBsb2Fk IGEKZ2FkZ2V0IGlmIHBlcmlwaGVyYWwgbW9kZSB3aWxsIG5ldmVyIGJlIHVzZWQuCgo+IFRoZSBz YW1lIHN0b3J5IGdvZXMgd2l0aCBjb2xkIGJvb3Rpbmcgd2l0aCBhIGRldmljZSBwbHVnZ2VkIGlu LCBhbmQKPiB0aGVyZWZvcmUgYWN0aW5nIGFzIGEgaG9zdCBmcm9tIHRoZSB2ZXJ5IGJlZ2lubmlu Zy4gSXQgd2lsbCBuZXZlciBldmVyCj4gYmUgY29uZmlndXJlZCBhcyBhIHBlcmlwaGVyYWwsIGV2 ZW4gdGhvdWdoIHlvdSBtaWdodCBoYXZlIGxvYWRlZCBhCj4gbW9kdWxlLgoKSSBkb24ndCB1bmRl cnN0YW5kIHRoZSBwcm9ibGVtIGluIHRoaXMgY2FzZSAtIHdpbGwgdGhlIGRldmljZSBldmVyIGJl CnJlbW92ZWQ/IHdpbGwgdGhlIHBvcnQgZXZlciBiZSB1c2VkIGluIHBlcmlwaGVyYWwgbW9kZT8g SWYgc28sIHRoZQpnYWRnZXQgZHJpdmVyIHdpbGwgYmUgbmVlZGVkLiBJZiBub3QsIGRyX21vZGUg c2hvdWxkIGJlICdob3N0JyB0aGVuIGEKZ2FkZ2V0IGRyaXZlciBpcyBub3QgbmVlZGVkLgoKPiA+ IFRvIHN1bW1hcmllcyBteSBjb21tZW50cyBvbiB0aGlzIGFnYWluLCBzaW5jZSBpdCBpcyBtaW5v ciBpbiBteSBvcGluaW9uLAo+ID4gSSB3b24ndCBzcGVuZCB0aW1lIHRvIHNvbHZlIGl0IG15c2Vs ZiAoaW4gYSBuZWFyIGZ1dHVyZSksIGJ1dCBJIGFtIG1vcmUKPiA+IHRoYW4gaGFwcHkgdG8gcmV2 aWV3IGFuZCB0YWtlIGFueSBwYXRjaCB3aGljaCBzb2x2ZSBpdC4KPiAKPiBQYXVsIHByb3ZpZGVk IGEgcGF0Y2ggdGhhdCBzdGFydGVkIHRoaXMgZGlzY3Vzc2lvbi4gWW91IG1lbnRpb25uZWQKPiB0 aGF0IGl0J3Mgbm90IGVub3VnaCBhbmQgb3RoZXIgcGFydHMgc2hvdWxkIGJlIG1pc3NpbmcuIFdo YXQgYXJlCj4gdGhvc2U/CgpUaGUgcHJldmlvdXMgZGlzY3Vzc2lvbiBoYXMgYmVlbiBhIHdoaWxl IGFnbywgYnV0IEkgcmV2aWV3ZCB0aGUgdGhyZWFkCmFnYWluLCBhdCBsZWFzdCBJIG1lbnRpb25l ZCBtdXNiX3N0YXJ0KCkgd2lsbCBiZSBjYWxsZWQgdHdpY2Ugd2l0aCB0aGlzCnBhdGNoLCBmaXJz dCBieSB0aGlzIHBhdGNoLCB0aGVuIHdoZW4gYSBnYWRnZXQgZHJpdmVyIGlzIGJvdW5kLgoKUmVn YXJkcywKLUJpbi4K