usb: dwc2: gadget: Fixes for StsPhseRcvd interrupt
authorVahram Aharonyan <vahrama@synopsys.com>
Tue, 15 Nov 2016 03:16:29 +0000 (19:16 -0800)
committerFelipe Balbi <felipe.balbi@linux.intel.com>
Fri, 18 Nov 2016 11:54:45 +0000 (13:54 +0200)
The StsPhseRcvd interrupt should not be enabled in slave mode.

Also move the StsPhsRcvd interrupt checking in the endpoint interrupt
handler to the correct order according to the databook. The interrupt
itself will be implemented in a later commit.

Signed-off-by: Vahram Aharonyan <vahrama@synopsys.com>
Signed-off-by: John Youn <johnyoun@synopsys.com>
Signed-off-by: Felipe Balbi <felipe.balbi@linux.intel.com>
drivers/usb/dwc2/gadget.c

index 6c988c2343267e98c0e1869510d3db20903e1e56..bcae58d72ea0def8ffb523eab0cb5a4385be3d87 100644 (file)
@@ -2552,9 +2552,6 @@ static void dwc2_hsotg_epint(struct dwc2_hsotg *hsotg, unsigned int idx,
        if (idx == 0 && (ints & (DXEPINT_SETUP | DXEPINT_SETUP_RCVD)))
                ints &= ~DXEPINT_XFERCOMPL;
 
-       if (ints & DXEPINT_STSPHSERCVD)
-               dev_dbg(hsotg->dev, "%s: StsPhseRcvd asserted\n", __func__);
-
        if (ints & DXEPINT_XFERCOMPL) {
                dev_dbg(hsotg->dev,
                        "%s: XferCompl: DxEPCTL=0x%08x, DXEPTSIZ=%08x\n",
@@ -2617,6 +2614,9 @@ static void dwc2_hsotg_epint(struct dwc2_hsotg *hsotg, unsigned int idx,
                }
        }
 
+       if (ints & DXEPINT_STSPHSERCVD)
+               dev_dbg(hsotg->dev, "%s: StsPhseRcvd\n", __func__);
+
        if (ints & DXEPINT_BACK2BACKSETUP)
                dev_dbg(hsotg->dev, "%s: B2BSetup/INEPNakEff\n", __func__);
 
@@ -2905,11 +2905,12 @@ void dwc2_hsotg_core_init_disconnected(struct dwc2_hsotg *hsotg,
 
        /*
         * don't need XferCompl, we get that from RXFIFO in slave mode. In
-        * DMA mode we may need this.
+        * DMA mode we may need this and StsPhseRcvd.
         */
-       dwc2_writel((using_dma(hsotg) ? (DIEPMSK_XFERCOMPLMSK) : 0) |
+       dwc2_writel((using_dma(hsotg) ? (DIEPMSK_XFERCOMPLMSK |
+               DOEPMSK_STSPHSERCVDMSK) : 0) |
                DOEPMSK_EPDISBLDMSK | DOEPMSK_AHBERRMSK |
-               DOEPMSK_SETUPMSK | DOEPMSK_STSPHSERCVDMSK,
+               DOEPMSK_SETUPMSK,
                hsotg->regs + DOEPMSK);
 
        dwc2_writel(0, hsotg->regs + DAINTMSK);