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

Commit 84b10dc9 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 f09875c4 ca0028c5
Loading
Loading
Loading
Loading
+8 −2
Original line number Diff line number Diff line
@@ -782,12 +782,13 @@ static int __dwc3_gadget_ep_enable(struct dwc3_ep *dep,

		init_waitqueue_head(&dep->wait_end_transfer);

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

		if (usb_endpoint_xfer_control(desc))
			goto out;

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

@@ -2494,6 +2495,7 @@ static int __dwc3_gadget_start(struct dwc3 *dwc)

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

@@ -3331,6 +3333,10 @@ static void dwc3_gadget_reset_interrupt(struct dwc3 *dwc)
			dwc3_ep0_end_control_data(dwc, dwc->eps[dir]);
		else
			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);
	}