diff options
author | Felipe Balbi <felipe.balbi@linux.intel.com> | 2016-08-12 13:13:10 +0300 |
---|---|---|
committer | Felipe Balbi <felipe.balbi@linux.intel.com> | 2016-08-22 10:45:37 +0300 |
commit | 2c78c0295fd8e4e3fef74dcddecc9cabf44a81a5 (patch) | |
tree | da0f39c68921eedd9a27eeaef1f12bee019a2947 /drivers/usb/dwc3 | |
parent | 0b3e4af3c740937d1e0f7d444f75d087c29a2d1b (diff) | |
download | linux-2c78c0295fd8e4e3fef74dcddecc9cabf44a81a5.tar.bz2 |
usb: dwc3: gadget: interrupt on ring full too
If the ring is full and we are processing a big
sglist, then let's interrupt so we can, later, add
more TRBs to the ring.
Signed-off-by: Felipe Balbi <felipe.balbi@linux.intel.com>
Diffstat (limited to 'drivers/usb/dwc3')
-rw-r--r-- | drivers/usb/dwc3/gadget.c | 5 |
1 files changed, 4 insertions, 1 deletions
diff --git a/drivers/usb/dwc3/gadget.c b/drivers/usb/dwc3/gadget.c index c776fb7f524a..90b3d7965136 100644 --- a/drivers/usb/dwc3/gadget.c +++ b/drivers/usb/dwc3/gadget.c @@ -758,6 +758,8 @@ static void dwc3_gadget_ep_free_request(struct usb_ep *ep, kfree(req); } +static u32 dwc3_calc_trbs_left(struct dwc3_ep *dep); + /** * dwc3_prepare_one_trb - setup one TRB from one request * @dep: endpoint for which this request is prepared @@ -818,7 +820,8 @@ static void dwc3_prepare_one_trb(struct dwc3_ep *dep, /* always enable Continue on Short Packet */ trb->ctrl |= DWC3_TRB_CTRL_CSP; - if (!req->request.no_interrupt && !chain) + if ((!req->request.no_interrupt && !chain) || + (dwc3_calc_trbs_left(dep) == 0)) trb->ctrl |= DWC3_TRB_CTRL_IOC | DWC3_TRB_CTRL_ISP_IMI; if (chain) |