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

Commit ffe36eff authored by qctecmdr's avatar qctecmdr Committed by Gerrit - the friendly Code Review server
Browse files

Merge "usb: dwc3: Fix enumeration failure with reset during transfers"

parents 8946be47 e9ebda41
Loading
Loading
Loading
Loading
+8 −2
Original line number Original line Diff line number Diff line
@@ -753,12 +753,13 @@ static int __dwc3_gadget_ep_enable(struct dwc3_ep *dep, unsigned int action)
		reg |= DWC3_DALEPENA_EP(dep->number);
		reg |= DWC3_DALEPENA_EP(dep->number);
		dwc3_writel(dwc->regs, DWC3_DALEPENA, reg);
		dwc3_writel(dwc->regs, DWC3_DALEPENA, reg);


		dep->trb_dequeue = 0;
		dep->trb_enqueue = 0;

		if (usb_endpoint_xfer_control(desc))
		if (usb_endpoint_xfer_control(desc))
			goto out;
			goto out;


		/* Initialize the TRB ring */
		/* Initialize the TRB ring */
		dep->trb_dequeue = 0;
		dep->trb_enqueue = 0;
		memset(dep->trb_pool, 0,
		memset(dep->trb_pool, 0,
		       sizeof(struct dwc3_trb) * DWC3_TRB_NUM);
		       sizeof(struct dwc3_trb) * DWC3_TRB_NUM);


@@ -2516,6 +2517,7 @@ static int __dwc3_gadget_start(struct dwc3 *dwc)


	/* begin to receive SETUP packets */
	/* begin to receive SETUP packets */
	dwc->ep0state = EP0_SETUP_PHASE;
	dwc->ep0state = EP0_SETUP_PHASE;
	dwc->ep0_bounced = false;
	dwc->link_state = DWC3_LINK_STATE_SS_DIS;
	dwc->link_state = DWC3_LINK_STATE_SS_DIS;
	dwc3_ep0_out_start(dwc);
	dwc3_ep0_out_start(dwc);


@@ -3377,6 +3379,10 @@ static void dwc3_gadget_reset_interrupt(struct dwc3 *dwc)
			dwc3_ep0_end_control_data(dwc, dwc->eps[dir]);
			dwc3_ep0_end_control_data(dwc, dwc->eps[dir]);
		else
		else
			dwc3_ep0_end_control_data(dwc, dwc->eps[!dir]);
			dwc3_ep0_end_control_data(dwc, dwc->eps[!dir]);

		dwc->eps[0]->trb_enqueue = 0;
		dwc->eps[1]->trb_enqueue = 0;

		dwc3_ep0_stall_and_restart(dwc);
		dwc3_ep0_stall_and_restart(dwc);
	}
	}