Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

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

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
Loading
Loading
Loading
Loading
+3 −14
Original line number Diff line number Diff line
@@ -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;
	}
	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);