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

Commit 4d036e60 authored by Linux Build Service Account's avatar Linux Build Service Account Committed by Gerrit - the friendly Code Review server
Browse files

Merge "dwc3: gadget: Fix incorrect handling of zlp when sg is enabled"

parents 8425ac27 07e8d9ef
Loading
Loading
Loading
Loading
+9 −2
Original line number Original line Diff line number Diff line
@@ -862,6 +862,8 @@ static void dwc3_prepare_one_trb(struct dwc3_ep *dep,
{
{
	struct dwc3		*dwc = dep->dwc;
	struct dwc3		*dwc = dep->dwc;
	struct dwc3_trb		*trb;
	struct dwc3_trb		*trb;
	bool			zlp_appended = false;
	unsigned		rlen;


	dev_vdbg(dwc->dev, "%s: req %p dma %08llx length %d%s%s\n",
	dev_vdbg(dwc->dev, "%s: req %p dma %08llx length %d%s%s\n",
			dep->name, req, (unsigned long long) dma,
			dep->name, req, (unsigned long long) dma,
@@ -929,13 +931,18 @@ update_trb:


	trb->ctrl |= DWC3_TRB_CTRL_HWO;
	trb->ctrl |= DWC3_TRB_CTRL_HWO;


	if (req->request.zero && length &&
	rlen = req->request.length;
			(length % usb_endpoint_maxp(dep->endpoint.desc) == 0)) {
	if (!zlp_appended && !chain &&
		req->request.zero && rlen &&
		(rlen % usb_endpoint_maxp(dep->endpoint.desc) == 0)) {

		zlp_appended = true;
		/* Skip the LINK-TRB on ISOC */
		/* Skip the LINK-TRB on ISOC */
		if (((dep->free_slot & DWC3_TRB_MASK) == DWC3_TRB_NUM - 1) &&
		if (((dep->free_slot & DWC3_TRB_MASK) == DWC3_TRB_NUM - 1) &&
			usb_endpoint_xfer_isoc(dep->endpoint.desc))
			usb_endpoint_xfer_isoc(dep->endpoint.desc))
			dep->free_slot++;
			dep->free_slot++;


		trb->ctrl |= DWC3_TRB_CTRL_CHN;
		trb = &dep->trb_pool[dep->free_slot & DWC3_TRB_MASK];
		trb = &dep->trb_pool[dep->free_slot & DWC3_TRB_MASK];
		dep->free_slot++;
		dep->free_slot++;