#define DWC3_EP_END_TRANSFER_PENDING BIT(4)
 #define DWC3_EP_PENDING_REQUEST        BIT(5)
 #define DWC3_EP_DELAY_START    BIT(6)
+#define DWC3_EP_WAIT_TRANSFER_COMPLETE BIT(7)
 
        /* This last one is specific to EP0 */
 #define DWC3_EP0_DIR_IN                BIT(31)
 
                return ret;
        }
 
+       if (dep->stream_capable && req->request.is_last)
+               dep->flags |= DWC3_EP_WAIT_TRANSFER_COMPLETE;
+
        return 0;
 }
 
        list_add_tail(&req->list, &dep->pending_list);
        req->status = DWC3_REQUEST_STATUS_QUEUED;
 
+       if (dep->flags & DWC3_EP_WAIT_TRANSFER_COMPLETE)
+               return 0;
+
        /* Start the transfer only after the END_TRANSFER is completed */
        if (dep->flags & DWC3_EP_END_TRANSFER_PENDING) {
                dep->flags |= DWC3_EP_DELAY_START;
        if (event->status & DEPEVT_STATUS_BUSERR)
                status = -ECONNRESET;
 
-       dwc3_gadget_endpoint_trbs_complete(dep, event, status);
+       if (dwc3_gadget_endpoint_trbs_complete(dep, event, status))
+               dep->flags &= ~DWC3_EP_WAIT_TRANSFER_COMPLETE;
 }
 
 static void dwc3_gadget_endpoint_transfer_not_ready(struct dwc3_ep *dep,