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

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

Merge "usb: dwc3: Disable device events after maximum error retries" into msm-4.9

parents 66c284b9 ab794fee
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -44,6 +44,7 @@
#define DWC3_EP0_BOUNCE_SIZE	512
#define DWC3_ENDPOINTS_NUM	32
#define DWC3_XHCI_RESOURCES_NUM	2
#define MAX_ERROR_RECOVERY_TRIES	3

#define DWC3_SCRATCHBUF_SIZE	4096	/* each buffer is assumed to be 4KiB */
#define DWC3_EVENT_BUFFERS_SIZE	4096
+7 −2
Original line number Diff line number Diff line
@@ -2022,7 +2022,12 @@ static void dwc3_msm_notify_event(struct dwc3 *dwc, unsigned int event,
		reg |= DWC3_GCTL_CORESOFTRESET;
		dwc3_msm_write_reg(mdwc->base, DWC3_GCTL, reg);

		/* restart USB which performs full reset and reconnect */
		/*
		 * If the core could not recover after MAX_ERROR_RECOVERY_TRIES,
		 * skip the restart USB work and keep the core in softreset
		 * state.
		 */
		if (dwc->retries_on_error < MAX_ERROR_RECOVERY_TRIES)
			schedule_work(&mdwc->restart_usb_work);
		break;
	case DWC3_CONTROLLER_RESET_EVENT:
+8 −7
Original line number Diff line number Diff line
@@ -37,8 +37,6 @@
#include "gadget.h"
#include "io.h"

#define MAX_ERROR_RECOVERY_TRIES	3

static void dwc3_gadget_wakeup_interrupt(struct dwc3 *dwc, bool remote_wakeup);
static int dwc3_gadget_wakeup_int(struct dwc3 *dwc);
static void dwc3_stop_active_transfers(struct dwc3 *dwc);
@@ -1954,6 +1952,11 @@ static int dwc3_gadget_run_stop(struct dwc3 *dwc, int is_on, int suspend)
		reg1 |= DWC3_GEVNTSIZ_INTMASK;
		dwc3_writel(dwc->regs, DWC3_GEVNTSIZ(0), reg1);

		/*
		 * Reset the err_evt_seen so that the interrupts on
		 * next connect/session is processed correctly.
		 */
		dwc->err_evt_seen = false;
		dwc->pullups_connected = false;

		__dwc3_gadget_ep_disable(dwc->eps[0]);
@@ -3666,12 +3669,10 @@ static irqreturn_t dwc3_process_event_buf(struct dwc3 *dwc)
			evt->lpos = (evt->lpos + left) %
					DWC3_EVENT_BUFFERS_SIZE;
			dwc3_writel(dwc->regs, DWC3_GEVNTCOUNT(0), left);
			if (dwc->retries_on_error < MAX_ERROR_RECOVERY_TRIES) {
			if (dwc3_notify_event(dwc,
						DWC3_CONTROLLER_ERROR_EVENT, 0))
				dwc->err_evt_seen = 0;
			dwc->retries_on_error++;
			}
			break;
		}