diff options
author | Felipe Balbi <felipe.balbi@linux.intel.com> | 2016-05-23 07:16:19 -0400 |
---|---|---|
committer | Felipe Balbi <felipe.balbi@linux.intel.com> | 2016-06-20 05:32:41 -0400 |
commit | 71f7e7027028d5a8ef15dccc587dbd6c6b7f544f (patch) | |
tree | 01f58bc5278100a9e27305c92aceaa54ab62e285 | |
parent | 88811f7b722c417ececbc7f278c26d8df8606d02 (diff) |
usb: dwc3: gadget: improve gcmd trace
Just like we did for endpoint commands, let's have a
single trace output for the command and its
status. This will improve trace readability
Signed-off-by: Felipe Balbi <felipe.balbi@linux.intel.com>
-rw-r--r-- | drivers/usb/dwc3/debug.h | 14 | ||||
-rw-r--r-- | drivers/usb/dwc3/gadget.c | 14 | ||||
-rw-r--r-- | drivers/usb/dwc3/trace.h | 15 |
3 files changed, 29 insertions, 14 deletions
diff --git a/drivers/usb/dwc3/debug.h b/drivers/usb/dwc3/debug.h index 8eed4c7cc76b..22dfc3dd6a13 100644 --- a/drivers/usb/dwc3/debug.h +++ b/drivers/usb/dwc3/debug.h | |||
@@ -296,6 +296,20 @@ static inline const char *dwc3_ep_cmd_status_string(int status) | |||
296 | } | 296 | } |
297 | } | 297 | } |
298 | 298 | ||
299 | static inline const char *dwc3_gadget_generic_cmd_status_string(int status) | ||
300 | { | ||
301 | switch (status) { | ||
302 | case -ETIMEDOUT: | ||
303 | return "Timed Out"; | ||
304 | case 0: | ||
305 | return "Successful"; | ||
306 | case 1: | ||
307 | return "Error"; | ||
308 | default: | ||
309 | return "UNKNOWN"; | ||
310 | } | ||
311 | } | ||
312 | |||
299 | void dwc3_trace(void (*trace)(struct va_format *), const char *fmt, ...); | 313 | void dwc3_trace(void (*trace)(struct va_format *), const char *fmt, ...); |
300 | 314 | ||
301 | #ifdef CONFIG_DEBUG_FS | 315 | #ifdef CONFIG_DEBUG_FS |
diff --git a/drivers/usb/dwc3/gadget.c b/drivers/usb/dwc3/gadget.c index 609acd7b1520..6a18b3d0dccf 100644 --- a/drivers/usb/dwc3/gadget.c +++ b/drivers/usb/dwc3/gadget.c | |||
@@ -207,32 +207,30 @@ void dwc3_gadget_giveback(struct dwc3_ep *dep, struct dwc3_request *req, | |||
207 | int dwc3_send_gadget_generic_command(struct dwc3 *dwc, unsigned cmd, u32 param) | 207 | int dwc3_send_gadget_generic_command(struct dwc3 *dwc, unsigned cmd, u32 param) |
208 | { | 208 | { |
209 | u32 timeout = 500; | 209 | u32 timeout = 500; |
210 | int status = 0; | ||
210 | int ret = 0; | 211 | int ret = 0; |
211 | u32 reg; | 212 | u32 reg; |
212 | 213 | ||
213 | trace_dwc3_gadget_generic_cmd(cmd, param); | ||
214 | |||
215 | dwc3_writel(dwc->regs, DWC3_DGCMDPAR, param); | 214 | dwc3_writel(dwc->regs, DWC3_DGCMDPAR, param); |
216 | dwc3_writel(dwc->regs, DWC3_DGCMD, cmd | DWC3_DGCMD_CMDACT); | 215 | dwc3_writel(dwc->regs, DWC3_DGCMD, cmd | DWC3_DGCMD_CMDACT); |
217 | 216 | ||
218 | do { | 217 | do { |
219 | reg = dwc3_readl(dwc->regs, DWC3_DGCMD); | 218 | reg = dwc3_readl(dwc->regs, DWC3_DGCMD); |
220 | if (!(reg & DWC3_DGCMD_CMDACT)) { | 219 | if (!(reg & DWC3_DGCMD_CMDACT)) { |
221 | dwc3_trace(trace_dwc3_gadget, | 220 | status = DWC3_DGCMD_STATUS(reg); |
222 | "Command Complete --> %d", | 221 | if (status) |
223 | DWC3_DGCMD_STATUS(reg)); | ||
224 | if (DWC3_DGCMD_STATUS(reg)) | ||
225 | ret = -EINVAL; | 222 | ret = -EINVAL; |
226 | break; | 223 | break; |
227 | } | 224 | } |
228 | } while (timeout--); | 225 | } while (timeout--); |
229 | 226 | ||
230 | if (!timeout) { | 227 | if (!timeout) { |
231 | dwc3_trace(trace_dwc3_gadget, | ||
232 | "Command Timed Out"); | ||
233 | ret = -ETIMEDOUT; | 228 | ret = -ETIMEDOUT; |
229 | status = -ETIMEDOUT; | ||
234 | } | 230 | } |
235 | 231 | ||
232 | trace_dwc3_gadget_generic_cmd(cmd, param, status); | ||
233 | |||
236 | return ret; | 234 | return ret; |
237 | } | 235 | } |
238 | 236 | ||
diff --git a/drivers/usb/dwc3/trace.h b/drivers/usb/dwc3/trace.h index 040f28b27d56..f43f9ebf7c3f 100644 --- a/drivers/usb/dwc3/trace.h +++ b/drivers/usb/dwc3/trace.h | |||
@@ -167,25 +167,28 @@ DEFINE_EVENT(dwc3_log_request, dwc3_gadget_giveback, | |||
167 | ); | 167 | ); |
168 | 168 | ||
169 | DECLARE_EVENT_CLASS(dwc3_log_generic_cmd, | 169 | DECLARE_EVENT_CLASS(dwc3_log_generic_cmd, |
170 | TP_PROTO(unsigned int cmd, u32 param), | 170 | TP_PROTO(unsigned int cmd, u32 param, int status), |
171 | TP_ARGS(cmd, param), | 171 | TP_ARGS(cmd, param, status), |
172 | TP_STRUCT__entry( | 172 | TP_STRUCT__entry( |
173 | __field(unsigned int, cmd) | 173 | __field(unsigned int, cmd) |
174 | __field(u32, param) | 174 | __field(u32, param) |
175 | __field(int, status) | ||
175 | ), | 176 | ), |
176 | TP_fast_assign( | 177 | TP_fast_assign( |
177 | __entry->cmd = cmd; | 178 | __entry->cmd = cmd; |
178 | __entry->param = param; | 179 | __entry->param = param; |
180 | __entry->status = status; | ||
179 | ), | 181 | ), |
180 | TP_printk("cmd '%s' [%d] param %08x", | 182 | TP_printk("cmd '%s' [%d] param %08x --> status: %s", |
181 | dwc3_gadget_generic_cmd_string(__entry->cmd), | 183 | dwc3_gadget_generic_cmd_string(__entry->cmd), |
182 | __entry->cmd, __entry->param | 184 | __entry->cmd, __entry->param, |
185 | dwc3_gadget_generic_cmd_status_string(__entry->status) | ||
183 | ) | 186 | ) |
184 | ); | 187 | ); |
185 | 188 | ||
186 | DEFINE_EVENT(dwc3_log_generic_cmd, dwc3_gadget_generic_cmd, | 189 | DEFINE_EVENT(dwc3_log_generic_cmd, dwc3_gadget_generic_cmd, |
187 | TP_PROTO(unsigned int cmd, u32 param), | 190 | TP_PROTO(unsigned int cmd, u32 param, int status), |
188 | TP_ARGS(cmd, param) | 191 | TP_ARGS(cmd, param, status) |
189 | ); | 192 | ); |
190 | 193 | ||
191 | DECLARE_EVENT_CLASS(dwc3_log_gadget_ep_cmd, | 194 | DECLARE_EVENT_CLASS(dwc3_log_gadget_ep_cmd, |