aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorFelipe Balbi <felipe.balbi@linux.intel.com>2016-05-23 07:16:19 -0400
committerFelipe Balbi <felipe.balbi@linux.intel.com>2016-06-20 05:32:41 -0400
commit71f7e7027028d5a8ef15dccc587dbd6c6b7f544f (patch)
tree01f58bc5278100a9e27305c92aceaa54ab62e285
parent88811f7b722c417ececbc7f278c26d8df8606d02 (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.h14
-rw-r--r--drivers/usb/dwc3/gadget.c14
-rw-r--r--drivers/usb/dwc3/trace.h15
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
299static 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
299void dwc3_trace(void (*trace)(struct va_format *), const char *fmt, ...); 313void 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,
207int dwc3_send_gadget_generic_command(struct dwc3 *dwc, unsigned cmd, u32 param) 207int 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
169DECLARE_EVENT_CLASS(dwc3_log_generic_cmd, 169DECLARE_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
186DEFINE_EVENT(dwc3_log_generic_cmd, dwc3_gadget_generic_cmd, 189DEFINE_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
191DECLARE_EVENT_CLASS(dwc3_log_gadget_ep_cmd, 194DECLARE_EVENT_CLASS(dwc3_log_gadget_ep_cmd,