Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S942062AbcJYV4x (ORCPT ); Tue, 25 Oct 2016 17:56:53 -0400 Received: from mail-oi0-f49.google.com ([209.85.218.49]:34327 "EHLO mail-oi0-f49.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1753972AbcJYV4s (ORCPT ); Tue, 25 Oct 2016 17:56:48 -0400 MIME-Version: 1.0 In-Reply-To: References: <1476943241-31810-1-git-send-email-john.stultz@linaro.org> From: John Stultz Date: Tue, 25 Oct 2016 14:56:47 -0700 Message-ID: Subject: Re: [RFC][PATCH] usb: dwc2: Make sure we disconnect the gadget state on reset To: John Youn Cc: lkml , Wei Xu , Guodong Xu , Chen Yu , Amit Pundir , Rob Herring , Mark Rutland , Douglas Anderson , Greg Kroah-Hartman , "linux-usb@vger.kernel.org" Content-Type: text/plain; charset=UTF-8 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 2488 Lines: 64 On Tue, Oct 25, 2016 at 2:29 PM, John Youn wrote: > On 10/19/2016 11:00 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. >> >> Ends up If we don't disconnect the gadget state on reset, 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. >> >> I don't know if this is actually the right fix, but it seems >> to work well. Feedback would be greatly appreciated! >> >> Cc: Wei Xu >> Cc: Guodong Xu >> Cc: Chen Yu >> Cc: Amit Pundir >> Cc: Rob Herring >> Cc: Mark Rutland >> Cc: John Youn >> Cc: Douglas Anderson >> Cc: Greg Kroah-Hartman >> Cc: linux-usb@vger.kernel.org >> Signed-off-by: John Stultz >> --- >> drivers/usb/dwc2/gadget.c | 2 ++ >> 1 file changed, 2 insertions(+) >> >> diff --git a/drivers/usb/dwc2/gadget.c b/drivers/usb/dwc2/gadget.c >> index 24fbebc..5505001 100644 >> --- a/drivers/usb/dwc2/gadget.c >> +++ b/drivers/usb/dwc2/gadget.c >> @@ -2519,6 +2519,8 @@ void dwc2_hsotg_core_init_disconnected(struct dwc2_hsotg *hsotg, >> >> /* Kill any ep0 requests as controller will be reinitialized */ >> kill_all_requests(hsotg, hsotg->eps_out[0], -ECONNRESET); >> + /* Make sure everything is disconnected */ >> + dwc2_hsotg_disconnect(hsotg); >> >> if (!is_usb_reset) >> if (dwc2_core_reset(hsotg)) >> > > Seems fine with our testing. > > Acked-by: John Youn Awesome! Thanks so much for the review and testing! I'm curious, did you happen to have any thoughts or objections on the "dwc2: Force port resume on switching to device mode" patch (https://patchwork.kernel.org/patch/9375965/ ) as well? thanks -john