usb: dwc3: ep0: fix setup_packet_pending initialization
authorFelipe Balbi <balbi@ti.com>
Mon, 16 Nov 2015 22:20:34 +0000 (16:20 -0600)
committerFelipe Balbi <balbi@ti.com>
Tue, 15 Dec 2015 15:12:41 +0000 (09:12 -0600)
It just ocurred to me that dwc3 already gives a
really hint of when a setup packet is pending and
that's the SETUP_PENDING TRB Status for EP0 IRQs.

Fix setup_packet_pending initialization based on
that. While at that, also make sure the comment in
gadget.c matches what code is doing.

Signed-off-by: Felipe Balbi <balbi@ti.com>
drivers/usb/dwc3/ep0.c
drivers/usb/dwc3/gadget.c

index 3ea2bda0bd4d1e4f01573fc315d7a6627e54dc9d..3a9354abcb68bfc6e9d27cc64c7155d54dec04e0 100644 (file)
@@ -817,6 +817,8 @@ static void dwc3_ep0_complete_data(struct dwc3 *dwc,
 
        status = DWC3_TRB_SIZE_TRBSTS(trb->size);
        if (status == DWC3_TRBSTS_SETUP_PENDING) {
+               dwc->setup_packet_pending = true;
+
                dwc3_trace(trace_dwc3_ep0, "Setup Pending received");
 
                if (r)
@@ -916,8 +918,10 @@ static void dwc3_ep0_complete_status(struct dwc3 *dwc,
        }
 
        status = DWC3_TRB_SIZE_TRBSTS(trb->size);
-       if (status == DWC3_TRBSTS_SETUP_PENDING)
+       if (status == DWC3_TRBSTS_SETUP_PENDING) {
+               dwc->setup_packet_pending = true;
                dwc3_trace(trace_dwc3_ep0, "Setup Pending received");
+       }
 
        dwc->ep0state = EP0_SETUP_PHASE;
        dwc3_ep0_out_start(dwc);
@@ -1063,8 +1067,6 @@ static void dwc3_ep0_end_control_data(struct dwc3 *dwc, struct dwc3_ep *dep)
 static void dwc3_ep0_xfernotready(struct dwc3 *dwc,
                const struct dwc3_event_depevt *event)
 {
-       dwc->setup_packet_pending = true;
-
        switch (event->status) {
        case DEPEVT_STATUS_CONTROL_DATA:
                dwc3_trace(trace_dwc3_ep0, "Control Data");
index 3d131b7aae5970a8969b5b3448767cc227551524..e4203b79908a40530117fa6b61b1c8b6f3308c2d 100644 (file)
@@ -2230,8 +2230,8 @@ static void dwc3_gadget_reset_interrupt(struct dwc3 *dwc)
         *
         * Our suggested workaround is to follow the Disconnect
         * Event steps here, instead, based on a setup_packet_pending
-        * flag. Such flag gets set whenever we have a XferNotReady
-        * event on EP0 and gets cleared on XferComplete for the
+        * flag. Such flag gets set whenever we have a SETUP_PENDING
+        * status for EP0 TRBs and gets cleared on XferComplete for the
         * same endpoint.
         *
         * Refers to: