Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit dc1b144f authored by Mayank Rana's avatar Mayank Rana
Browse files

Revert "usb: dwc3: gadget: always enable IOC on bulk/interrupt transfers"



This change reverts Commit f3af3651 ("usb: dwc3: gadget: always
enable IOC on bulk/interrupt transfers") which sets IOC bit for both
bulk/interrupt transfers resulting into interrupt for each TRB
completion with event as XFERINPROGRESS. In some cases it has been
observed that controller is not able to complete provided TRB on
bulk-in endpoint causing stall conditions. Hence Fix this issue by not
setting IOC bit for each TRB to receive XFERCOMPLETE interrupt with it.

CRs-Fixed: 859396
Change-Id: I5ff08188f37044332f7dadba8d677288e83bfec8
Signed-off-by: default avatarMayank Rana <mrana@codeaurora.org>
parent 4c47f344
Loading
Loading
Loading
Loading
+6 −3
Original line number Diff line number Diff line
@@ -839,6 +839,9 @@ update_trb:
			trb->ctrl = DWC3_TRBCTL_ISOCHRONOUS_FIRST;
		else
			trb->ctrl = DWC3_TRBCTL_ISOCHRONOUS;

		if (!req->request.no_interrupt && !chain)
			trb->ctrl |= DWC3_TRB_CTRL_IOC;
		break;

	case USB_ENDPOINT_XFER_BULK:
@@ -855,9 +858,6 @@ update_trb:
		BUG();
	}

	if (!req->request.no_interrupt && !chain)
		trb->ctrl |= DWC3_TRB_CTRL_IOC;

	if (usb_endpoint_xfer_isoc(dep->endpoint.desc)) {
		trb->ctrl |= DWC3_TRB_CTRL_ISP_IMI;
		trb->ctrl |= DWC3_TRB_CTRL_CSP;
@@ -2485,6 +2485,9 @@ static int dwc3_cleanup_done_reqs(struct dwc3 *dwc, struct dwc3_ep *dep,
		return 1;
	}

	if ((event->status & DEPEVT_STATUS_IOC) &&
			(trb->ctrl & DWC3_TRB_CTRL_IOC))
		return 0;
	return 1;
}