Commit 737f1ae2 authored by Felipe Balbi's avatar Felipe Balbi

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: default avatarFelipe Balbi <felipe.balbi@linux.intel.com>
parent 4bc48c97
...@@ -174,15 +174,8 @@ void dwc3_gadget_giveback(struct dwc3_ep *dep, struct dwc3_request *req, ...@@ -174,15 +174,8 @@ void dwc3_gadget_giveback(struct dwc3_ep *dep, struct dwc3_request *req,
int status) int status)
{ {
struct dwc3 *dwc = dep->dwc; 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); list_del(&req->list);
req->trb = NULL; req->trb = NULL;
...@@ -2004,7 +1997,6 @@ static int dwc3_cleanup_done_reqs(struct dwc3 *dwc, struct dwc3_ep *dep, ...@@ -2004,7 +1997,6 @@ static int dwc3_cleanup_done_reqs(struct dwc3 *dwc, struct dwc3_ep *dep,
{ {
struct dwc3_request *req; struct dwc3_request *req;
struct dwc3_trb *trb; struct dwc3_trb *trb;
unsigned int slot;
unsigned int i; unsigned int i;
int count = 0; int count = 0;
int ret; int ret;
...@@ -2019,12 +2011,9 @@ static int dwc3_cleanup_done_reqs(struct dwc3 *dwc, struct dwc3_ep *dep, ...@@ -2019,12 +2011,9 @@ static int dwc3_cleanup_done_reqs(struct dwc3 *dwc, struct dwc3_ep *dep,
chain = req->request.num_mapped_sgs > 0; chain = req->request.num_mapped_sgs > 0;
i = 0; i = 0;
do { do {
slot = req->first_trb_index + i; trb = &dep->trb_pool[dep->trb_dequeue];
if (slot == DWC3_TRB_NUM - 1)
slot++;
slot %= DWC3_TRB_NUM;
trb = &dep->trb_pool[slot];
count += trb->size & DWC3_TRB_SIZE_MASK; count += trb->size & DWC3_TRB_SIZE_MASK;
dwc3_ep_inc_deq(dep);
ret = __dwc3_cleanup_done_trbs(dwc, dep, req, trb, ret = __dwc3_cleanup_done_trbs(dwc, dep, req, trb,
event, status, chain); event, status, chain);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment