summaryrefslogtreecommitdiffstats
path: root/drivers
diff options
context:
space:
mode:
authorMinas Harutyunyan <hminas@synopsys.com>2018-01-16 13:03:32 +0100
committerFelipe Balbi <felipe.balbi@linux.intel.com>2018-02-12 09:59:07 +0100
commit201ec568c57a43dbc73c7ac00e73c3c2d39559fc (patch)
treefcb8938a51e2c3934f312989e9ead72c0d5638a6 /drivers
parentusb: gadget: fsl_udc_core: fix ep valid checks (diff)
downloadlinux-201ec568c57a43dbc73c7ac00e73c3c2d39559fc.tar.xz
linux-201ec568c57a43dbc73c7ac00e73c3c2d39559fc.zip
usb: dwc2: Add safety check in setting of descriptor chain pointers
In some cases device sending ZLP IN on non EP0 which reassigning EP0 OUT descriptor pointer to that EP. Dedicated for EP0 OUT descriptor multiple time re-used by other EP while that descriptor already in use by EP0 OUT for SETUP transaction. As result when SETUP packet received BNA interrupt asserting. In dwc2_hsotg_program_zlp() function dwc2_gadget_set_ep0_desc_chain() must be called only for EP0. Acked-by: John Youn <johnyoun@synopsys.com> Signed-off-by: Minas Harutyunyan <hminas@synopsys.com> Signed-off-by: Grigor Tovmasyan <tovmasya@synopsys.com> Signed-off-by: Felipe Balbi <felipe.balbi@linux.intel.com>
Diffstat (limited to 'drivers')
-rw-r--r--drivers/usb/dwc2/gadget.c4
1 files changed, 3 insertions, 1 deletions
diff --git a/drivers/usb/dwc2/gadget.c b/drivers/usb/dwc2/gadget.c
index e4c3ce0de5de..57c7400057fa 100644
--- a/drivers/usb/dwc2/gadget.c
+++ b/drivers/usb/dwc2/gadget.c
@@ -1917,7 +1917,9 @@ static void dwc2_hsotg_program_zlp(struct dwc2_hsotg *hsotg,
/* Not specific buffer needed for ep0 ZLP */
dma_addr_t dma = hs_ep->desc_list_dma;
- dwc2_gadget_set_ep0_desc_chain(hsotg, hs_ep);
+ if (!index)
+ dwc2_gadget_set_ep0_desc_chain(hsotg, hs_ep);
+
dwc2_gadget_config_nonisoc_xfer_ddma(hs_ep, dma, 0);
} else {
dwc2_writel(DXEPTSIZ_MC(1) | DXEPTSIZ_PKTCNT(1) |