usb: dwc2: gadget: Adjust ISOC OUT request's actual len for DDMA
In DDMA mode if programmed ISOC OUT transfer length is not DWORD aligned, after closing descriptor HW leaves value of 4 - (ureq->length % 4) in the RX bytes. This is caused because DMA works using 4B chunks. Example: if length = 9 and all 9 bytes were received from the bus, after xfercomplete rx_bytes value is 3. Hence add this value to the amount of transferred bytes. Signed-off-by: Vahram Aharonyan <vahrama@synopsys.com> Signed-off-by: John Youn <johnyoun@synopsys.com> Signed-off-by: Felipe Balbi <felipe.balbi@linux.intel.com>
This commit is contained in:
parent
ec01f0b231
commit
95d2b0370d
|
@ -2001,6 +2001,10 @@ static void dwc2_gadget_complete_isoc_request_ddma(struct dwc2_hsotg_ep *hs_ep)
|
|||
ureq->actual = ureq->length -
|
||||
((desc_sts & mask) >> DEV_DMA_ISOC_NBYTES_SHIFT);
|
||||
|
||||
/* Adjust actual length for ISOC Out if length is not align of 4 */
|
||||
if (!hs_ep->dir_in && ureq->length & 0x3)
|
||||
ureq->actual += 4 - (ureq->length & 0x3);
|
||||
|
||||
dwc2_hsotg_complete_request(hsotg, hs_ep, hs_req, 0);
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue