usb: dwc3: gadget: Account for max size in TRB space
The current calculation takes dep->trb_dequeue - dep->trb_enqueue to find the TRB space left. If you enqueue 1, that results in: (u8) 0 - (u8) 1 = 0xff = 255 TRBs left. This is correct if DWC3_TRB_NUM == 256. If DWC3_TRB_NUM is less than 256 (but still a power of 2) you need to mod the result by DWC3_TRB_NUM. For example the same calculation with DWC3_TRB_NUM = 8, results in: 255 % 6 = 7 TRBs left. Signed-off-by: John Youn <johnyoun@synopsys.com> Signed-off-by: Felipe Balbi <felipe.balbi@linux.intel.com>
This commit is contained in:
parent
89bc856e5a
commit
32db3d9437
|
@ -845,6 +845,7 @@ static void dwc3_prepare_one_trb(struct dwc3_ep *dep,
|
|||
static u32 dwc3_calc_trbs_left(struct dwc3_ep *dep)
|
||||
{
|
||||
struct dwc3_trb *tmp;
|
||||
u8 trbs_left;
|
||||
|
||||
/*
|
||||
* If enqueue & dequeue are equal than it is either full or empty.
|
||||
|
@ -864,7 +865,10 @@ static u32 dwc3_calc_trbs_left(struct dwc3_ep *dep)
|
|||
return DWC3_TRB_NUM - 1;
|
||||
}
|
||||
|
||||
return dep->trb_dequeue - dep->trb_enqueue;
|
||||
trbs_left = dep->trb_dequeue - dep->trb_enqueue;
|
||||
trbs_left %= DWC3_TRB_NUM;
|
||||
|
||||
return trbs_left;
|
||||
}
|
||||
|
||||
static void dwc3_prepare_one_trb_sg(struct dwc3_ep *dep,
|
||||
|
|
Loading…
Reference in New Issue