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>
This commit is contained in:
parent
4bc48c9747
commit
737f1ae255
|
@ -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);
|
||||
|
|
Loading…
Reference in New Issue