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
signature.asc
Description: Digital signature
