Commit dca0119c authored by John Youn's avatar John Youn Committed by Felipe Balbi

usb: dwc3: gadget: Simplify skipping of link TRBs

Make the skipping of the link TRBS built-in to the increment operation.
This simplifies the code wherever we increment the trb index and ensures
that we never end up pointing to a link trb.
Signed-off-by: default avatarJohn Youn <johnyoun@synopsys.com>
Signed-off-by: default avatarFelipe Balbi <felipe.balbi@linux.intel.com>
parent 96bedb63
...@@ -145,21 +145,29 @@ int dwc3_gadget_set_link_state(struct dwc3 *dwc, enum dwc3_link_state state) ...@@ -145,21 +145,29 @@ int dwc3_gadget_set_link_state(struct dwc3 *dwc, enum dwc3_link_state state)
return -ETIMEDOUT; return -ETIMEDOUT;
} }
static void dwc3_ep_inc_enq(struct dwc3_ep *dep) /**
* dwc3_ep_inc_trb() - Increment a TRB index.
* @index - Pointer to the TRB index to increment.
*
* The index should never point to the link TRB. After incrementing,
* if it is point to the link TRB, wrap around to the beginning. The
* link TRB is always at the last TRB entry.
*/
static void dwc3_ep_inc_trb(u8 *index)
{ {
dep->trb_enqueue++; (*index)++;
dep->trb_enqueue %= DWC3_TRB_NUM; if (*index == (DWC3_TRB_NUM - 1))
*index = 0;
} }
static void dwc3_ep_inc_deq(struct dwc3_ep *dep) static void dwc3_ep_inc_enq(struct dwc3_ep *dep)
{ {
dep->trb_dequeue++; dwc3_ep_inc_trb(&dep->trb_enqueue);
dep->trb_dequeue %= DWC3_TRB_NUM;
} }
static int dwc3_ep_is_last_trb(unsigned int index) static void dwc3_ep_inc_deq(struct dwc3_ep *dep)
{ {
return index == DWC3_TRB_NUM - 1; dwc3_ep_inc_trb(&dep->trb_dequeue);
} }
void dwc3_gadget_giveback(struct dwc3_ep *dep, struct dwc3_request *req, void dwc3_gadget_giveback(struct dwc3_ep *dep, struct dwc3_request *req,
...@@ -172,13 +180,6 @@ void dwc3_gadget_giveback(struct dwc3_ep *dep, struct dwc3_request *req, ...@@ -172,13 +180,6 @@ void dwc3_gadget_giveback(struct dwc3_ep *dep, struct dwc3_request *req,
i = 0; i = 0;
do { do {
dwc3_ep_inc_deq(dep); dwc3_ep_inc_deq(dep);
/*
* Skip LINK TRB. We can't use req->trb and check for
* DWC3_TRBCTL_LINK_TRB because it points the TRB we
* just completed (not the LINK TRB).
*/
if (dwc3_ep_is_last_trb(dep->trb_dequeue))
dwc3_ep_inc_deq(dep);
} while(++i < req->request.num_mapped_sgs); } while(++i < req->request.num_mapped_sgs);
req->started = false; req->started = false;
} }
...@@ -785,9 +786,6 @@ static void dwc3_prepare_one_trb(struct dwc3_ep *dep, ...@@ -785,9 +786,6 @@ static void dwc3_prepare_one_trb(struct dwc3_ep *dep,
} }
dwc3_ep_inc_enq(dep); dwc3_ep_inc_enq(dep);
/* Skip the LINK-TRB */
if (dwc3_ep_is_last_trb(dep->trb_enqueue))
dwc3_ep_inc_enq(dep);
trb->size = DWC3_TRB_SIZE_LENGTH(length); trb->size = DWC3_TRB_SIZE_LENGTH(length);
trb->bpl = lower_32_bits(dma); trb->bpl = lower_32_bits(dma);
......
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