On 11/15/2016 1:47 PM, John Stultz wrote: > I had seen some odd behavior with HiKey's usb-gadget interface > that I finally seemed to have chased down. Basically every other > time I pluged in the OTG port, the gadget interface would > properly initialize. The other times, I'd get a big WARN_ON > in dwc2_hsotg_init_fifo() about the fifo_map not being clear.
Hi, The fifo_map could end up not being clear when disconnect is never sent to the UDC framework. That unsets the configuration and the endpoints get disabled, which clears the FIFO map. Looks like the problem happens when going from A-device to B-device. If you come up as an A-Device, the gadget wouldn't have been configured so it shouldn't warn going A->B. If you go B->A, you will get a session end detected, which triggers the udc disconnect. Then A->B should not warn here either. Can you determine why this doesn't happen on your system? It sounds like there might be some race condition that we need to identify. If you can provide logs with DEBUG enabled that would be helpful too. Regards, John > > Ends up if we don't disconnect the gadget state, the fifo-map > doesn't get cleared properly, which causes WARN_ON messages and > also results in the device not properly being setup as a gadget > every other time the OTG port is connected. > > So this patch adds a call to dwc2_hsotg_disconnect() in the > reset path so the state is properly cleared. > > With it, the gadget interface initializes properly on every > plug in. > > Cc: Wei Xu <[email protected]> > Cc: Guodong Xu <[email protected]> > Cc: Amit Pundir <[email protected]> > Cc: Rob Herring <[email protected]> > Cc: John Youn <[email protected]> > Cc: Douglas Anderson <[email protected]> > Cc: Chen Yu <[email protected]> > Cc: Felipe Balbi <[email protected]> > Cc: Greg Kroah-Hartman <[email protected]> > Cc: [email protected] > Signed-off-by: John Stultz <[email protected]> > --- > drivers/usb/dwc2/hcd.c | 1 + > 1 file changed, 1 insertion(+) > > diff --git a/drivers/usb/dwc2/hcd.c b/drivers/usb/dwc2/hcd.c > index 8c980fd..d2557b7 100644 > --- a/drivers/usb/dwc2/hcd.c > +++ b/drivers/usb/dwc2/hcd.c > @@ -3228,6 +3228,7 @@ static void dwc2_conn_id_status_change(struct > work_struct *work) > dwc2_core_init(hsotg, false); > dwc2_enable_global_interrupts(hsotg); > spin_lock_irqsave(&hsotg->lock, flags); > + dwc2_hsotg_disconnect(hsotg); > dwc2_hsotg_core_init_disconnected(hsotg, false); > spin_unlock_irqrestore(&hsotg->lock, flags); > dwc2_hsotg_core_connect(hsotg); > -- To unsubscribe from this list: send the line "unsubscribe linux-usb" in the body of a message to [email protected] More majordomo info at http://vger.kernel.org/majordomo-info.html
