On Tue, Apr 04, 2023, Johan Hovold wrote: > The hibernation code is broken and has never been enabled in mainline > and should thus be dropped. > > Remove the hibernation bits from the gadget code, which effectively > reverts commits e1dadd3b0f27 ("usb: dwc3: workaround: bogus hibernation > events") and 7b2a0368bbc9 ("usb: dwc3: gadget: set KEEP_CONNECT in case > of hibernation") except for the spurious interrupt warning. > > Signed-off-by: Johan Hovold <johan+linaro@xxxxxxxxxx> > --- > drivers/usb/dwc3/gadget.c | 46 +++++---------------------------------- > 1 file changed, 6 insertions(+), 40 deletions(-) > > diff --git a/drivers/usb/dwc3/gadget.c b/drivers/usb/dwc3/gadget.c > index cf5b4f49c3ed..ef51399fd89e 100644 > --- a/drivers/usb/dwc3/gadget.c > +++ b/drivers/usb/dwc3/gadget.c > @@ -2478,7 +2478,7 @@ static void __dwc3_gadget_set_speed(struct dwc3 *dwc) > dwc3_writel(dwc->regs, DWC3_DCFG, reg); > } > > -static int dwc3_gadget_run_stop(struct dwc3 *dwc, int is_on, int suspend) > +static int dwc3_gadget_run_stop(struct dwc3 *dwc, int is_on) > { > u32 reg; > u32 timeout = 2000; > @@ -2497,17 +2497,11 @@ static int dwc3_gadget_run_stop(struct dwc3 *dwc, int is_on, int suspend) > reg &= ~DWC3_DCTL_KEEP_CONNECT; > reg |= DWC3_DCTL_RUN_STOP; > > - if (dwc->has_hibernation) > - reg |= DWC3_DCTL_KEEP_CONNECT; > - > __dwc3_gadget_set_speed(dwc); > dwc->pullups_connected = true; > } else { > reg &= ~DWC3_DCTL_RUN_STOP; > > - if (dwc->has_hibernation && !suspend) > - reg &= ~DWC3_DCTL_KEEP_CONNECT; > - > dwc->pullups_connected = false; > } > > @@ -2574,7 +2568,7 @@ static int dwc3_gadget_soft_disconnect(struct dwc3 *dwc) > * remaining event generated by the controller while polling for > * DSTS.DEVCTLHLT. > */ > - return dwc3_gadget_run_stop(dwc, false, false); > + return dwc3_gadget_run_stop(dwc, false); > } > > static int dwc3_gadget_pullup(struct usb_gadget *g, int is_on) > @@ -2628,7 +2622,7 @@ static int dwc3_gadget_pullup(struct usb_gadget *g, int is_on) > > dwc3_event_buffers_setup(dwc); > __dwc3_gadget_start(dwc); > - ret = dwc3_gadget_run_stop(dwc, true, false); > + ret = dwc3_gadget_run_stop(dwc, true); > } > > pm_runtime_put(dwc->dev); > @@ -4195,30 +4189,6 @@ static void dwc3_gadget_suspend_interrupt(struct dwc3 *dwc, > dwc->link_state = next; > } > > -static void dwc3_gadget_hibernation_interrupt(struct dwc3 *dwc, > - unsigned int evtinfo) > -{ > - unsigned int is_ss = evtinfo & BIT(4); > - > - /* > - * WORKAROUND: DWC3 revision 2.20a with hibernation support > - * have a known issue which can cause USB CV TD.9.23 to fail > - * randomly. > - * > - * Because of this issue, core could generate bogus hibernation > - * events which SW needs to ignore. > - * > - * Refers to: > - * > - * STAR#9000546576: Device Mode Hibernation: Issue in USB 2.0 > - * Device Fallback from SuperSpeed > - */ > - if (is_ss ^ (dwc->speed == USB_SPEED_SUPER)) > - return; > - > - /* enter hibernation here */ > -} > - > static void dwc3_gadget_interrupt(struct dwc3 *dwc, > const struct dwc3_event_devt *event) > { > @@ -4236,11 +4206,7 @@ static void dwc3_gadget_interrupt(struct dwc3 *dwc, > dwc3_gadget_wakeup_interrupt(dwc); > break; > case DWC3_DEVICE_EVENT_HIBER_REQ: > - if (dev_WARN_ONCE(dwc->dev, !dwc->has_hibernation, > - "unexpected hibernation event\n")) > - break; > - > - dwc3_gadget_hibernation_interrupt(dwc, event->event_info); > + dev_WARN_ONCE(dwc->dev, true, "unexpected hibernation event\n"); > break; > case DWC3_DEVICE_EVENT_LINK_STATUS_CHANGE: > dwc3_gadget_linksts_change_interrupt(dwc, event->event_info); > @@ -4584,7 +4550,7 @@ int dwc3_gadget_suspend(struct dwc3 *dwc) > if (!dwc->gadget_driver) > return 0; > > - dwc3_gadget_run_stop(dwc, false, false); > + dwc3_gadget_run_stop(dwc, false); > > spin_lock_irqsave(&dwc->lock, flags); > dwc3_disconnect_gadget(dwc); > @@ -4605,7 +4571,7 @@ int dwc3_gadget_resume(struct dwc3 *dwc) > if (ret < 0) > goto err0; > > - ret = dwc3_gadget_run_stop(dwc, true, false); > + ret = dwc3_gadget_run_stop(dwc, true); > if (ret < 0) > goto err1; > > -- > 2.39.2 > Acked-by: Thinh Nguyen <Thinh.Nguyen@xxxxxxxxxxxx> Thinh