aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBin Liu <b-liu@ti.com>2016-06-30 13:12:27 -0400
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>2016-07-16 19:23:57 -0400
commitfc78003e5345a3c0b8461dbb75190693407ae2ca (patch)
treeb40bdcda14ea8d96580d7590a17f9848c256627b
parent19ca682e03fbf0349e6c6ef76c786136176d3ca6 (diff)
usb: musb: gadget: add usb-request tracepoints
Add usb_request tracepoints for gadget mode. Signed-off-by: Bin Liu <b-liu@ti.com> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
-rw-r--r--drivers/usb/musb/musb_gadget.c35
-rw-r--r--drivers/usb/musb/musb_trace.h76
2 files changed, 90 insertions, 21 deletions
diff --git a/drivers/usb/musb/musb_gadget.c b/drivers/usb/musb/musb_gadget.c
index 9616059b6a3d..6d1e975e9605 100644
--- a/drivers/usb/musb/musb_gadget.c
+++ b/drivers/usb/musb/musb_gadget.c
@@ -44,6 +44,7 @@
44#include <linux/slab.h> 44#include <linux/slab.h>
45 45
46#include "musb_core.h" 46#include "musb_core.h"
47#include "musb_trace.h"
47 48
48 49
49/* ----------------------------------------------------------------------- */ 50/* ----------------------------------------------------------------------- */
@@ -167,15 +168,7 @@ __acquires(ep->musb->lock)
167 if (!dma_mapping_error(&musb->g.dev, request->dma)) 168 if (!dma_mapping_error(&musb->g.dev, request->dma))
168 unmap_dma_buffer(req, musb); 169 unmap_dma_buffer(req, musb);
169 170
170 if (request->status == 0) 171 trace_musb_req_gb(req);
171 musb_dbg(musb, "%s done request %p, %d/",
172 ep->end_point.name, request,
173 req->request.actual, req->request.length);
174 else
175 musb_dbg(musb, "%s request %p, %d/%d fault %d",
176 ep->end_point.name, request,
177 req->request.actual, req->request.length,
178 request->status);
179 usb_gadget_giveback_request(&req->ep->end_point, &req->request); 172 usb_gadget_giveback_request(&req->ep->end_point, &req->request);
180 spin_lock(&musb->lock); 173 spin_lock(&musb->lock);
181 ep->busy = busy; 174 ep->busy = busy;
@@ -449,6 +442,7 @@ void musb_g_tx(struct musb *musb, u8 epnum)
449 req = next_request(musb_ep); 442 req = next_request(musb_ep);
450 request = &req->request; 443 request = &req->request;
451 444
445 trace_musb_req_tx(req);
452 csr = musb_readw(epio, MUSB_TXCSR); 446 csr = musb_readw(epio, MUSB_TXCSR);
453 musb_dbg(musb, "<== %s, txcsr %04x", musb_ep->end_point.name, csr); 447 musb_dbg(musb, "<== %s, txcsr %04x", musb_ep->end_point.name, csr);
454 448
@@ -847,6 +841,7 @@ void musb_g_rx(struct musb *musb, u8 epnum)
847 if (!req) 841 if (!req)
848 return; 842 return;
849 843
844 trace_musb_req_rx(req);
850 request = &req->request; 845 request = &req->request;
851 846
852 csr = musb_readw(epio, MUSB_RXCSR); 847 csr = musb_readw(epio, MUSB_RXCSR);
@@ -892,11 +887,6 @@ void musb_g_rx(struct musb *musb, u8 epnum)
892 887
893 request->actual += musb_ep->dma->actual_len; 888 request->actual += musb_ep->dma->actual_len;
894 889
895 musb_dbg(musb, "RXCSR%d %04x, dma off, %04x, len %zu, req %p",
896 epnum, csr,
897 musb_readw(epio, MUSB_RXCSR),
898 musb_ep->dma->actual_len, request);
899
900#if defined(CONFIG_USB_INVENTRA_DMA) || defined(CONFIG_USB_TUSB_OMAP_DMA) || \ 890#if defined(CONFIG_USB_INVENTRA_DMA) || defined(CONFIG_USB_TUSB_OMAP_DMA) || \
901 defined(CONFIG_USB_UX500_DMA) 891 defined(CONFIG_USB_UX500_DMA)
902 /* Autoclear doesn't clear RxPktRdy for short packets */ 892 /* Autoclear doesn't clear RxPktRdy for short packets */
@@ -1194,6 +1184,7 @@ struct usb_request *musb_alloc_request(struct usb_ep *ep, gfp_t gfp_flags)
1194 request->epnum = musb_ep->current_epnum; 1184 request->epnum = musb_ep->current_epnum;
1195 request->ep = musb_ep; 1185 request->ep = musb_ep;
1196 1186
1187 trace_musb_req_alloc(request);
1197 return &request->request; 1188 return &request->request;
1198} 1189}
1199 1190
@@ -1203,7 +1194,10 @@ struct usb_request *musb_alloc_request(struct usb_ep *ep, gfp_t gfp_flags)
1203 */ 1194 */
1204void musb_free_request(struct usb_ep *ep, struct usb_request *req) 1195void musb_free_request(struct usb_ep *ep, struct usb_request *req)
1205{ 1196{
1206 kfree(to_musb_request(req)); 1197 struct musb_request *request = to_musb_request(req);
1198
1199 trace_musb_req_free(request);
1200 kfree(request);
1207} 1201}
1208 1202
1209static LIST_HEAD(buffers); 1203static LIST_HEAD(buffers);
@@ -1220,10 +1214,7 @@ struct free_record {
1220 */ 1214 */
1221void musb_ep_restart(struct musb *musb, struct musb_request *req) 1215void musb_ep_restart(struct musb *musb, struct musb_request *req)
1222{ 1216{
1223 musb_dbg(musb, "<== %s request %p len %u on hw_ep%d", 1217 trace_musb_req_start(req);
1224 req->tx ? "TX/IN" : "RX/OUT",
1225 &req->request, req->request.length, req->epnum);
1226
1227 musb_ep_select(musb->mregs, req->epnum); 1218 musb_ep_select(musb->mregs, req->epnum);
1228 if (req->tx) 1219 if (req->tx)
1229 txstate(musb, req); 1220 txstate(musb, req);
@@ -1254,7 +1245,7 @@ static int musb_gadget_queue(struct usb_ep *ep, struct usb_request *req,
1254 if (request->ep != musb_ep) 1245 if (request->ep != musb_ep)
1255 return -EINVAL; 1246 return -EINVAL;
1256 1247
1257 musb_dbg(musb, "<== to %s request=%p", ep->name, req); 1248 trace_musb_req_enq(request);
1258 1249
1259 /* request is mine now... */ 1250 /* request is mine now... */
1260 request->request.actual = 0; 1251 request->request.actual = 0;
@@ -1296,9 +1287,11 @@ static int musb_gadget_dequeue(struct usb_ep *ep, struct usb_request *request)
1296 int status = 0; 1287 int status = 0;
1297 struct musb *musb = musb_ep->musb; 1288 struct musb *musb = musb_ep->musb;
1298 1289
1299 if (!ep || !request || to_musb_request(request)->ep != musb_ep) 1290 if (!ep || !request || req->ep != musb_ep)
1300 return -EINVAL; 1291 return -EINVAL;
1301 1292
1293 trace_musb_req_deq(req);
1294
1302 spin_lock_irqsave(&musb->lock, flags); 1295 spin_lock_irqsave(&musb->lock, flags);
1303 1296
1304 list_for_each_entry(r, &musb_ep->req_list, list) { 1297 list_for_each_entry(r, &musb_ep->req_list, list) {
diff --git a/drivers/usb/musb/musb_trace.h b/drivers/usb/musb/musb_trace.h
index 39258f6fdde8..27d1a9b3efc8 100644
--- a/drivers/usb/musb/musb_trace.h
+++ b/drivers/usb/musb/musb_trace.h
@@ -212,6 +212,82 @@ DEFINE_EVENT(musb_urb, musb_urb_deq,
212 TP_ARGS(musb, urb) 212 TP_ARGS(musb, urb)
213); 213);
214 214
215DECLARE_EVENT_CLASS(musb_req,
216 TP_PROTO(struct musb_request *req),
217 TP_ARGS(req),
218 TP_STRUCT__entry(
219 __field(struct usb_request *, req)
220 __field(u8, is_tx)
221 __field(u8, epnum)
222 __field(int, status)
223 __field(unsigned int, buf_len)
224 __field(unsigned int, actual_len)
225 __field(unsigned int, zero)
226 __field(unsigned int, short_not_ok)
227 __field(unsigned int, no_interrupt)
228 ),
229 TP_fast_assign(
230 __entry->req = &req->request;
231 __entry->is_tx = req->tx;
232 __entry->epnum = req->epnum;
233 __entry->status = req->request.status;
234 __entry->buf_len = req->request.length;
235 __entry->actual_len = req->request.actual;
236 __entry->zero = req->request.zero;
237 __entry->short_not_ok = req->request.short_not_ok;
238 __entry->no_interrupt = req->request.no_interrupt;
239 ),
240 TP_printk("%p, ep%d %s, %s%s%s, len %d/%d, status %d",
241 __entry->req, __entry->epnum,
242 __entry->is_tx ? "tx/IN" : "rx/OUT",
243 __entry->zero ? "Z" : "z",
244 __entry->short_not_ok ? "S" : "s",
245 __entry->no_interrupt ? "I" : "i",
246 __entry->actual_len, __entry->buf_len,
247 __entry->status
248 )
249);
250
251DEFINE_EVENT(musb_req, musb_req_gb,
252 TP_PROTO(struct musb_request *req),
253 TP_ARGS(req)
254);
255
256DEFINE_EVENT(musb_req, musb_req_tx,
257 TP_PROTO(struct musb_request *req),
258 TP_ARGS(req)
259);
260
261DEFINE_EVENT(musb_req, musb_req_rx,
262 TP_PROTO(struct musb_request *req),
263 TP_ARGS(req)
264);
265
266DEFINE_EVENT(musb_req, musb_req_alloc,
267 TP_PROTO(struct musb_request *req),
268 TP_ARGS(req)
269);
270
271DEFINE_EVENT(musb_req, musb_req_free,
272 TP_PROTO(struct musb_request *req),
273 TP_ARGS(req)
274);
275
276DEFINE_EVENT(musb_req, musb_req_start,
277 TP_PROTO(struct musb_request *req),
278 TP_ARGS(req)
279);
280
281DEFINE_EVENT(musb_req, musb_req_enq,
282 TP_PROTO(struct musb_request *req),
283 TP_ARGS(req)
284);
285
286DEFINE_EVENT(musb_req, musb_req_deq,
287 TP_PROTO(struct musb_request *req),
288 TP_ARGS(req)
289);
290
215#endif /* __MUSB_TRACE_H */ 291#endif /* __MUSB_TRACE_H */
216 292
217/* this part has to be here */ 293/* this part has to be here */