If we stop earlier due to short packet, we will
want to giveback all TRBs.

Cc: <[email protected]>
Cc: Brian E Rogers <[email protected]>
Signed-off-by: Felipe Balbi <[email protected]>
---
 drivers/usb/dwc3/gadget.c | 23 +++--------------------
 1 file changed, 3 insertions(+), 20 deletions(-)

diff --git a/drivers/usb/dwc3/gadget.c b/drivers/usb/dwc3/gadget.c
index 241f5c7b34bf..792192b75ce5 100644
--- a/drivers/usb/dwc3/gadget.c
+++ b/drivers/usb/dwc3/gadget.c
@@ -1953,13 +1953,12 @@ static void dwc3_gadget_free_endpoints(struct dwc3 *dwc)
 
 /* -------------------------------------------------------------------------- 
*/
 
-static int __dwc3_cleanup_done_trbs(struct dwc3 *dwc, struct dwc3_ep *dep,
+static void __dwc3_cleanup_done_trbs(struct dwc3 *dwc, struct dwc3_ep *dep,
                struct dwc3_request *req, struct dwc3_trb *trb,
                const struct dwc3_event_depevt *event, int status,
                int chain)
 {
        unsigned int            count;
-       unsigned int            s_pkt = 0;
        unsigned int            trb_status;
 
        dep->queued_requests--;
@@ -2023,21 +2022,7 @@ static int __dwc3_cleanup_done_trbs(struct dwc3 *dwc, 
struct dwc3_ep *dep,
                } else {
                        dep->flags &= ~DWC3_EP_MISSED_ISOC;
                }
-       } else {
-               if (count && (event->status & DEPEVT_STATUS_SHORT))
-                       s_pkt = 1;
        }
-
-       if (s_pkt)
-               return 1;
-       if ((event->status & DEPEVT_STATUS_LST) &&
-                       (trb->ctrl & (DWC3_TRB_CTRL_LST |
-                               DWC3_TRB_CTRL_HWO)))
-               return 1;
-       if ((event->status & DEPEVT_STATUS_IOC) &&
-                       (trb->ctrl & DWC3_TRB_CTRL_IOC))
-               return 1;
-       return 0;
 }
 
 static int dwc3_cleanup_done_reqs(struct dwc3 *dwc, struct dwc3_ep *dep,
@@ -2067,11 +2052,9 @@ static int dwc3_cleanup_done_reqs(struct dwc3 *dwc, 
struct dwc3_ep *dep,
                        trb = &dep->trb_pool[slot];
                        count += trb->size & DWC3_TRB_SIZE_MASK;
 
-                       ret = __dwc3_cleanup_done_trbs(dwc, dep, req, trb,
+                       __dwc3_cleanup_done_trbs(dwc, dep, req, trb,
                                        event, status, chain);
-                       if (ret)
-                               break;
-               } while (++i < req->request.num_mapped_sgs);
+               } while (++i < req->request.num_mapped_sgs && chain);
 
                /*
                 * We assume here we will always receive the entire data block
-- 
2.9.1

--
To unsubscribe from this list: send the line "unsubscribe linux-usb" in
the body of a message to [email protected]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to