1b33f69f5SNishad Kamdar /* SPDX-License-Identifier: GPL-2.0 */
227088e00SAditya Srivastava /*
372246da4SFelipe Balbi * debug.h - DesignWare USB3 DRD Controller Debug Header
472246da4SFelipe Balbi *
510623b87SAlexander A. Klimov * Copyright (C) 2010-2011 Texas Instruments Incorporated - https://www.ti.com
672246da4SFelipe Balbi *
772246da4SFelipe Balbi * Authors: Felipe Balbi <balbi@ti.com>,
872246da4SFelipe Balbi * Sebastian Andrzej Siewior <bigeasy@linutronix.de>
972246da4SFelipe Balbi */
1072246da4SFelipe Balbi
1180977dc9SFelipe Balbi #ifndef __DWC3_DEBUG_H
1280977dc9SFelipe Balbi #define __DWC3_DEBUG_H
1380977dc9SFelipe Balbi
1472246da4SFelipe Balbi #include "core.h"
1572246da4SFelipe Balbi
1680977dc9SFelipe Balbi /**
1780977dc9SFelipe Balbi * dwc3_gadget_ep_cmd_string - returns endpoint command string
1880977dc9SFelipe Balbi * @cmd: command code
1980977dc9SFelipe Balbi */
2080977dc9SFelipe Balbi static inline const char *
dwc3_gadget_ep_cmd_string(u8 cmd)2180977dc9SFelipe Balbi dwc3_gadget_ep_cmd_string(u8 cmd)
2280977dc9SFelipe Balbi {
2380977dc9SFelipe Balbi switch (cmd) {
2480977dc9SFelipe Balbi case DWC3_DEPCMD_DEPSTARTCFG:
2580977dc9SFelipe Balbi return "Start New Configuration";
2680977dc9SFelipe Balbi case DWC3_DEPCMD_ENDTRANSFER:
2780977dc9SFelipe Balbi return "End Transfer";
2880977dc9SFelipe Balbi case DWC3_DEPCMD_UPDATETRANSFER:
2980977dc9SFelipe Balbi return "Update Transfer";
3080977dc9SFelipe Balbi case DWC3_DEPCMD_STARTTRANSFER:
3180977dc9SFelipe Balbi return "Start Transfer";
3280977dc9SFelipe Balbi case DWC3_DEPCMD_CLEARSTALL:
3380977dc9SFelipe Balbi return "Clear Stall";
3480977dc9SFelipe Balbi case DWC3_DEPCMD_SETSTALL:
3580977dc9SFelipe Balbi return "Set Stall";
3680977dc9SFelipe Balbi case DWC3_DEPCMD_GETEPSTATE:
3780977dc9SFelipe Balbi return "Get Endpoint State";
3880977dc9SFelipe Balbi case DWC3_DEPCMD_SETTRANSFRESOURCE:
3980977dc9SFelipe Balbi return "Set Endpoint Transfer Resource";
4080977dc9SFelipe Balbi case DWC3_DEPCMD_SETEPCONFIG:
4180977dc9SFelipe Balbi return "Set Endpoint Configuration";
4280977dc9SFelipe Balbi default:
4380977dc9SFelipe Balbi return "UNKNOWN command";
4480977dc9SFelipe Balbi }
4580977dc9SFelipe Balbi }
4680977dc9SFelipe Balbi
4780977dc9SFelipe Balbi /**
4880977dc9SFelipe Balbi * dwc3_gadget_generic_cmd_string - returns generic command string
4980977dc9SFelipe Balbi * @cmd: command code
5080977dc9SFelipe Balbi */
5180977dc9SFelipe Balbi static inline const char *
dwc3_gadget_generic_cmd_string(u8 cmd)5280977dc9SFelipe Balbi dwc3_gadget_generic_cmd_string(u8 cmd)
5380977dc9SFelipe Balbi {
5480977dc9SFelipe Balbi switch (cmd) {
5580977dc9SFelipe Balbi case DWC3_DGCMD_SET_LMP:
5680977dc9SFelipe Balbi return "Set LMP";
5780977dc9SFelipe Balbi case DWC3_DGCMD_SET_PERIODIC_PAR:
5880977dc9SFelipe Balbi return "Set Periodic Parameters";
5980977dc9SFelipe Balbi case DWC3_DGCMD_XMIT_FUNCTION:
6080977dc9SFelipe Balbi return "Transmit Function Wake Device Notification";
6180977dc9SFelipe Balbi case DWC3_DGCMD_SET_SCRATCHPAD_ADDR_LO:
6280977dc9SFelipe Balbi return "Set Scratchpad Buffer Array Address Lo";
6380977dc9SFelipe Balbi case DWC3_DGCMD_SET_SCRATCHPAD_ADDR_HI:
6480977dc9SFelipe Balbi return "Set Scratchpad Buffer Array Address Hi";
6580977dc9SFelipe Balbi case DWC3_DGCMD_SELECTED_FIFO_FLUSH:
6680977dc9SFelipe Balbi return "Selected FIFO Flush";
6780977dc9SFelipe Balbi case DWC3_DGCMD_ALL_FIFO_FLUSH:
6880977dc9SFelipe Balbi return "All FIFO Flush";
6980977dc9SFelipe Balbi case DWC3_DGCMD_SET_ENDPOINT_NRDY:
7080977dc9SFelipe Balbi return "Set Endpoint NRDY";
71140ca4cfSThinh Nguyen case DWC3_DGCMD_SET_ENDPOINT_PRIME:
72140ca4cfSThinh Nguyen return "Set Endpoint Prime";
7380977dc9SFelipe Balbi case DWC3_DGCMD_RUN_SOC_BUS_LOOPBACK:
7480977dc9SFelipe Balbi return "Run SoC Bus Loopback Test";
75*92c08a84SElson Roy Serrao case DWC3_DGCMD_DEV_NOTIFICATION:
76*92c08a84SElson Roy Serrao return "Device Notification";
7780977dc9SFelipe Balbi default:
7880977dc9SFelipe Balbi return "UNKNOWN";
7980977dc9SFelipe Balbi }
8080977dc9SFelipe Balbi }
8180977dc9SFelipe Balbi
8280977dc9SFelipe Balbi /**
8380977dc9SFelipe Balbi * dwc3_gadget_link_string - returns link name
8480977dc9SFelipe Balbi * @link_state: link state code
8580977dc9SFelipe Balbi */
8680977dc9SFelipe Balbi static inline const char *
dwc3_gadget_link_string(enum dwc3_link_state link_state)8780977dc9SFelipe Balbi dwc3_gadget_link_string(enum dwc3_link_state link_state)
8880977dc9SFelipe Balbi {
8980977dc9SFelipe Balbi switch (link_state) {
9080977dc9SFelipe Balbi case DWC3_LINK_STATE_U0:
9180977dc9SFelipe Balbi return "U0";
9280977dc9SFelipe Balbi case DWC3_LINK_STATE_U1:
9380977dc9SFelipe Balbi return "U1";
9480977dc9SFelipe Balbi case DWC3_LINK_STATE_U2:
9580977dc9SFelipe Balbi return "U2";
9680977dc9SFelipe Balbi case DWC3_LINK_STATE_U3:
9780977dc9SFelipe Balbi return "U3";
9880977dc9SFelipe Balbi case DWC3_LINK_STATE_SS_DIS:
9980977dc9SFelipe Balbi return "SS.Disabled";
10080977dc9SFelipe Balbi case DWC3_LINK_STATE_RX_DET:
10180977dc9SFelipe Balbi return "RX.Detect";
10280977dc9SFelipe Balbi case DWC3_LINK_STATE_SS_INACT:
10380977dc9SFelipe Balbi return "SS.Inactive";
10480977dc9SFelipe Balbi case DWC3_LINK_STATE_POLL:
10580977dc9SFelipe Balbi return "Polling";
10680977dc9SFelipe Balbi case DWC3_LINK_STATE_RECOV:
10780977dc9SFelipe Balbi return "Recovery";
10880977dc9SFelipe Balbi case DWC3_LINK_STATE_HRESET:
10980977dc9SFelipe Balbi return "Hot Reset";
11080977dc9SFelipe Balbi case DWC3_LINK_STATE_CMPLY:
11180977dc9SFelipe Balbi return "Compliance";
11280977dc9SFelipe Balbi case DWC3_LINK_STATE_LPBK:
11380977dc9SFelipe Balbi return "Loopback";
11480977dc9SFelipe Balbi case DWC3_LINK_STATE_RESET:
11580977dc9SFelipe Balbi return "Reset";
11680977dc9SFelipe Balbi case DWC3_LINK_STATE_RESUME:
11780977dc9SFelipe Balbi return "Resume";
11880977dc9SFelipe Balbi default:
119038761ceSThinh Nguyen return "UNKNOWN link state";
12080977dc9SFelipe Balbi }
12180977dc9SFelipe Balbi }
12280977dc9SFelipe Balbi
123b5c7ed5cSFelipe Balbi /**
1240d36dedeSThinh Nguyen * dwc3_gadget_hs_link_string - returns highspeed and below link name
1250d36dedeSThinh Nguyen * @link_state: link state code
1260d36dedeSThinh Nguyen */
1270d36dedeSThinh Nguyen static inline const char *
dwc3_gadget_hs_link_string(enum dwc3_link_state link_state)1280d36dedeSThinh Nguyen dwc3_gadget_hs_link_string(enum dwc3_link_state link_state)
1290d36dedeSThinh Nguyen {
1300d36dedeSThinh Nguyen switch (link_state) {
1310d36dedeSThinh Nguyen case DWC3_LINK_STATE_U0:
1320d36dedeSThinh Nguyen return "On";
1330d36dedeSThinh Nguyen case DWC3_LINK_STATE_U2:
1340d36dedeSThinh Nguyen return "Sleep";
1350d36dedeSThinh Nguyen case DWC3_LINK_STATE_U3:
1360d36dedeSThinh Nguyen return "Suspend";
1370d36dedeSThinh Nguyen case DWC3_LINK_STATE_SS_DIS:
1380d36dedeSThinh Nguyen return "Disconnected";
1390d36dedeSThinh Nguyen case DWC3_LINK_STATE_RX_DET:
1400d36dedeSThinh Nguyen return "Early Suspend";
1410d36dedeSThinh Nguyen case DWC3_LINK_STATE_RECOV:
1420d36dedeSThinh Nguyen return "Recovery";
1430d36dedeSThinh Nguyen case DWC3_LINK_STATE_RESET:
1440d36dedeSThinh Nguyen return "Reset";
1450d36dedeSThinh Nguyen case DWC3_LINK_STATE_RESUME:
1460d36dedeSThinh Nguyen return "Resume";
1470d36dedeSThinh Nguyen default:
148038761ceSThinh Nguyen return "UNKNOWN link state";
1490d36dedeSThinh Nguyen }
1500d36dedeSThinh Nguyen }
1510d36dedeSThinh Nguyen
1520d36dedeSThinh Nguyen /**
153b5c7ed5cSFelipe Balbi * dwc3_trb_type_string - returns TRB type as a string
154b5c7ed5cSFelipe Balbi * @type: the type of the TRB
155b5c7ed5cSFelipe Balbi */
dwc3_trb_type_string(unsigned int type)156b5c7ed5cSFelipe Balbi static inline const char *dwc3_trb_type_string(unsigned int type)
157b5c7ed5cSFelipe Balbi {
158b5c7ed5cSFelipe Balbi switch (type) {
159b5c7ed5cSFelipe Balbi case DWC3_TRBCTL_NORMAL:
160b5c7ed5cSFelipe Balbi return "normal";
161b5c7ed5cSFelipe Balbi case DWC3_TRBCTL_CONTROL_SETUP:
162b5c7ed5cSFelipe Balbi return "setup";
163b5c7ed5cSFelipe Balbi case DWC3_TRBCTL_CONTROL_STATUS2:
164b5c7ed5cSFelipe Balbi return "status2";
165b5c7ed5cSFelipe Balbi case DWC3_TRBCTL_CONTROL_STATUS3:
166b5c7ed5cSFelipe Balbi return "status3";
167b5c7ed5cSFelipe Balbi case DWC3_TRBCTL_CONTROL_DATA:
168b5c7ed5cSFelipe Balbi return "data";
169b5c7ed5cSFelipe Balbi case DWC3_TRBCTL_ISOCHRONOUS_FIRST:
170b5c7ed5cSFelipe Balbi return "isoc-first";
171b5c7ed5cSFelipe Balbi case DWC3_TRBCTL_ISOCHRONOUS:
172b5c7ed5cSFelipe Balbi return "isoc";
173b5c7ed5cSFelipe Balbi case DWC3_TRBCTL_LINK_TRB:
174b5c7ed5cSFelipe Balbi return "link";
175b5c7ed5cSFelipe Balbi default:
176b5c7ed5cSFelipe Balbi return "UNKNOWN";
177b5c7ed5cSFelipe Balbi }
178b5c7ed5cSFelipe Balbi }
179b5c7ed5cSFelipe Balbi
dwc3_ep0_state_string(enum dwc3_ep0_state state)180cdd72ac2SFelipe Balbi static inline const char *dwc3_ep0_state_string(enum dwc3_ep0_state state)
181cdd72ac2SFelipe Balbi {
182cdd72ac2SFelipe Balbi switch (state) {
183cdd72ac2SFelipe Balbi case EP0_UNCONNECTED:
184cdd72ac2SFelipe Balbi return "Unconnected";
185cdd72ac2SFelipe Balbi case EP0_SETUP_PHASE:
186cdd72ac2SFelipe Balbi return "Setup Phase";
187cdd72ac2SFelipe Balbi case EP0_DATA_PHASE:
188cdd72ac2SFelipe Balbi return "Data Phase";
189cdd72ac2SFelipe Balbi case EP0_STATUS_PHASE:
190cdd72ac2SFelipe Balbi return "Status Phase";
191cdd72ac2SFelipe Balbi default:
192cdd72ac2SFelipe Balbi return "UNKNOWN";
193cdd72ac2SFelipe Balbi }
194cdd72ac2SFelipe Balbi }
195cdd72ac2SFelipe Balbi
19680977dc9SFelipe Balbi /**
19780977dc9SFelipe Balbi * dwc3_gadget_event_string - returns event name
19880977dc9SFelipe Balbi * @event: the event code
19980977dc9SFelipe Balbi */
dwc3_gadget_event_string(char * str,size_t size,const struct dwc3_event_devt * event)2007790b355SFelipe Balbi static inline const char *dwc3_gadget_event_string(char *str, size_t size,
2017790b355SFelipe Balbi const struct dwc3_event_devt *event)
20280977dc9SFelipe Balbi {
203f75cacc4SFelipe Balbi enum dwc3_link_state state = event->event_info & DWC3_LINK_STATE_MASK;
204f75cacc4SFelipe Balbi
205f75cacc4SFelipe Balbi switch (event->type) {
20680977dc9SFelipe Balbi case DWC3_DEVICE_EVENT_DISCONNECT:
2077790b355SFelipe Balbi snprintf(str, size, "Disconnect: [%s]",
208f75cacc4SFelipe Balbi dwc3_gadget_link_string(state));
209f75cacc4SFelipe Balbi break;
21080977dc9SFelipe Balbi case DWC3_DEVICE_EVENT_RESET:
2117790b355SFelipe Balbi snprintf(str, size, "Reset [%s]",
2127790b355SFelipe Balbi dwc3_gadget_link_string(state));
213f75cacc4SFelipe Balbi break;
21480977dc9SFelipe Balbi case DWC3_DEVICE_EVENT_CONNECT_DONE:
2157790b355SFelipe Balbi snprintf(str, size, "Connection Done [%s]",
216f75cacc4SFelipe Balbi dwc3_gadget_link_string(state));
217f75cacc4SFelipe Balbi break;
21880977dc9SFelipe Balbi case DWC3_DEVICE_EVENT_LINK_STATUS_CHANGE:
2197790b355SFelipe Balbi snprintf(str, size, "Link Change [%s]",
220f75cacc4SFelipe Balbi dwc3_gadget_link_string(state));
221f75cacc4SFelipe Balbi break;
22280977dc9SFelipe Balbi case DWC3_DEVICE_EVENT_WAKEUP:
2237790b355SFelipe Balbi snprintf(str, size, "WakeUp [%s]",
2247790b355SFelipe Balbi dwc3_gadget_link_string(state));
225f75cacc4SFelipe Balbi break;
2266f26ebb7SJack Pham case DWC3_DEVICE_EVENT_SUSPEND:
2276f26ebb7SJack Pham snprintf(str, size, "Suspend [%s]",
228f75cacc4SFelipe Balbi dwc3_gadget_link_string(state));
229f75cacc4SFelipe Balbi break;
23080977dc9SFelipe Balbi case DWC3_DEVICE_EVENT_SOF:
2317790b355SFelipe Balbi snprintf(str, size, "Start-Of-Frame [%s]",
232f75cacc4SFelipe Balbi dwc3_gadget_link_string(state));
233f75cacc4SFelipe Balbi break;
23480977dc9SFelipe Balbi case DWC3_DEVICE_EVENT_ERRATIC_ERROR:
2357790b355SFelipe Balbi snprintf(str, size, "Erratic Error [%s]",
236f75cacc4SFelipe Balbi dwc3_gadget_link_string(state));
237f75cacc4SFelipe Balbi break;
23880977dc9SFelipe Balbi case DWC3_DEVICE_EVENT_CMD_CMPL:
2397790b355SFelipe Balbi snprintf(str, size, "Command Complete [%s]",
240f75cacc4SFelipe Balbi dwc3_gadget_link_string(state));
241f75cacc4SFelipe Balbi break;
24280977dc9SFelipe Balbi case DWC3_DEVICE_EVENT_OVERFLOW:
2437790b355SFelipe Balbi snprintf(str, size, "Overflow [%s]",
2447790b355SFelipe Balbi dwc3_gadget_link_string(state));
245f75cacc4SFelipe Balbi break;
246f75cacc4SFelipe Balbi default:
2477790b355SFelipe Balbi snprintf(str, size, "UNKNOWN");
24880977dc9SFelipe Balbi }
24980977dc9SFelipe Balbi
250f75cacc4SFelipe Balbi return str;
25180977dc9SFelipe Balbi }
25280977dc9SFelipe Balbi
25380977dc9SFelipe Balbi /**
25480977dc9SFelipe Balbi * dwc3_ep_event_string - returns event name
25580977dc9SFelipe Balbi * @event: then event code
25680977dc9SFelipe Balbi */
dwc3_ep_event_string(char * str,size_t size,const struct dwc3_event_depevt * event,u32 ep0state)2577790b355SFelipe Balbi static inline const char *dwc3_ep_event_string(char *str, size_t size,
2587790b355SFelipe Balbi const struct dwc3_event_depevt *event, u32 ep0state)
25980977dc9SFelipe Balbi {
260f75cacc4SFelipe Balbi u8 epnum = event->endpoint_number;
26143c96be1SFelipe Balbi size_t len;
262f75cacc4SFelipe Balbi int status;
263f75cacc4SFelipe Balbi
264b32196e3SColin Ian King len = scnprintf(str, size, "ep%d%s: ", epnum >> 1,
265696fe69dSFelipe Balbi (epnum & 1) ? "in" : "out");
266f75cacc4SFelipe Balbi
267b27972b5SFelipe Balbi status = event->status;
268b27972b5SFelipe Balbi
269f75cacc4SFelipe Balbi switch (event->endpoint_event) {
27080977dc9SFelipe Balbi case DWC3_DEPEVT_XFERCOMPLETE:
271b32196e3SColin Ian King len += scnprintf(str + len, size - len,
272b32196e3SColin Ian King "Transfer Complete (%c%c%c)",
273b27972b5SFelipe Balbi status & DEPEVT_STATUS_SHORT ? 'S' : 's',
274b27972b5SFelipe Balbi status & DEPEVT_STATUS_IOC ? 'I' : 'i',
275b27972b5SFelipe Balbi status & DEPEVT_STATUS_LST ? 'L' : 'l');
276b27972b5SFelipe Balbi
27743c96be1SFelipe Balbi if (epnum <= 1)
278b32196e3SColin Ian King scnprintf(str + len, size - len, " [%s]",
2797790b355SFelipe Balbi dwc3_ep0_state_string(ep0state));
280f75cacc4SFelipe Balbi break;
28180977dc9SFelipe Balbi case DWC3_DEPEVT_XFERINPROGRESS:
282b32196e3SColin Ian King scnprintf(str + len, size - len,
28337a136aaSMichael Grzeschik "Transfer In Progress [%08x] (%c%c%c)",
284e1d542f7SFelipe Balbi event->parameters,
285b27972b5SFelipe Balbi status & DEPEVT_STATUS_SHORT ? 'S' : 's',
286b27972b5SFelipe Balbi status & DEPEVT_STATUS_IOC ? 'I' : 'i',
287b27972b5SFelipe Balbi status & DEPEVT_STATUS_LST ? 'M' : 'm');
288f75cacc4SFelipe Balbi break;
28980977dc9SFelipe Balbi case DWC3_DEPEVT_XFERNOTREADY:
290b32196e3SColin Ian King len += scnprintf(str + len, size - len,
29137a136aaSMichael Grzeschik "Transfer Not Ready [%08x]%s",
292e1d542f7SFelipe Balbi event->parameters,
293e1d542f7SFelipe Balbi status & DEPEVT_STATUS_TRANSFER_ACTIVE ?
294b27972b5SFelipe Balbi " (Active)" : " (Not Active)");
29545a2af2fSFelipe Balbi
29645a2af2fSFelipe Balbi /* Control Endpoints */
29745a2af2fSFelipe Balbi if (epnum <= 1) {
29845a2af2fSFelipe Balbi int phase = DEPEVT_STATUS_CONTROL_PHASE(event->status);
29945a2af2fSFelipe Balbi
30045a2af2fSFelipe Balbi switch (phase) {
30145a2af2fSFelipe Balbi case DEPEVT_STATUS_CONTROL_DATA:
302b32196e3SColin Ian King scnprintf(str + len, size - len,
3031381a511SFelipe Balbi " [Data Phase]");
30445a2af2fSFelipe Balbi break;
30545a2af2fSFelipe Balbi case DEPEVT_STATUS_CONTROL_STATUS:
306b32196e3SColin Ian King scnprintf(str + len, size - len,
3071381a511SFelipe Balbi " [Status Phase]");
30845a2af2fSFelipe Balbi }
30945a2af2fSFelipe Balbi }
310f75cacc4SFelipe Balbi break;
31180977dc9SFelipe Balbi case DWC3_DEPEVT_RXTXFIFOEVT:
312b32196e3SColin Ian King scnprintf(str + len, size - len, "FIFO");
313f75cacc4SFelipe Balbi break;
31480977dc9SFelipe Balbi case DWC3_DEPEVT_STREAMEVT:
315f75cacc4SFelipe Balbi status = event->status;
316f75cacc4SFelipe Balbi
317f75cacc4SFelipe Balbi switch (status) {
318f75cacc4SFelipe Balbi case DEPEVT_STREAMEVT_FOUND:
319b32196e3SColin Ian King scnprintf(str + len, size - len, " Stream %d Found",
320f75cacc4SFelipe Balbi event->parameters);
321f75cacc4SFelipe Balbi break;
322f75cacc4SFelipe Balbi case DEPEVT_STREAMEVT_NOTFOUND:
323f75cacc4SFelipe Balbi default:
324b32196e3SColin Ian King scnprintf(str + len, size - len, " Stream Not Found");
325f75cacc4SFelipe Balbi break;
32680977dc9SFelipe Balbi }
32780977dc9SFelipe Balbi
328f75cacc4SFelipe Balbi break;
329f75cacc4SFelipe Balbi case DWC3_DEPEVT_EPCMDCMPLT:
330b32196e3SColin Ian King scnprintf(str + len, size - len, "Endpoint Command Complete");
331f75cacc4SFelipe Balbi break;
332f75cacc4SFelipe Balbi default:
333b32196e3SColin Ian King scnprintf(str + len, size - len, "UNKNOWN");
334f75cacc4SFelipe Balbi }
335f75cacc4SFelipe Balbi
336f75cacc4SFelipe Balbi return str;
33780977dc9SFelipe Balbi }
33880977dc9SFelipe Balbi
339e996061bSFelipe Balbi /**
340e996061bSFelipe Balbi * dwc3_gadget_event_type_string - return event name
341e996061bSFelipe Balbi * @event: the event code
342e996061bSFelipe Balbi */
dwc3_gadget_event_type_string(u8 event)343e996061bSFelipe Balbi static inline const char *dwc3_gadget_event_type_string(u8 event)
344e996061bSFelipe Balbi {
345e996061bSFelipe Balbi switch (event) {
346e996061bSFelipe Balbi case DWC3_DEVICE_EVENT_DISCONNECT:
347e996061bSFelipe Balbi return "Disconnect";
348e996061bSFelipe Balbi case DWC3_DEVICE_EVENT_RESET:
349e996061bSFelipe Balbi return "Reset";
350e996061bSFelipe Balbi case DWC3_DEVICE_EVENT_CONNECT_DONE:
351e996061bSFelipe Balbi return "Connect Done";
352e996061bSFelipe Balbi case DWC3_DEVICE_EVENT_LINK_STATUS_CHANGE:
353e996061bSFelipe Balbi return "Link Status Change";
354e996061bSFelipe Balbi case DWC3_DEVICE_EVENT_WAKEUP:
355e996061bSFelipe Balbi return "Wake-Up";
356e996061bSFelipe Balbi case DWC3_DEVICE_EVENT_HIBER_REQ:
357e996061bSFelipe Balbi return "Hibernation";
3586f26ebb7SJack Pham case DWC3_DEVICE_EVENT_SUSPEND:
3596f26ebb7SJack Pham return "Suspend";
360e996061bSFelipe Balbi case DWC3_DEVICE_EVENT_SOF:
361e996061bSFelipe Balbi return "Start of Frame";
362e996061bSFelipe Balbi case DWC3_DEVICE_EVENT_ERRATIC_ERROR:
363e996061bSFelipe Balbi return "Erratic Error";
364e996061bSFelipe Balbi case DWC3_DEVICE_EVENT_CMD_CMPL:
365e996061bSFelipe Balbi return "Command Complete";
366e996061bSFelipe Balbi case DWC3_DEVICE_EVENT_OVERFLOW:
367e996061bSFelipe Balbi return "Overflow";
368e996061bSFelipe Balbi default:
369e996061bSFelipe Balbi return "UNKNOWN";
370e996061bSFelipe Balbi }
371e996061bSFelipe Balbi }
372e996061bSFelipe Balbi
dwc3_decode_event(char * str,size_t size,u32 event,u32 ep0state)3737790b355SFelipe Balbi static inline const char *dwc3_decode_event(char *str, size_t size, u32 event,
3747790b355SFelipe Balbi u32 ep0state)
375f75cacc4SFelipe Balbi {
37627c7ab0fSFelipe Balbi union dwc3_event evt;
37727c7ab0fSFelipe Balbi
37827c7ab0fSFelipe Balbi memcpy(&evt, &event, sizeof(event));
379f75cacc4SFelipe Balbi
380f75cacc4SFelipe Balbi if (evt.type.is_devspec)
3817790b355SFelipe Balbi return dwc3_gadget_event_string(str, size, &evt.devt);
382f75cacc4SFelipe Balbi else
3837790b355SFelipe Balbi return dwc3_ep_event_string(str, size, &evt.depevt, ep0state);
384f75cacc4SFelipe Balbi }
385f75cacc4SFelipe Balbi
dwc3_ep_cmd_status_string(int status)3860933df15SFelipe Balbi static inline const char *dwc3_ep_cmd_status_string(int status)
3870933df15SFelipe Balbi {
3880933df15SFelipe Balbi switch (status) {
3890933df15SFelipe Balbi case -ETIMEDOUT:
3900933df15SFelipe Balbi return "Timed Out";
3910933df15SFelipe Balbi case 0:
3920933df15SFelipe Balbi return "Successful";
3930933df15SFelipe Balbi case DEPEVT_TRANSFER_NO_RESOURCE:
3940933df15SFelipe Balbi return "No Resource";
3950933df15SFelipe Balbi case DEPEVT_TRANSFER_BUS_EXPIRY:
3960933df15SFelipe Balbi return "Bus Expiry";
3970933df15SFelipe Balbi default:
3980933df15SFelipe Balbi return "UNKNOWN";
3990933df15SFelipe Balbi }
4000933df15SFelipe Balbi }
4010933df15SFelipe Balbi
dwc3_gadget_generic_cmd_status_string(int status)40271f7e702SFelipe Balbi static inline const char *dwc3_gadget_generic_cmd_status_string(int status)
40371f7e702SFelipe Balbi {
40471f7e702SFelipe Balbi switch (status) {
40571f7e702SFelipe Balbi case -ETIMEDOUT:
40671f7e702SFelipe Balbi return "Timed Out";
40771f7e702SFelipe Balbi case 0:
40871f7e702SFelipe Balbi return "Successful";
40971f7e702SFelipe Balbi case 1:
41071f7e702SFelipe Balbi return "Error";
41171f7e702SFelipe Balbi default:
41271f7e702SFelipe Balbi return "UNKNOWN";
41371f7e702SFelipe Balbi }
41471f7e702SFelipe Balbi }
41571f7e702SFelipe Balbi
41657b14da5SFelipe Balbi
41772246da4SFelipe Balbi #ifdef CONFIG_DEBUG_FS
4188d396bb0SJack Pham extern void dwc3_debugfs_create_endpoint_dir(struct dwc3_ep *dep);
419be308d68SGreg Kroah-Hartman extern void dwc3_debugfs_remove_endpoint_dir(struct dwc3_ep *dep);
420035cbca1SFelipe Balbi extern void dwc3_debugfs_init(struct dwc3 *d);
421035cbca1SFelipe Balbi extern void dwc3_debugfs_exit(struct dwc3 *d);
42272246da4SFelipe Balbi #else
dwc3_debugfs_create_endpoint_dir(struct dwc3_ep * dep)4238d396bb0SJack Pham static inline void dwc3_debugfs_create_endpoint_dir(struct dwc3_ep *dep)
4248d396bb0SJack Pham { }
dwc3_debugfs_remove_endpoint_dir(struct dwc3_ep * dep)425be308d68SGreg Kroah-Hartman static inline void dwc3_debugfs_remove_endpoint_dir(struct dwc3_ep *dep)
426be308d68SGreg Kroah-Hartman { }
dwc3_debugfs_init(struct dwc3 * d)4274e9f3118SDu, Changbin static inline void dwc3_debugfs_init(struct dwc3 *d)
4284e9f3118SDu, Changbin { }
dwc3_debugfs_exit(struct dwc3 * d)42972246da4SFelipe Balbi static inline void dwc3_debugfs_exit(struct dwc3 *d)
43072246da4SFelipe Balbi { }
43172246da4SFelipe Balbi #endif
43280977dc9SFelipe Balbi #endif /* __DWC3_DEBUG_H */
433