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: <20190322124622.GB25852@uda0271908> Date: Fri, 22 Mar 2019 07:46:22 -0500 To: Greg Kroah-Hartman Cc: Maxime Ripard , Paul Kocialkowski , Paul Kocialkowski , linux-kernel@vger.kernel.org, linux-usb@vger.kernel.org, Chen-Yu Tsai List-ID: T24gVGh1LCBNYXIgMjEsIDIwMTkgYXQgMDU6NDE6MzhQTSArMDEwMCwgR3JlZyBLcm9haC1IYXJ0 bWFuIHdyb3RlOgo+IE9uIFRodSwgTWFyIDIxLCAyMDE5IGF0IDAyOjAxOjMzUE0gKzAxMDAsIE1h eGltZSBSaXBhcmQgd3JvdGU6Cj4gPiBIaSwKPiA+IAo+ID4gSSdtIHJldml2aW5nIHRoaXMgdGhy ZWFkIGEgYml0LCBiZWNhdXNlIEkgZW5jb3VudGVyZWQgdGhpcyBidWcgdG9kYXkuCj4gPiAKPiA+ IE9uIFRodSwgTWFyIDIxLCAyMDE5IGF0IDExOjAyOjEwQU0gKzAxMDAsIEJpbiBMaXUgd3JvdGU6 Cj4gPiA+IE9uIFNhdCwgQXByIDIxLCAyMDE4IGF0IDEyOjU5OjIzUE0gKzAyMDAsIFBhdWwgS29j aWFsa293c2tpIHdyb3RlOgo+ID4gPiA+IEhpLAo+ID4gPiA+Cj4gPiA+ID4gTGUgdmVuZHJlZGkg MjAgYXZyaWwgMjAxOCDDoCAwOToyNSAtMDUwMCwgQmluIExpdSBhIMOpY3JpdCA6Cj4gPiA+ID4g PiBPbiBUaHUsIE1hciAyOSwgMjAxOCBhdCAwMTo1NzoyNFBNICswMjAwLCBQYXVsIEtvY2lhbGtv d3NraSB3cm90ZToKPiA+ID4gPiA+ID4gSGksCj4gPiA+ID4gPiA+Cj4gPiA+ID4gPiA+IE9uIFRo dSwgMjAxOC0wMy0yOSBhdCAxMToyMyArMDIwMCwgTWF4aW1lIFJpcGFyZCB3cm90ZToKPiA+ID4g PiA+ID4gPiBPbiBXZWQsIE1hciAyOCwgMjAxOCBhdCAxMTo1MjoxM1BNICswMjAwLCBQYXVsIEtv Y2lhbGtvd3NraSB3cm90ZToKPiA+ID4gPiA+ID4gPiA+IFRoaXMgYWxsb3dzIGR1YWwtcm9sZSBw b3J0cyB0byBiZSByZXBvcnRlZCBhcyBoYXZpbmcgZ2FkZ2V0IG1vZGUKPiA+ID4gPiA+ID4gPiA+ IGJ5Cj4gPiA+ID4gPiA+ID4gPiB0aGUKPiA+ID4gPiA+ID4gPiA+IG11c2JfaGFzX2dhZGdldCBo ZWxwZXIuIFRoaXMgaXMgcmVxdWlyZWQgdG8gZW5hYmxlIE1VU0IgYXQgYWxsCj4gPiA+ID4gPiA+ ID4gPiB3aXRoCj4gPiA+ID4gPiA+ID4gPiBNVVNCCj4gPiA+ID4gPiA+ID4gPiBnbHVlIGxheWVy cyB0aGF0IHNldCB0aGUgcG9ydCBtb2RlIHRvIE1VU0JfUE9SVF9NT0RFX0RVQUxfUk9MRQo+ID4g PiA+ID4gPiA+ID4gYXQKPiA+ID4gPiA+ID4gPiA+IGluaXQuCj4gPiA+ID4gPiA+ID4gPgo+ID4g PiA+ID4gPiA+ID4gTW9zdCBub3RhYmx5LCB0aGlzIGFsbG93cyBjYWxsaW5nIG11c2Jfc3RhcnQg d2hlbiBuZWVkZWQgaW4gdGhlCj4gPiA+ID4gPiA+ID4gPiB2aXJ0dWFsCj4gPiA+ID4gPiA+ID4g PiBNVVNCIHJvb3QgSFVCLCByZWdhcmRsZXNzIG9mIHdoZXRoZXIgdGhlIGN1cnJlbnQgbW9kZSBz aG91bGQgYmUKPiA+ID4gPiA+ID4gPiA+IGdhZGdldAo+ID4gPiA+ID4gPiA+ID4gb3IgaG9zdC4K PiA+ID4gPiA+ID4gPiA+Cj4gPiA+ID4gPiA+ID4gPiBUaGlzIGZpeGVzIFVTQiBPVEcgb24gQWxs d2lubmVyIGRldmljZXMgdGhhdCBJIGNvdWxkIHRlc3QgaXQKPiA+ID4gPiA+ID4gPiA+IHdpdGgs Cj4gPiA+ID4gPiA+ID4gPiBtYWlubHkgQTIwIGRldmljZXMuCj4gPiA+ID4gPiA+ID4gPgo+ID4g PiA+ID4gPiA+ID4gU2lnbmVkLW9mZi1ieTogUGF1bCBLb2NpYWxrb3dza2kgPGNvbnRhY3RAcGF1 bGsuZnI+Cj4gPiA+ID4gPiA+ID4KPiA+ID4gPiA+ID4gPiBTdXJlbHkgdGhlcmUncyBtb3JlIHRv IGl0IHRoYW4gdGhhdC4gVGhlIGdhZGdldCBtb2RlIG9mIEEyMCBib2FyZHMKPiA+ID4gPiA+ID4g PiBoYXZlIGJlZW4gd29ya2luZyBpbiB0aGUgcGFzdCwgaW5jbHVkaW5nIHdoZW4gY29tcGlsaW5n IHdpdGggbVVTQgo+ID4gPiA+ID4gPiA+IHNldHVwIGFzIGR1YWwgcm9sZS4KPiA+ID4gPiA+ID4g Pgo+ID4gPiA+ID4gPiA+IElzIHRoaXMgYSByZWdyZXNzaW9uIHNpbmNlIGEgcGFydGljdWxhciBj b21taXQ/IE9yIGlzIHRoZXJlCj4gPiA+ID4gPiA+ID4gYW5vdGhlciwKPiA+ID4gPiA+ID4gPiBk ZWVwZXIgaXNzdWUgb3Zlcmxvb2tlZCBpbiB0aGUgY29tbWl0IGxvZz8KPiA+ID4gPiA+ID4KPiA+ ID4gPiA+ID4gVGhlIHJvb3Qgb2YgdGhlIGlzc3VlIGhlcmUgaXMgdGhhdCBtdXNiX3N0YXJ0IGlz IG5vdCBjYWxsZWQgYXQgYW55Cj4gPiA+ID4gPiA+IHBvaW50Cj4gPiA+ID4gPiA+IHdpdGhvdXQg dGhpcyBwYXRjaC4gTXkgdW5kZXJzdGFuZGluZyBvZiB0aGUgZmxvdyBpcyB0aGUgZm9sbG93aW5n Ogo+ID4gPiA+ID4gPiB3aGVuCj4gPiA+ID4gPiA+IHRoZSBQSFkgZGV0ZWN0cyB0aGF0IHRoZXJl IHdhcyBhIFZCVVMvSUQgY2hhbmdlLCBpdCB3aWxsIG5vdGlmeSBpdHMKPiA+ID4gPiA+ID4gbGlz dGVuZXJzIChtYWlubHkgdGhlIG11c2Igc3VueGkgZ2x1ZSBsYXllcikuIFRoaXMgd2lsbCB0aGVu Cj4gPiA+ID4gPiA+IHNjaGVkdWxlCj4gPiA+ID4gPiA+IHRoZSBkcml2ZXIncyB3b3JrIChzdW54 aV9tdXNiX3dvcmspLCB3aGljaCBkb2VzIG5vdGhpbmcgc2luY2UgdGhlCj4gPiA+ID4gPiA+IFNV TlhJX01VU0JfRkxfRU5BQkxFRCBiaXQgd2FzIG5ldmVyIHNldC4gVGhpcyBiaXQgaXMgb25seSBz ZXQgYWZ0ZXIKPiA+ID4gPiA+ID4gY2FsbGluZyBzdW54aV9tdXNiX2VuYWJsZSwgd2hpY2ggaXMg Y2FsbGVkIGZyb20KPiA+ID4gPiA+ID4gbXVzYl9wbGF0Zm9ybV9lbmFibGUsCj4gPiA+ID4gPiA+ IHRoYXQgb3JpZ2luYXRlcyBmcm9tIG11c2Jfc3RhcnQuCj4gPiA+ID4gPiA+Cj4gPiA+ID4gPiA+ IEN1cnJlbnRseSBJIHNlZSB0d28gcGxhY2VzIHdoZXJlIG11c2Jfc3RhcnQgaXMgY2FsbGVkOgo+ ID4gPiA+ID4gPiAqIG11c2JfdmlydGh1Ygo+ID4gPiA+ID4gPiAqIG11c2JfZ2FkZ2V0Cj4gPiA+ ID4gPiA+Cj4gPiA+ID4gPiA+IEluIHRoZSBsYXR0ZXIgY2FzZSwgaXQgaXMgaW4gdHVybiBjYWxs ZWQgZnJvbSB1ZGNfc3RhcnQsIHdoaWNoCj4gPiA+ID4gPiA+IHNob3VsZAo+ID4gPiA+ID4gPiBw cm9iYWJseSAoY29ycmVjdCBtZSBpZiBJJ20gd3JvbmcpIGhhcHBlbiBsYXRlciBpbiB0aGUgY2Fs bCBjaGFpbgo+ID4gPiA+ID4gPiB0aGFuCj4gPiA+ID4gPiA+IElEL1ZCVVMgY2hhbmdlIG5vdGlm aWNhdGlvbiB0aW1lLgo+ID4gPiA+ID4KPiA+ID4gPiA+IEkgZG9uJ3QgdGhpbmsgaXQgaXMgY29y cmVjdCB0aGF0IHVkY19zdGFydCgpIGlzIHRyaWdnZXJlZCBieSBJRC9WQlVTCj4gPiA+ID4gPiBl dmVudHMsIGJ1dCBJIGRvbid0IGhhdmUgYW4gQWxsd2lubmVyIHBsYXRmb3JtIHRvIHZlcmlmeSB0 aGUgY2FsbGZsb3cuCj4gPiA+ID4KPiA+ID4gPiBZZXMgeW91J3JlIHJpZ2h0LCBJIGRpZG4ndCBt YWtlIG15c2VsZiB2ZXJ5IGNsZWFyIGhlcmUuIEkgZGlkbid0Cj4gPiA+ID4gaW52ZXN0aWdhdGUg dGhlIHVkY19zdGFydCBjYWxsIHBhdGggbXVjaCBzaW5jZSBpdCB3YXMgYXBwYXJlbnRseSBub3Qg dGhlCj4gPiA+ID4gY3VscHJpdC4KPiA+ID4gPgo+ID4gPiA+ID4gSGF2ZSB5b3UgdHJpZWQgdG8g bG9hZCB3aXRoIGEgZ2FkZ2V0IGRyaXZlcj8gV2hlbiBhIGdhZGdldCBmdW5jdGlvbiBpcwo+ID4g PiA+ID4gYm91bmQgdG8gVURDLCB1ZGNfc3RhcnQoKSBpcyB0cmlnZ2VyZWQsIHdoaWNoIGluIHR1 cm4gY2FsbHMKPiA+ID4gPiA+IG11c2Jfc3RhcnQoKS4KPiA+ID4gPgo+ID4gPiA+IEl0IGRvZXMg d29yayB1bmRlciB0aGF0IHNjZW5hcmlvLCBhbHRob3VnaCBteSB1c2VkIGNhc2UgaGVyZSBpcyB1 c2luZwo+ID4gPiA+IG11c2Igd2l0aCBEVUFMX1JPTEUgYnV0IG5vIGdhZGdldCBkcml2ZXIgbG9h ZGVkLiBUaGF0IGl0LCBJIHdhbnQgdGhlCj4gPiA+ID4gbXVzYl9zdGFydCBjYWxsIHRvIG9yaWdp bmF0ZSBmcm9tIHRoZSB2aXJ0dWFsIGh1Yiwgbm90IGZyb20gdGhlIGdhZGdldAo+ID4gPiA+IHNp ZGUuCj4gPiA+ID4KPiA+ID4gPiA+ID4gSW4gdGhlIGZvcm1lciBjYXNlLCBtdXNiX3N0YXJ0IGlz IGNhbGxlZCBpbiB0aGUgcm9vdCBjb250cm9sbGVyIGh1Ygo+ID4gPiA+ID4gPiBjb250cm9sLCB3 aGVuIHNldHRpbmcgdGhlIFVTQl9QT1JUX0ZFQVRfUE9XRVIgZmVhdHVyZS4gVGhpcyBsb29rcwo+ ID4gPiA+ID4gPiBwZXJmZWN0bHkgbGVnaXQgYW5kIElNTyB0aGlzIGlzIHdoZXJlIGl0IHNob3Vs ZCBiZSBpbml0aWFsbHkgY2FsbGluZwo+ID4gPiA+ID4gPiBtdXNiX3N0YXJ0IGluIHRoZSBkdWFs IHJvbGUgY2FzZS4gVGhlIGtlcm5lbCBpcyBpbmRlZWQgc2V0dGluZyB0aGUKPiA+ID4gPiA+Cj4g PiA+ID4gPiBObyBhY3R1YWxseS4gQSBkdWFsLXJvbGUgcG9ydCBzaG91bGQgYmUgaW4gYl9pZGxl IHN0YXRlIGJ5IGRlZmF1bHQsIHNvCj4gPiA+ID4gPiBsb2dpY2FsbHkgYWxsIGFjdGlvbnMgc2hv dWxkIGdvIHRvIHRoZSBnYWRnZXQgcGF0aCB1bnRpbCB0aGUgcG9ydAo+ID4gPiA+ID4gc3dpdGNo ZXMgdG8gaG9zdCBtb2RlLgo+ID4gPiA+Cj4gPiA+ID4gSXQgbWFrZXMgc2Vuc2UgdGhhdCB0aGUg cG9ydCBzaG91bGQgYmUgaW4gYl9pZGxlIHN0YXRlIGJ5IGRlZmF1bHQsIGJ1dAo+ID4gPiA+IGhl cmUgaXQgZmFpbHMgdG8gc3dpdGNoIHRvIGhvc3QgbW9kZSB3aGVuIHRoZSBJRCBwaW4gZGV0ZWN0 cyB0aGF0IGl0Cj4gPiA+ID4gc2hvdWxkLiBPciBkb2VzIGJfaWRsZSBzdGF0ZSBlbnRhaWwgdGhh dCBhIGdhZGdldCBtdXN0IGJlIGxvYWRlZCAocGVyCj4gPiA+ID4gdGhlIFVTQiBzcGVjKSwgYW5k IHRodXMgbm90aGluZyBzaG91bGQgKGV2ZXIpIGhhcHBlbiB1bnRpbCB0aGF0IGhhcHBlbnM/Cj4g PiA+ID4KPiA+ID4gPiBJIGZpbmQgaXQgcmVhbGx5IG9kZCB0byBuZWVkIGEgZ2FkZ2V0IGRldmlj ZSB0byB0cmlnZ2VyIGhvc3QgbW9kZS4KPiA+ID4gPiBUaGlzIHBhdGNoIGRvZXMgZml4IHRoZSBp c3N1ZSwgYnV0IEkgYW0gcHV6emxlZCBhcyB0byB3aHkgaXQgaXMgbmVlZGVkCj4gPiA+ID4gaW4g dGhlIGZpcnN0IHBsYWNlLiBUaGUgY29tbWVudCBhYm92ZSBpdCBtZW50aW9ucyB0aGF0ICJJbiBP VEcgbW9kZSB3ZQo+ID4gPiA+IGhhdmUgdG8gd2FpdCB1bnRpbCB3ZSBsb2FkZWQgYSBnYWRnZXQu IFdlIGRvbid0IHJlYWxseSBuZWVkIGEgZ2FkZ2V0IGlmCj4gPiA+ID4gd2Ugb3BlcmF0ZSBhcyBh IGhvc3QgYnV0IHdlIHNob3VsZCBub3Qgc3RhcnQgYSBzZXNzaW9uIGFzIGEgZGV2aWNlCj4gPiA+ ID4gd2l0aG91dCBhIGdhZGdldCBvciBlbHNlIHdlIGV4cGxvZGUuIiwgd2hpY2ggaXMgYXBwYXJl bnRseSBjb21wYXRpYmxlCj4gPiA+ID4gd2l0aCBteSB1c2UgY2FzZTogYSBnYWRnZXQgaXMgbm90 IHJlYWxseSBuZWVkZWQgYW5kIEknbSBub3QgdHJ5aW5nIHRvCj4gPiA+ID4gc3RhcnQgYSBzZXNz aW9uIGFzIGEgZGV2aWNlIHdpdGhvdXQgYSBnYWRnZXQgbG9hZGVkLgo+ID4gPiA+Cj4gPiA+ID4g V2hhdCBkbyB5b3UgdGhpbms/Cj4gPiA+Cj4gPiA+IE9rYXksIHRoaXMgY2FtZSBkb3duIHRvIGFu IGFyZ3VtZW50IHRoYXQgd2hldGhlciB3ZSBzaG91bGQgcmVxdWlyZQo+ID4gPiBsb2FkaW5nIGEg Z2FkZ2V0IGRyaXZlciBvbiBhIGR1YWwtcm9sZSBwb3J0IHRvIHdvcmsgaW4gaG9zdCBtb2RlLAo+ ID4gPiB3aGljaCBpcyBjdXJyZW50bHkgcmVxdWlyZWQgb24gbXVzYiBzaW5jZSBhIGxvbmcgbG9u ZyB0aW1lIGFnby4KPiA+ID4KPiA+ID4gSSB1bmRlcnN0YW5kIHRoZSByZXF1aXJlbWVudCBpcyBr aW5kYSB1bm5lY2Vzc2FyeSwgYnV0IHNpbmNlIGl0IGFscmVhZHkKPiA+ID4gZXhpc3RzIG9uIG11 c2Igc3RhY2sgZm9yIGEgbG9uZyB0aW1lLCBJIGRvbid0IHBsYW4gdG8gY2hhbmdlIGl0LiBCZWNh dXNlIEkKPiA+ID4gY2Fubm90IHRoaW5rIG9mIGEgdXNlIGNhc2UgaW4gcmVhbCBwcm9kdWN0cyB0 aGF0IGRvZXNuJ3QgYXV0b21hdGljYWxseQo+ID4gPiBsb2FkIGEgZ2FkZ2V0IGZ1bmN0aW9uIG9u IHRoZSBkdWFsLXJvbGUgcG9ydC4KPiA+ID4KPiA+ID4gSWYgeW91IGNhbiBleHBsYWluIGEgdXNl IGNhc2UgaW4gcmVhbCB3b3JsZCAobm90IGEgZW5naW5lZXJpbmcgbGFiKSB0aGF0Cj4gPiA+IHRo ZSBnYWRnZXQgZHJpdmVyIHdpbGwgbm90IGJlIGxvYWRlZCBhdCBsaW51eCBib290aW5nIHVwLCBi dXQgbGF0ZXIKPiA+ID4gYmFzZWQgb24gdXNlcidzIGlucHV0LCBJIHdpbGwgcmVjb25zaWRlciBt eSBkZWNpc2lvbi4gVG8gcmVtb3ZlIHRoaXMKPiA+ID4gcmVxdWlyZW1lbnQgZnJvbSBtdXNiIHN0 YWNrLCB0aGUgd29yayBpcyBtb3JlIHRoYW4gdGhpcyBwYXRjaC4KPiA+IAo+ID4gSSBoYXZlIG9u ZSBmb3IgeW91OiB3ZSdyZSB3b3JraW5nIG9uIGEgZGV2aWNlIHRoYXQgYm9vdHMgcHJldHR5IGZh c3QsCj4gPiBhbmQgdGhlcmVmb3JlIGFyZSBwdXNoaW5nIGFzIG11Y2ggdGhpbmdzIGFzIHdlIGNh biB0byBtb2R1bGVzLiBJdAo+ID4gaW5jbHVkZXMgZ2FkZ2V0cywgdGhlIG11c2IgZHJpdmVyIGFu ZCBnbHVlLCBldGMuIFRoYXQgZG9lc24ndCBzb3VuZAo+ID4gd2F5IHZlcnkgZGlmZmVyZW50IGZy b20gd2hhdCBhIGdlbmVyaWMgZGlzdHJvIHdvdWxkIGRvIGFzIHdlbGwuCj4gPiAKPiA+IEF0IGJv b3QsIHRoZSB2YXJpb3VzIG1vZHVsZXMgZm9yIHRoZSBoYXJkd2FyZSBhcmUgbG9hZGVkCj4gPiBh dXRvbWF0aWNhbGx5OiB0aGUgbXVzYiBnbHVlLCB0aGUgbXVzYiBjb3JlLCBvdXIgVVNCIFBIWSwg ZXRjLiBXZSBlbmQKPiA+IHVwIGluIGEgc2l0dWF0aW9uIHdoZXJlIHRoZSBtdXNiIGRyaXZlciBp cyBsb2FkZWQgYW5kIHJlcG9ydGVkIHRvIHdvcmsKPiA+IHByb3Blcmx5LiBUaGUgVVNCIGNhYmxl IHRvIHRoZSBPVEcgcG9ydCAoaW4gcGVyaXBoZXJhbCkgbWlnaHQgb3IgbWlnaHQKPiA+IG5vdCBi ZSBjb25uZWN0ZWQsIGl0J3Mga2luZCBvZiBpcnJlbGV2YW50Lgo+ID4gCj4gPiBUaGUgZ2FkZ2V0 cywgaG93ZXZlciwgYXJlIG5vdCBsb2FkZWQgYXV0b21hdGljYWxseS4KPiA+IAo+ID4gTm93IGNv bWVzIGEgdXNlciB0aGF0IHdhbnRzIHRvIHVzZSBtdXNiIGFzIGEgaG9zdCwgYW5kIGNvbm5lY3Qg YQo+ID4gcHJvcGVyIFVTQiBhZGFwdGVyLCB0aGF0IHdpcmVzIHRoZSBJRCBwaW4gcHJvcGVybHku IEluIG91ciBjYXNlLCB0aGUKPiA+IHBoeSBkZXRlY3RzIGl0LCByZXBvcnRzIHRoZSBtb2RlIGNo YW5nZSwgYW5kIC4uLi4gbm90aGluZy4KPiA+IAo+ID4gVGhhdCBkb2Vzbid0IHJlYWxseSBsb29r IGxpa2UgYW4gZW5naW5lZXJpbmcgbGFiIHNldHVwIHRvIG1lLgo+IAo+IEkgYWdyZWUsIHRoYXQg c291bmRzIGxpa2UgYSB2YWxpZCBzZXR1cC4KPiAKPiBBbHNvIHJlYWxpemUgdGhhdCBBbmRyb2lk IGlzIHB1c2hpbmcgdG8gaGF2ZSBhbGwgZHJpdmVycyBhcyBtb2R1bGVzLCBzbwo+IHlvdSB3aWxs IHN0YXJ0IHRvIHNlZSBhIHdob2xlIGxvdCBtb3JlIGRldmljZXMgb3V0IHRoZXJlIGJlIG1vZHVs YXIKPiBpbnN0ZWFkIG9mIHN0YXRpY2FsbHkgYnVpbHQga2VybmVscy4gIFNvIGlzc3VlcyBsaWtl IHRoaXMgYXJlIGdvb2QgdG8KPiByZXNvbHZlIDopCgpUaGlzIGlzc3VlIGhlcmUgaXMgbm90IHJl bGF0ZWQgdG8gYnVpbGRpbmcgYWxsIGRyaXZlcnMgYXMgbW9kdWxlcy4gVG9kYXkKd2UgYWxyZWFk eSBoYXZlIGFsbCBtdXNiIHJlbGF0ZWQgZHJpdmVycyBpbmNsdWRpbmcgZ2FkZ2V0IGRyaXZlcnMg aW4KbW9kdWxlcy4KClRoZSBpc3N1ZSBkaXNjdXNzZWQgaGVyZSBpcyB0aGF0IHdoZW4gbXVzYiBp cyBjb25maWd1cmVkIGluIGR1YWwtcm9sZQptb2RlIChkcl9tb2RlID0gJ290ZycgaW4gZHRzKSwg YSBnYWRnZXQgZHJpdmVyIGhhcyB0byBiZSBib3VuZCB0byB0aGUKdWRjIHRvIG1ha2UgbXVzYiB3 b3JraW5nIGluIGhvc3QgbW9kZS4KCkkgbmV2ZXIgZGlzYWdyZWUgaXQgaXMgbm90IGlkZWFsLCBi dXQgSSBjb25zaWRlciBpdCBpcyBtaW5vciAtIHNpbmNlIHRoZQpwb3J0IGlzIGNvbmZpZ3VyZWQg dG8gZHVhbC1yb2xlIG1vZGUsIGl0IGlzIGludGVuZGVkIHRvIHdvcmsgaW4KcGVyaXBoZXJhbCBt b2RlLCB0aGVuIHdoeSBub3QgYXV0b21hdGljYWxseSBsb2FkIHRoZSBnYWRnZXQgZHJpdmVyIHdo ZW4KbGludXggYm9vdHMgdXAuCgpUbyBzdW1tYXJpZXMgbXkgY29tbWVudHMgb24gdGhpcyBhZ2Fp biwgc2luY2UgaXQgaXMgbWlub3IgaW4gbXkgb3BpbmlvbiwKSSB3b24ndCBzcGVuZCB0aW1lIHRv IHNvbHZlIGl0IG15c2VsZiAoaW4gYSBuZWFyIGZ1dHVyZSksIGJ1dCBJIGFtIG1vcmUKdGhhbiBo YXBweSB0byByZXZpZXcgYW5kIHRha2UgYW55IHBhdGNoIHdoaWNoIHNvbHZlIGl0LiAKCgpSZWdh cmRzLAotQmluLgo= From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-5.6 required=3.0 tests=DKIMWL_WL_HIGH,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI, SIGNED_OFF_BY,SPF_PASS,USER_AGENT_MUTT autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id A17B9C43381 for ; Fri, 22 Mar 2019 12:47:07 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id 59C2F218E2 for ; Fri, 22 Mar 2019 12:47:07 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (1024-bit key) header.d=ti.com header.i=@ti.com header.b="Hua6TjmP" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2387662AbfCVMrF (ORCPT ); Fri, 22 Mar 2019 08:47:05 -0400 Received: from lelv0143.ext.ti.com ([198.47.23.248]:57550 "EHLO lelv0143.ext.ti.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1730790AbfCVMrA (ORCPT ); Fri, 22 Mar 2019 08:47:00 -0400 Received: from fllv0035.itg.ti.com ([10.64.41.0]) by lelv0143.ext.ti.com (8.15.2/8.15.2) with ESMTP id x2MCkMQ5112356; Fri, 22 Mar 2019 07:46:22 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ti.com; s=ti-com-17Q1; t=1553258782; bh=yQPe5Er3qDiJ1Woo1RuMn+36eVXOzk2eZWEdzxpDXIk=; h=Date:From:To:CC:Subject:References:In-Reply-To; b=Hua6TjmPVK2GZ73YY5xiI/hVzBKStXnxcvBwV0wxJVxbzfPusWwMZQofXZaimy3ov IX9nntVEZNiPVBzq2JG7SoMQ77LcuCUW9i4uWQETdnNs+yb1l2jTRkxWI6Qy0P/EXA Xgw5aGisPiB+D+E2myTyCR5XC4pYi2cV5KvYmP8w= Received: from DLEE104.ent.ti.com (dlee104.ent.ti.com [157.170.170.34]) by fllv0035.itg.ti.com (8.15.2/8.15.2) with ESMTPS id x2MCkMba104546 (version=TLSv1.2 cipher=AES256-GCM-SHA384 bits=256 verify=FAIL); Fri, 22 Mar 2019 07:46:22 -0500 Received: from DLEE112.ent.ti.com (157.170.170.23) by DLEE104.ent.ti.com (157.170.170.34) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256_P256) id 15.1.1713.5; Fri, 22 Mar 2019 07:46:22 -0500 Received: from dlep32.itg.ti.com (157.170.170.100) by DLEE112.ent.ti.com (157.170.170.23) with Microsoft SMTP Server (version=TLS1_0, cipher=TLS_RSA_WITH_AES_256_CBC_SHA) id 15.1.1713.5 via Frontend Transport; Fri, 22 Mar 2019 07:46:22 -0500 Received: from localhost (ileax41-snat.itg.ti.com [10.172.224.153]) by dlep32.itg.ti.com (8.14.3/8.13.8) with ESMTP id x2MCkMRq003094; Fri, 22 Mar 2019 07:46:22 -0500 Date: Fri, 22 Mar 2019 07:46:22 -0500 From: Bin Liu To: Greg Kroah-Hartman CC: Maxime Ripard , Paul Kocialkowski , Paul Kocialkowski , , , Chen-Yu Tsai Subject: Re: [PATCH] usb: musb: Support gadget mode when the port is set to dual role Message-ID: <20190322124622.GB25852@uda0271908> Mail-Followup-To: Bin Liu , Greg Kroah-Hartman , Maxime Ripard , Paul Kocialkowski , Paul Kocialkowski , linux-kernel@vger.kernel.org, linux-usb@vger.kernel.org, Chen-Yu Tsai References: <20180328215213.29538-1-contact@paulk.fr> <20180329092326.dayuccomq5zrywqo@flea> <1522324644.1746.19.camel@bootlin.com> <20180420142524.GB29011@uda0271908> <2db056d6f65ecbcdc4f31a37fe2e1b1ddfb93c87.camel@paulk.fr> <20180421143426.GA10632@LTA0271908.dhcp.ti.com> <20190321130133.zllt5pqbrhiecoch@flea> <20190321164138.GB11121@kroah.com> MIME-Version: 1.0 Content-Type: text/plain; charset="iso-8859-1" Content-Disposition: inline Content-Transfer-Encoding: 8bit In-Reply-To: <20190321164138.GB11121@kroah.com> User-Agent: Mutt/1.5.21 (2010-09-15) X-EXCLAIMER-MD-CONFIG: e1e8a2fd-e40a-4ac6-ac9b-f7e9cc9ee180 Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Thu, Mar 21, 2019 at 05:41:38PM +0100, Greg Kroah-Hartman wrote: > On Thu, Mar 21, 2019 at 02:01:33PM +0100, Maxime Ripard wrote: > > Hi, > > > > I'm reviving this thread a bit, because I encountered this bug today. > > > > On Thu, Mar 21, 2019 at 11:02:10AM +0100, Bin Liu wrote: > > > On Sat, Apr 21, 2018 at 12:59:23PM +0200, Paul Kocialkowski wrote: > > > > Hi, > > > > > > > > Le vendredi 20 avril 2018 à 09:25 -0500, Bin Liu a écrit : > > > > > On Thu, Mar 29, 2018 at 01:57:24PM +0200, Paul Kocialkowski wrote: > > > > > > Hi, > > > > > > > > > > > > On Thu, 2018-03-29 at 11:23 +0200, Maxime Ripard wrote: > > > > > > > On Wed, Mar 28, 2018 at 11:52:13PM +0200, Paul Kocialkowski wrote: > > > > > > > > This allows dual-role ports to be reported as having gadget mode > > > > > > > > by > > > > > > > > the > > > > > > > > musb_has_gadget helper. This is required to enable MUSB at all > > > > > > > > with > > > > > > > > MUSB > > > > > > > > glue layers that set the port mode to MUSB_PORT_MODE_DUAL_ROLE > > > > > > > > at > > > > > > > > init. > > > > > > > > > > > > > > > > Most notably, this allows calling musb_start when needed in the > > > > > > > > virtual > > > > > > > > MUSB root HUB, regardless of whether the current mode should be > > > > > > > > gadget > > > > > > > > or host. > > > > > > > > > > > > > > > > This fixes USB OTG on Allwinner devices that I could test it > > > > > > > > with, > > > > > > > > mainly A20 devices. > > > > > > > > > > > > > > > > Signed-off-by: Paul Kocialkowski > > > > > > > > > > > > > > Surely there's more to it than that. The gadget mode of A20 boards > > > > > > > have been working in the past, including when compiling with mUSB > > > > > > > setup as dual role. > > > > > > > > > > > > > > Is this a regression since a particular commit? Or is there > > > > > > > another, > > > > > > > deeper issue overlooked in the commit log? > > > > > > > > > > > > The root of the issue here is that musb_start is not called at any > > > > > > point > > > > > > without this patch. My understanding of the flow is the following: > > > > > > when > > > > > > the PHY detects that there was a VBUS/ID change, it will notify its > > > > > > listeners (mainly the musb sunxi glue layer). This will then > > > > > > schedule > > > > > > the driver's work (sunxi_musb_work), which does nothing since the > > > > > > SUNXI_MUSB_FL_ENABLED bit was never set. This bit is only set after > > > > > > calling sunxi_musb_enable, which is called from > > > > > > musb_platform_enable, > > > > > > that originates from musb_start. > > > > > > > > > > > > Currently I see two places where musb_start is called: > > > > > > * musb_virthub > > > > > > * musb_gadget > > > > > > > > > > > > In the latter case, it is in turn called from udc_start, which > > > > > > should > > > > > > probably (correct me if I'm wrong) happen later in the call chain > > > > > > than > > > > > > ID/VBUS change notification time. > > > > > > > > > > I don't think it is correct that udc_start() is triggered by ID/VBUS > > > > > events, but I don't have an Allwinner platform to verify the callflow. > > > > > > > > Yes you're right, I didn't make myself very clear here. I didn't > > > > investigate the udc_start call path much since it was apparently not the > > > > culprit. > > > > > > > > > Have you tried to load with a gadget driver? When a gadget function is > > > > > bound to UDC, udc_start() is triggered, which in turn calls > > > > > musb_start(). > > > > > > > > It does work under that scenario, although my used case here is using > > > > musb with DUAL_ROLE but no gadget driver loaded. That it, I want the > > > > musb_start call to originate from the virtual hub, not from the gadget > > > > side. > > > > > > > > > > In the former case, musb_start is called in the root controller hub > > > > > > control, when setting the USB_PORT_FEAT_POWER feature. This looks > > > > > > perfectly legit and IMO this is where it should be initially calling > > > > > > musb_start in the dual role case. The kernel is indeed setting the > > > > > > > > > > No actually. A dual-role port should be in b_idle state by default, so > > > > > logically all actions should go to the gadget path until the port > > > > > switches to host mode. > > > > > > > > It makes sense that the port should be in b_idle state by default, but > > > > here it fails to switch to host mode when the ID pin detects that it > > > > should. Or does b_idle state entail that a gadget must be loaded (per > > > > the USB spec), and thus nothing should (ever) happen until that happens? > > > > > > > > I find it really odd to need a gadget device to trigger host mode. > > > > This patch does fix the issue, but I am puzzled as to why it is needed > > > > in the first place. The comment above it mentions that "In OTG mode we > > > > have to wait until we loaded a gadget. We don't really need a gadget if > > > > we operate as a host but we should not start a session as a device > > > > without a gadget or else we explode.", which is apparently compatible > > > > with my use case: a gadget is not really needed and I'm not trying to > > > > start a session as a device without a gadget loaded. > > > > > > > > What do you think? > > > > > > Okay, this came down to an argument that whether we should require > > > loading a gadget driver on a dual-role port to work in host mode, > > > which is currently required on musb since a long long time ago. > > > > > > I understand the requirement is kinda unnecessary, but since it already > > > exists on musb stack for a long time, I don't plan to change it. Because I > > > cannot think of a use case in real products that doesn't automatically > > > load a gadget function on the dual-role port. > > > > > > If you can explain a use case in real world (not a engineering lab) that > > > the gadget driver will not be loaded at linux booting up, but later > > > based on user's input, I will reconsider my decision. To remove this > > > requirement from musb stack, the work is more than this patch. > > > > I have one for you: we're working on a device that boots pretty fast, > > and therefore are pushing as much things as we can to modules. It > > includes gadgets, the musb driver and glue, etc. That doesn't sound > > way very different from what a generic distro would do as well. > > > > At boot, the various modules for the hardware are loaded > > automatically: the musb glue, the musb core, our USB PHY, etc. We end > > up in a situation where the musb driver is loaded and reported to work > > properly. The USB cable to the OTG port (in peripheral) might or might > > not be connected, it's kind of irrelevant. > > > > The gadgets, however, are not loaded automatically. > > > > Now comes a user that wants to use musb as a host, and connect a > > proper USB adapter, that wires the ID pin properly. In our case, the > > phy detects it, reports the mode change, and .... nothing. > > > > That doesn't really look like an engineering lab setup to me. > > I agree, that sounds like a valid setup. > > Also realize that Android is pushing to have all drivers as modules, so > you will start to see a whole lot more devices out there be modular > instead of statically built kernels. So issues like this are good to > resolve :) This issue here is not related to building all drivers as modules. Today we already have all musb related drivers including gadget drivers in modules. The issue discussed here is that when musb is configured in dual-role mode (dr_mode = 'otg' in dts), a gadget driver has to be bound to the udc to make musb working in host mode. I never disagree it is not ideal, but I consider it is minor - since the port is configured to dual-role mode, it is intended to work in peripheral mode, then why not automatically load the gadget driver when linux boots up. To summaries my comments on this again, since it is minor in my opinion, I won't spend time to solve it myself (in a near future), but I am more than happy to review and take any patch which solve it. Regards, -Bin.