diff --git a/drivers/usb/dwc2/gadget.c b/drivers/usb/dwc2/gadget.c index ef964814b928..bdda32cefeda 100644 --- a/drivers/usb/dwc2/gadget.c +++ b/drivers/usb/dwc2/gadget.c @@ -2460,6 +2460,36 @@ irq_retry: gintsts &= gintmsk; + if (gintsts & GINTSTS_RESETDET) { + dev_dbg(hsotg->dev, "%s: USBRstDet\n", __func__); + + dwc2_writel(GINTSTS_RESETDET, hsotg->regs + GINTSTS); + + /* This event must be used only if controller is suspended */ + if (hsotg->lx_state == DWC2_L2) { + dwc2_exit_hibernation(hsotg, true); + hsotg->lx_state = DWC2_L0; + } + } + + if (gintsts & (GINTSTS_USBRST | GINTSTS_RESETDET)) { + + u32 usb_status = dwc2_readl(hsotg->regs + GOTGCTL); + u32 connected = hsotg->connected; + + dev_dbg(hsotg->dev, "%s: USBRst\n", __func__); + dev_dbg(hsotg->dev, "GNPTXSTS=%08x\n", + dwc2_readl(hsotg->regs + GNPTXSTS)); + + dwc2_writel(GINTSTS_USBRST, hsotg->regs + GINTSTS); + + /* Report disconnection if it is not already done. */ + dwc2_hsotg_disconnect(hsotg); + + if (usb_status & GOTGCTL_BSESVLD && connected) + dwc2_hsotg_core_init_disconnected(hsotg, true); + } + if (gintsts & GINTSTS_ENUMDONE) { dwc2_writel(GINTSTS_ENUMDONE, hsotg->regs + GINTSTS); @@ -2491,36 +2521,6 @@ irq_retry: } } - if (gintsts & GINTSTS_RESETDET) { - dev_dbg(hsotg->dev, "%s: USBRstDet\n", __func__); - - dwc2_writel(GINTSTS_RESETDET, hsotg->regs + GINTSTS); - - /* This event must be used only if controller is suspended */ - if (hsotg->lx_state == DWC2_L2) { - dwc2_exit_hibernation(hsotg, true); - hsotg->lx_state = DWC2_L0; - } - } - - if (gintsts & (GINTSTS_USBRST | GINTSTS_RESETDET)) { - - u32 usb_status = dwc2_readl(hsotg->regs + GOTGCTL); - u32 connected = hsotg->connected; - - dev_dbg(hsotg->dev, "%s: USBRst\n", __func__); - dev_dbg(hsotg->dev, "GNPTXSTS=%08x\n", - dwc2_readl(hsotg->regs + GNPTXSTS)); - - dwc2_writel(GINTSTS_USBRST, hsotg->regs + GINTSTS); - - /* Report disconnection if it is not already done. */ - dwc2_hsotg_disconnect(hsotg); - - if (usb_status & GOTGCTL_BSESVLD && connected) - dwc2_hsotg_core_init_disconnected(hsotg, true); - } - /* check both FIFOs */ if (gintsts & GINTSTS_NPTXFEMP) {