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

Commit acbc01a8 authored by Ivaylo Georgiev's avatar Ivaylo Georgiev
Browse files

Revert "usb: dwc3: gadget: extract dwc3_gadget_ep_skip_trbs()"



This reverts commit 65e1f340.

This is a preparation change for merging android-4.19.57 into
msm-4.19 branch.

Reverted due to BootTimeRunner regression.

Change-Id: I27d5703307f29d28799695f4d630149cc7ab8e73
Signed-off-by: default avatarIvaylo Georgiev <irgeorgiev@codeaurora.org>
parent 3ceb4414
Loading
Loading
Loading
Loading
+37 −24
Original line number Diff line number Diff line
@@ -1341,29 +1341,6 @@ static int dwc3_gadget_ep_queue(struct usb_ep *ep, struct usb_request *request,
	return ret;
}

static void dwc3_gadget_ep_skip_trbs(struct dwc3_ep *dep, struct dwc3_request *req)
{
	int i;

	/*
	 * If request was already started, this means we had to
	 * stop the transfer. With that we also need to ignore
	 * all TRBs used by the request, however TRBs can only
	 * be modified after completion of END_TRANSFER
	 * command. So what we do here is that we wait for
	 * END_TRANSFER completion and only after that, we jump
	 * over TRBs by clearing HWO and incrementing dequeue
	 * pointer.
	 */
	for (i = 0; i < req->num_trbs; i++) {
		struct dwc3_trb *trb;

		trb = req->trb + i;
		trb->ctrl &= ~DWC3_TRB_CTRL_HWO;
		dwc3_ep_inc_deq(dep);
	}
}

static int dwc3_gadget_ep_dequeue(struct usb_ep *ep,
		struct usb_request *request)
{
@@ -1391,8 +1368,38 @@ static int dwc3_gadget_ep_dequeue(struct usb_ep *ep,
				break;
		}
		if (r == req) {
			int i;

			/* wait until it is processed */
			dwc3_stop_active_transfer(dep, true);

			/*
			 * If request was already started, this means we had to
			 * stop the transfer. With that we also need to ignore
			 * all TRBs used by the request, however TRBs can only
			 * be modified after completion of END_TRANSFER
			 * command. So what we do here is that we wait for
			 * END_TRANSFER completion and only after that, we jump
			 * over TRBs by clearing HWO and incrementing dequeue
			 * pointer.
			 *
			 * Note that we have 2 possible types of transfers here:
			 *
			 * i) Linear buffer request
			 * ii) SG-list based request
			 *
			 * SG-list based requests will have r->num_pending_sgs
			 * set to a valid number (> 0). Linear requests,
			 * normally use a single TRB.
			 *
			 * For each of these two cases, if r->unaligned flag is
			 * set, one extra TRB has been used to align transfer
			 * size to wMaxPacketSize.
			 *
			 * All of these cases need to be taken into
			 * consideration so we don't mess up our TRB ring
			 * pointers.
			 */
			wait_event_lock_irq(dep->wait_end_transfer,
					!(dep->flags & DWC3_EP_END_TRANSFER_PENDING),
					dwc->lock);
@@ -1400,7 +1407,13 @@ static int dwc3_gadget_ep_dequeue(struct usb_ep *ep,
			if (!r->trb)
				goto out0;

			dwc3_gadget_ep_skip_trbs(dep, r);
			for (i = 0; i < r->num_trbs; i++) {
				struct dwc3_trb *trb;

				trb = r->trb + i;
				trb->ctrl &= ~DWC3_TRB_CTRL_HWO;
				dwc3_ep_inc_deq(dep);
			}
			goto out1;
		}
		dev_err(dwc->dev, "request %pK was not queued to %s\n",