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

Commit e24e42fa authored by Sriharsha Allenki's avatar Sriharsha Allenki Committed by Gerrit - the friendly Code Review server
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 d5ee68b8
Loading
Loading
Loading
Loading
+11 −0
Original line number Diff line number Diff line
@@ -2830,8 +2830,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);