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: John Youn <johnyoun@synopsys.com> Signed-off-by: Felipe Balbi <felipe.balbi@linux.intel.com>
This commit is contained in:
parent
96bedb637a
commit
dca0119c3a
@ -145,21 +145,29 @@ int dwc3_gadget_set_link_state(struct dwc3 *dwc, enum dwc3_link_state state)
|
|||||||
return -ETIMEDOUT;
|
return -ETIMEDOUT;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 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)
|
||||||
|
{
|
||||||
|
(*index)++;
|
||||||
|
if (*index == (DWC3_TRB_NUM - 1))
|
||||||
|
*index = 0;
|
||||||
|
}
|
||||||
|
|
||||||
static void dwc3_ep_inc_enq(struct dwc3_ep *dep)
|
static void dwc3_ep_inc_enq(struct dwc3_ep *dep)
|
||||||
{
|
{
|
||||||
dep->trb_enqueue++;
|
dwc3_ep_inc_trb(&dep->trb_enqueue);
|
||||||
dep->trb_enqueue %= DWC3_TRB_NUM;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void dwc3_ep_inc_deq(struct dwc3_ep *dep)
|
static void dwc3_ep_inc_deq(struct dwc3_ep *dep)
|
||||||
{
|
{
|
||||||
dep->trb_dequeue++;
|
dwc3_ep_inc_trb(&dep->trb_dequeue);
|
||||||
dep->trb_dequeue %= DWC3_TRB_NUM;
|
|
||||||
}
|
|
||||||
|
|
||||||
static int dwc3_ep_is_last_trb(unsigned int index)
|
|
||||||
{
|
|
||||||
return index == DWC3_TRB_NUM - 1;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
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,
|
|||||||
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,
|
|||||||
}
|
}
|
||||||
|
|
||||||
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);
|
||||||
|
Loading…
Reference in New Issue
Block a user