|
@@ -758,6 +758,8 @@ static void dwc3_gadget_ep_free_request(struct usb_ep *ep,
|
|
|
kfree(req);
|
|
kfree(req);
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
+static u32 dwc3_calc_trbs_left(struct dwc3_ep *dep);
|
|
|
|
|
+
|
|
|
/**
|
|
/**
|
|
|
* dwc3_prepare_one_trb - setup one TRB from one request
|
|
* dwc3_prepare_one_trb - setup one TRB from one request
|
|
|
* @dep: endpoint for which this request is prepared
|
|
* @dep: endpoint for which this request is prepared
|
|
@@ -818,7 +820,8 @@ static void dwc3_prepare_one_trb(struct dwc3_ep *dep,
|
|
|
/* always enable Continue on Short Packet */
|
|
/* always enable Continue on Short Packet */
|
|
|
trb->ctrl |= DWC3_TRB_CTRL_CSP;
|
|
trb->ctrl |= DWC3_TRB_CTRL_CSP;
|
|
|
|
|
|
|
|
- if (!req->request.no_interrupt && !chain)
|
|
|
|
|
|
|
+ if ((!req->request.no_interrupt && !chain) ||
|
|
|
|
|
+ (dwc3_calc_trbs_left(dep) == 0))
|
|
|
trb->ctrl |= DWC3_TRB_CTRL_IOC | DWC3_TRB_CTRL_ISP_IMI;
|
|
trb->ctrl |= DWC3_TRB_CTRL_IOC | DWC3_TRB_CTRL_ISP_IMI;
|
|
|
|
|
|
|
|
if (chain)
|
|
if (chain)
|