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

Commit bf3a1bfc 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: Prevent continuous retries on error event"

parents c9e1b198 25e339bb
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -1175,6 +1175,7 @@ struct dwc3 {
	bool			create_reg_debugfs;
	u32			xhci_imod_value;
	int			core_id;
	int			retries_on_error;
};

/* -------------------------------------------------------------------------- */
+10 −3
Original line number Diff line number Diff line
@@ -37,6 +37,8 @@
#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);
@@ -3174,6 +3176,8 @@ static void dwc3_gadget_conndone_interrupt(struct dwc3 *dwc)
	speed = reg & DWC3_DSTS_CONNECTSPD;
	dwc->speed = speed;

	/* Reset the retry on erratic error event count */
	dwc->retries_on_error = 0;
	dwc3_update_ram_clk_sel(dwc, speed);

	switch (speed) {
@@ -3548,7 +3552,7 @@ static void dwc3_gadget_interrupt(struct dwc3 *dwc,
		break;
	case DWC3_DEVICE_EVENT_ERRATIC_ERROR:
		dwc3_trace(trace_dwc3_gadget, "Erratic Error");
		dbg_event(0xFF, "ERROR", 0);
		dbg_event(0xFF, "ERROR", dwc->retries_on_error);
		dwc->dbg_gadget_events.erratic_error++;
		break;
	case DWC3_DEVICE_EVENT_CMD_CMPL:
@@ -3634,9 +3638,12 @@ 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;
		}