diff options
Diffstat (limited to 'drivers/usb/mtu3/mtu3_trace.h')
-rw-r--r-- | drivers/usb/mtu3/mtu3_trace.h | 279 |
1 files changed, 279 insertions, 0 deletions
diff --git a/drivers/usb/mtu3/mtu3_trace.h b/drivers/usb/mtu3/mtu3_trace.h new file mode 100644 index 000000000000..050e30f0fbd4 --- /dev/null +++ b/drivers/usb/mtu3/mtu3_trace.h | |||
@@ -0,0 +1,279 @@ | |||
1 | // SPDX-License-Identifier: GPL-2.0 | ||
2 | /** | ||
3 | * mtu3_trace.h - trace support | ||
4 | * | ||
5 | * Copyright (C) 2019 MediaTek Inc. | ||
6 | * | ||
7 | * Author: Chunfeng Yun <chunfeng.yun@mediatek.com> | ||
8 | */ | ||
9 | |||
10 | #undef TRACE_SYSTEM | ||
11 | #define TRACE_SYSTEM mtu3 | ||
12 | |||
13 | #if !defined(__MTU3_TRACE_H__) || defined(TRACE_HEADER_MULTI_READ) | ||
14 | #define __MTU3_TRACE_H__ | ||
15 | |||
16 | #include <linux/types.h> | ||
17 | #include <linux/tracepoint.h> | ||
18 | |||
19 | #include "mtu3.h" | ||
20 | |||
21 | #define MTU3_MSG_MAX 256 | ||
22 | |||
23 | TRACE_EVENT(mtu3_log, | ||
24 | TP_PROTO(struct device *dev, struct va_format *vaf), | ||
25 | TP_ARGS(dev, vaf), | ||
26 | TP_STRUCT__entry( | ||
27 | __string(name, dev_name(dev)) | ||
28 | __dynamic_array(char, msg, MTU3_MSG_MAX) | ||
29 | ), | ||
30 | TP_fast_assign( | ||
31 | __assign_str(name, dev_name(dev)); | ||
32 | vsnprintf(__get_str(msg), MTU3_MSG_MAX, vaf->fmt, *vaf->va); | ||
33 | ), | ||
34 | TP_printk("%s: %s", __get_str(name), __get_str(msg)) | ||
35 | ); | ||
36 | |||
37 | TRACE_EVENT(mtu3_u3_ltssm_isr, | ||
38 | TP_PROTO(u32 intr), | ||
39 | TP_ARGS(intr), | ||
40 | TP_STRUCT__entry( | ||
41 | __field(u32, intr) | ||
42 | ), | ||
43 | TP_fast_assign( | ||
44 | __entry->intr = intr; | ||
45 | ), | ||
46 | TP_printk("(%08x) %s %s %s %s %s %s", __entry->intr, | ||
47 | __entry->intr & HOT_RST_INTR ? "HOT_RST" : "", | ||
48 | __entry->intr & WARM_RST_INTR ? "WARM_RST" : "", | ||
49 | __entry->intr & ENTER_U3_INTR ? "ENT_U3" : "", | ||
50 | __entry->intr & EXIT_U3_INTR ? "EXIT_U3" : "", | ||
51 | __entry->intr & VBUS_RISE_INTR ? "VBUS_RISE" : "", | ||
52 | __entry->intr & VBUS_FALL_INTR ? "VBUS_FALL" : "" | ||
53 | ) | ||
54 | ); | ||
55 | |||
56 | TRACE_EVENT(mtu3_u2_common_isr, | ||
57 | TP_PROTO(u32 intr), | ||
58 | TP_ARGS(intr), | ||
59 | TP_STRUCT__entry( | ||
60 | __field(u32, intr) | ||
61 | ), | ||
62 | TP_fast_assign( | ||
63 | __entry->intr = intr; | ||
64 | ), | ||
65 | TP_printk("(%08x) %s %s %s", __entry->intr, | ||
66 | __entry->intr & SUSPEND_INTR ? "SUSPEND" : "", | ||
67 | __entry->intr & RESUME_INTR ? "RESUME" : "", | ||
68 | __entry->intr & RESET_INTR ? "RESET" : "" | ||
69 | ) | ||
70 | ); | ||
71 | |||
72 | TRACE_EVENT(mtu3_qmu_isr, | ||
73 | TP_PROTO(u32 done_intr, u32 exp_intr), | ||
74 | TP_ARGS(done_intr, exp_intr), | ||
75 | TP_STRUCT__entry( | ||
76 | __field(u32, done_intr) | ||
77 | __field(u32, exp_intr) | ||
78 | ), | ||
79 | TP_fast_assign( | ||
80 | __entry->done_intr = done_intr; | ||
81 | __entry->exp_intr = exp_intr; | ||
82 | ), | ||
83 | TP_printk("done (tx %04x, rx %04x), exp (%08x)", | ||
84 | __entry->done_intr & 0xffff, | ||
85 | __entry->done_intr >> 16, | ||
86 | __entry->exp_intr | ||
87 | ) | ||
88 | ); | ||
89 | |||
90 | DECLARE_EVENT_CLASS(mtu3_log_setup, | ||
91 | TP_PROTO(struct usb_ctrlrequest *setup), | ||
92 | TP_ARGS(setup), | ||
93 | TP_STRUCT__entry( | ||
94 | __field(__u8, bRequestType) | ||
95 | __field(__u8, bRequest) | ||
96 | __field(__u16, wValue) | ||
97 | __field(__u16, wIndex) | ||
98 | __field(__u16, wLength) | ||
99 | ), | ||
100 | TP_fast_assign( | ||
101 | __entry->bRequestType = setup->bRequestType; | ||
102 | __entry->bRequest = setup->bRequest; | ||
103 | __entry->wValue = le16_to_cpu(setup->wValue); | ||
104 | __entry->wIndex = le16_to_cpu(setup->wIndex); | ||
105 | __entry->wLength = le16_to_cpu(setup->wLength); | ||
106 | ), | ||
107 | TP_printk("setup - %02x %02x %04x %04x %04x", | ||
108 | __entry->bRequestType, __entry->bRequest, | ||
109 | __entry->wValue, __entry->wIndex, __entry->wLength | ||
110 | ) | ||
111 | ); | ||
112 | |||
113 | DEFINE_EVENT(mtu3_log_setup, mtu3_handle_setup, | ||
114 | TP_PROTO(struct usb_ctrlrequest *setup), | ||
115 | TP_ARGS(setup) | ||
116 | ); | ||
117 | |||
118 | DECLARE_EVENT_CLASS(mtu3_log_request, | ||
119 | TP_PROTO(struct mtu3_request *mreq), | ||
120 | TP_ARGS(mreq), | ||
121 | TP_STRUCT__entry( | ||
122 | __string(name, mreq->mep->name) | ||
123 | __field(struct mtu3_request *, mreq) | ||
124 | __field(struct qmu_gpd *, gpd) | ||
125 | __field(unsigned int, actual) | ||
126 | __field(unsigned int, length) | ||
127 | __field(int, status) | ||
128 | __field(int, zero) | ||
129 | __field(int, no_interrupt) | ||
130 | ), | ||
131 | TP_fast_assign( | ||
132 | __assign_str(name, mreq->mep->name); | ||
133 | __entry->mreq = mreq; | ||
134 | __entry->gpd = mreq->gpd; | ||
135 | __entry->actual = mreq->request.actual; | ||
136 | __entry->length = mreq->request.length; | ||
137 | __entry->status = mreq->request.status; | ||
138 | __entry->zero = mreq->request.zero; | ||
139 | __entry->no_interrupt = mreq->request.no_interrupt; | ||
140 | ), | ||
141 | TP_printk("%s: req %p gpd %p len %u/%u %s%s --> %d", | ||
142 | __get_str(name), __entry->mreq, __entry->gpd, | ||
143 | __entry->actual, __entry->length, | ||
144 | __entry->zero ? "Z" : "z", | ||
145 | __entry->no_interrupt ? "i" : "I", | ||
146 | __entry->status | ||
147 | ) | ||
148 | ); | ||
149 | |||
150 | DEFINE_EVENT(mtu3_log_request, mtu3_alloc_request, | ||
151 | TP_PROTO(struct mtu3_request *req), | ||
152 | TP_ARGS(req) | ||
153 | ); | ||
154 | |||
155 | DEFINE_EVENT(mtu3_log_request, mtu3_free_request, | ||
156 | TP_PROTO(struct mtu3_request *req), | ||
157 | TP_ARGS(req) | ||
158 | ); | ||
159 | |||
160 | DEFINE_EVENT(mtu3_log_request, mtu3_gadget_queue, | ||
161 | TP_PROTO(struct mtu3_request *req), | ||
162 | TP_ARGS(req) | ||
163 | ); | ||
164 | |||
165 | DEFINE_EVENT(mtu3_log_request, mtu3_gadget_dequeue, | ||
166 | TP_PROTO(struct mtu3_request *req), | ||
167 | TP_ARGS(req) | ||
168 | ); | ||
169 | |||
170 | DEFINE_EVENT(mtu3_log_request, mtu3_req_complete, | ||
171 | TP_PROTO(struct mtu3_request *req), | ||
172 | TP_ARGS(req) | ||
173 | ); | ||
174 | |||
175 | DECLARE_EVENT_CLASS(mtu3_log_gpd, | ||
176 | TP_PROTO(struct mtu3_ep *mep, struct qmu_gpd *gpd), | ||
177 | TP_ARGS(mep, gpd), | ||
178 | TP_STRUCT__entry( | ||
179 | __string(name, mep->name) | ||
180 | __field(struct qmu_gpd *, gpd) | ||
181 | __field(u32, dw0) | ||
182 | __field(u32, dw1) | ||
183 | __field(u32, dw2) | ||
184 | __field(u32, dw3) | ||
185 | ), | ||
186 | TP_fast_assign( | ||
187 | __assign_str(name, mep->name); | ||
188 | __entry->gpd = gpd; | ||
189 | __entry->dw0 = le32_to_cpu(gpd->dw0_info); | ||
190 | __entry->dw1 = le32_to_cpu(gpd->next_gpd); | ||
191 | __entry->dw2 = le32_to_cpu(gpd->buffer); | ||
192 | __entry->dw3 = le32_to_cpu(gpd->dw3_info); | ||
193 | ), | ||
194 | TP_printk("%s: gpd %p - %08x %08x %08x %08x", | ||
195 | __get_str(name), __entry->gpd, | ||
196 | __entry->dw0, __entry->dw1, | ||
197 | __entry->dw2, __entry->dw3 | ||
198 | ) | ||
199 | ); | ||
200 | |||
201 | DEFINE_EVENT(mtu3_log_gpd, mtu3_prepare_gpd, | ||
202 | TP_PROTO(struct mtu3_ep *mep, struct qmu_gpd *gpd), | ||
203 | TP_ARGS(mep, gpd) | ||
204 | ); | ||
205 | |||
206 | DEFINE_EVENT(mtu3_log_gpd, mtu3_complete_gpd, | ||
207 | TP_PROTO(struct mtu3_ep *mep, struct qmu_gpd *gpd), | ||
208 | TP_ARGS(mep, gpd) | ||
209 | ); | ||
210 | |||
211 | DEFINE_EVENT(mtu3_log_gpd, mtu3_zlp_exp_gpd, | ||
212 | TP_PROTO(struct mtu3_ep *mep, struct qmu_gpd *gpd), | ||
213 | TP_ARGS(mep, gpd) | ||
214 | ); | ||
215 | |||
216 | DECLARE_EVENT_CLASS(mtu3_log_ep, | ||
217 | TP_PROTO(struct mtu3_ep *mep), | ||
218 | TP_ARGS(mep), | ||
219 | TP_STRUCT__entry( | ||
220 | __string(name, mep->name) | ||
221 | __field(unsigned int, type) | ||
222 | __field(unsigned int, slot) | ||
223 | __field(unsigned int, maxp) | ||
224 | __field(unsigned int, mult) | ||
225 | __field(unsigned int, maxburst) | ||
226 | __field(unsigned int, flags) | ||
227 | __field(unsigned int, direction) | ||
228 | __field(struct mtu3_gpd_ring *, gpd_ring) | ||
229 | ), | ||
230 | TP_fast_assign( | ||
231 | __assign_str(name, mep->name); | ||
232 | __entry->type = mep->type; | ||
233 | __entry->slot = mep->slot; | ||
234 | __entry->maxp = mep->ep.maxpacket; | ||
235 | __entry->mult = mep->ep.mult; | ||
236 | __entry->maxburst = mep->ep.maxburst; | ||
237 | __entry->flags = mep->flags; | ||
238 | __entry->direction = mep->is_in; | ||
239 | __entry->gpd_ring = &mep->gpd_ring; | ||
240 | ), | ||
241 | TP_printk("%s: type %d maxp %d slot %d mult %d burst %d ring %p/%pad flags %c:%c%c%c:%c", | ||
242 | __get_str(name), __entry->type, | ||
243 | __entry->maxp, __entry->slot, | ||
244 | __entry->mult, __entry->maxburst, | ||
245 | __entry->gpd_ring, &__entry->gpd_ring->dma, | ||
246 | __entry->flags & MTU3_EP_ENABLED ? 'E' : 'e', | ||
247 | __entry->flags & MTU3_EP_STALL ? 'S' : 's', | ||
248 | __entry->flags & MTU3_EP_WEDGE ? 'W' : 'w', | ||
249 | __entry->flags & MTU3_EP_BUSY ? 'B' : 'b', | ||
250 | __entry->direction ? '<' : '>' | ||
251 | ) | ||
252 | ); | ||
253 | |||
254 | DEFINE_EVENT(mtu3_log_ep, mtu3_gadget_ep_enable, | ||
255 | TP_PROTO(struct mtu3_ep *mep), | ||
256 | TP_ARGS(mep) | ||
257 | ); | ||
258 | |||
259 | DEFINE_EVENT(mtu3_log_ep, mtu3_gadget_ep_disable, | ||
260 | TP_PROTO(struct mtu3_ep *mep), | ||
261 | TP_ARGS(mep) | ||
262 | ); | ||
263 | |||
264 | DEFINE_EVENT(mtu3_log_ep, mtu3_gadget_ep_set_halt, | ||
265 | TP_PROTO(struct mtu3_ep *mep), | ||
266 | TP_ARGS(mep) | ||
267 | ); | ||
268 | |||
269 | #endif /* __MTU3_TRACE_H__ */ | ||
270 | |||
271 | /* this part has to be here */ | ||
272 | |||
273 | #undef TRACE_INCLUDE_PATH | ||
274 | #define TRACE_INCLUDE_PATH . | ||
275 | |||
276 | #undef TRACE_INCLUDE_FILE | ||
277 | #define TRACE_INCLUDE_FILE mtu3_trace | ||
278 | |||
279 | #include <trace/define_trace.h> | ||