From: Felipe Balbi <felipe.ba...@linux.intel.com>

commit c3acd59014148470dc58519870fbc779785b4bf7 upstream

Now that we track how many TRBs a request uses, it's easier to skip
over them in case of a call to usb_ep_dequeue(). Let's do so and
simplify the code a bit.

Cc: Fei Yang <fei.y...@intel.com>
Cc: Sam Protsenko <semen.protse...@linaro.org>
Cc: Felipe Balbi <ba...@kernel.org>
Cc: linux-usb@vger.kernel.org
Cc: sta...@vger.kernel.org # 4.19.y
Signed-off-by: Felipe Balbi <felipe.ba...@linux.intel.com>
(cherry picked from commit c3acd59014148470dc58519870fbc779785b4bf7)
Signed-off-by: John Stultz <john.stu...@linaro.org>
---
 drivers/usb/dwc3/gadget.c | 28 ++++------------------------
 1 file changed, 4 insertions(+), 24 deletions(-)

diff --git a/drivers/usb/dwc3/gadget.c b/drivers/usb/dwc3/gadget.c
index 019643a6ce9d..cb6dfea5d5e7 100644
--- a/drivers/usb/dwc3/gadget.c
+++ b/drivers/usb/dwc3/gadget.c
@@ -1370,6 +1370,8 @@ static int dwc3_gadget_ep_dequeue(struct usb_ep *ep,
                                break;
                }
                if (r == req) {
+                       int i;
+
                        /* wait until it is processed */
                        dwc3_stop_active_transfer(dep, true);
 
@@ -1407,32 +1409,12 @@ static int dwc3_gadget_ep_dequeue(struct usb_ep *ep,
                        if (!r->trb)
                                goto out0;
 
-                       if (r->num_pending_sgs) {
+                       for (i = 0; i < r->num_trbs; i++) {
                                struct dwc3_trb *trb;
-                               int i = 0;
-
-                               for (i = 0; i < r->num_pending_sgs; i++) {
-                                       trb = r->trb + i;
-                                       trb->ctrl &= ~DWC3_TRB_CTRL_HWO;
-                                       dwc3_ep_inc_deq(dep);
-                               }
-
-                               if (r->needs_extra_trb) {
-                                       trb = r->trb + r->num_pending_sgs + 1;
-                                       trb->ctrl &= ~DWC3_TRB_CTRL_HWO;
-                                       dwc3_ep_inc_deq(dep);
-                               }
-                       } else {
-                               struct dwc3_trb *trb = r->trb;
 
+                               trb = r->trb + i;
                                trb->ctrl &= ~DWC3_TRB_CTRL_HWO;
                                dwc3_ep_inc_deq(dep);
-
-                               if (r->needs_extra_trb) {
-                                       trb = r->trb + 1;
-                                       trb->ctrl &= ~DWC3_TRB_CTRL_HWO;
-                                       dwc3_ep_inc_deq(dep);
-                               }
                        }
                        goto out1;
                }
@@ -1443,8 +1425,6 @@ static int dwc3_gadget_ep_dequeue(struct usb_ep *ep,
        }
 
 out1:
-       /* giveback the request */
-
        dwc3_gadget_giveback(dep, req, -ECONNRESET);
 
 out0:
-- 
2.17.1

Reply via email to