diff options
author | Felipe Balbi <felipe.balbi@linux.intel.com> | 2016-08-11 12:24:27 +0300 |
---|---|---|
committer | Felipe Balbi <felipe.balbi@linux.intel.com> | 2016-08-22 10:45:37 +0300 |
commit | 737f1ae2556a5d219c24fbea2e1c63b7d9e10869 (patch) | |
tree | 927a2cf8dcd029196938c8b92a46d5a1f326cef1 /drivers/usb/dwc3 | |
parent | 4bc48c9747084dad4b258821a69026bcc552e8ff (diff) | |
download | blackbird-obmc-linux-737f1ae2556a5d219c24fbea2e1c63b7d9e10869.tar.gz blackbird-obmc-linux-737f1ae2556a5d219c24fbea2e1c63b7d9e10869.zip |
usb: dwc3: gadget: increment dequeue pointer on completion
Instead of waiting until giveback before
incrementing the dequeue pointer, we can increment
it from dwc3_cleanup_done_reqs(), that way we avoid
an extra loop over all TRBs during giveback.
While at that, also avoid using req->first_trb_index
as that's completely unnecessary. A follow-up patch
will clean up further uses of that and remove the
field altogether.
Signed-off-by: Felipe Balbi <felipe.balbi@linux.intel.com>
Diffstat (limited to 'drivers/usb/dwc3')
-rw-r--r-- | drivers/usb/dwc3/gadget.c | 17 |
1 files changed, 3 insertions, 14 deletions
diff --git a/drivers/usb/dwc3/gadget.c b/drivers/usb/dwc3/gadget.c index 15df5ed546da..18045997b593 100644 --- a/drivers/usb/dwc3/gadget.c +++ b/drivers/usb/dwc3/gadget.c @@ -174,15 +174,8 @@ void dwc3_gadget_giveback(struct dwc3_ep *dep, struct dwc3_request *req, int status) { struct dwc3 *dwc = dep->dwc; - int i; - if (req->started) { - i = 0; - do { - dwc3_ep_inc_deq(dep); - } while(++i < req->request.num_mapped_sgs); - req->started = false; - } + req->started = false; list_del(&req->list); req->trb = NULL; @@ -2004,7 +1997,6 @@ static int dwc3_cleanup_done_reqs(struct dwc3 *dwc, struct dwc3_ep *dep, { struct dwc3_request *req; struct dwc3_trb *trb; - unsigned int slot; unsigned int i; int count = 0; int ret; @@ -2019,12 +2011,9 @@ static int dwc3_cleanup_done_reqs(struct dwc3 *dwc, struct dwc3_ep *dep, chain = req->request.num_mapped_sgs > 0; i = 0; do { - slot = req->first_trb_index + i; - if (slot == DWC3_TRB_NUM - 1) - slot++; - slot %= DWC3_TRB_NUM; - trb = &dep->trb_pool[slot]; + trb = &dep->trb_pool[dep->trb_dequeue]; count += trb->size & DWC3_TRB_SIZE_MASK; + dwc3_ep_inc_deq(dep); ret = __dwc3_cleanup_done_trbs(dwc, dep, req, trb, event, status, chain); |