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

Commit ede77b7d authored by Sriharsha Allenki's avatar Sriharsha Allenki
Browse files

usb: dwc3: Do not process request if HWO is set for its TRB



If the HWO bit is set for the TRB (or the first TRB if scatter-gather
is used) of a request, it implies that core is still processing it.
In that case do not reclaim that TRB and also do not process
the request and give it back to the function driver.

Change-Id: Ia9fbaee443ad53d9a52909b0906a1d0ec1f2638a
Signed-off-by: default avatarSriharsha Allenki <sallenki@codeaurora.org>
parent 83bf913b
Loading
Loading
Loading
Loading
+11 −0
Original line number Diff line number Diff line
@@ -2873,8 +2873,19 @@ static int dwc3_gadget_ep_cleanup_completed_request(struct dwc3_ep *dep,
		const struct dwc3_event_depevt *event,
		struct dwc3_request *req, int status)
{
	struct dwc3 *dwc = dep->dwc;
	int ret;

	/*
	 * If the HWO is set, it implies the TRB is still being
	 * processed by the core. Hence do not reclaim it until
	 * it is processed by the core.
	 */
	if (req->trb->ctrl & DWC3_TRB_CTRL_HWO) {
		dbg_event(0xFF, "PEND TRB", dep->number);
		return 1;
	}

	if (req->num_pending_sgs)
		ret = dwc3_gadget_ep_reclaim_trb_sg(dep, req, event,
				status);