]>
Commit | Line | Data |
---|---|---|
83374e03 CY |
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> |