On Wed, Oct 22, 2014 at 10:14:54AM -0400, Alan Stern wrote: > On Wed, 22 Oct 2014, Anton Tikhomirov wrote: > > > > That's right, and it's true for USB-2 as well. A ZLP is needed only in > > > cases where the host otherwise wouldn't know the transfer is over, > > > i.e., when the transfer length is a nonzero multiple of the maxpacket > > > size and is smaller than wLength. > > > > Shall we use/check struct usb_request's zero flag for this? > > Of course; we have to. There's no other way for the UDC driver to know > whether the transfer is shorter than the host expects. alright, so I take it this incremental diff is enough ? diff --git a/drivers/usb/dwc3/ep0.c b/drivers/usb/dwc3/ep0.c index 0a34e71..ce6b0c7 100644 --- a/drivers/usb/dwc3/ep0.c +++ b/drivers/usb/dwc3/ep0.c @@ -830,7 +830,8 @@ static void dwc3_ep0_complete_data(struct dwc3 *dwc, } else { dwc3_gadget_giveback(ep0, r, 0); - if (IS_ALIGNED(ur->length, ep0->endpoint.maxpacket)) { + if (IS_ALIGNED(ur->length, ep0->endpoint.maxpacket) && + ur->zero) { int ret; dwc->ep0_next_event = DWC3_EP0_COMPLETE; -- balbi
Attachment:
signature.asc
Description: Digital signature