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

Reply via email to