Loading drivers/usb/dwc3/core.h +1 −0 Original line number Diff line number Diff line Loading @@ -1175,6 +1175,7 @@ struct dwc3 { bool create_reg_debugfs; u32 xhci_imod_value; int core_id; int retries_on_error; }; /* -------------------------------------------------------------------------- */ Loading drivers/usb/dwc3/gadget.c +10 −3 Original line number Diff line number Diff line Loading @@ -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); Loading Loading @@ -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) { Loading Loading @@ -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: Loading Loading @@ -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; } Loading Loading
drivers/usb/dwc3/core.h +1 −0 Original line number Diff line number Diff line Loading @@ -1175,6 +1175,7 @@ struct dwc3 { bool create_reg_debugfs; u32 xhci_imod_value; int core_id; int retries_on_error; }; /* -------------------------------------------------------------------------- */ Loading
drivers/usb/dwc3/gadget.c +10 −3 Original line number Diff line number Diff line Loading @@ -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); Loading Loading @@ -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) { Loading Loading @@ -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: Loading Loading @@ -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; } Loading