xref: /openbmc/linux/drivers/misc/cxl/trace.h (revision ca55b2fe)
1 /*
2  * Copyright 2015 IBM Corp.
3  *
4  * This program is free software; you can redistribute it and/or
5  * modify it under the terms of the GNU General Public License
6  * as published by the Free Software Foundation; either version
7  * 2 of the License, or (at your option) any later version.
8  */
9 
10 #undef TRACE_SYSTEM
11 #define TRACE_SYSTEM cxl
12 
13 #if !defined(_CXL_TRACE_H) || defined(TRACE_HEADER_MULTI_READ)
14 #define _CXL_TRACE_H
15 
16 #include <linux/tracepoint.h>
17 
18 #include "cxl.h"
19 
20 #define DSISR_FLAGS \
21 	{ CXL_PSL_DSISR_An_DS,	"DS" }, \
22 	{ CXL_PSL_DSISR_An_DM,	"DM" }, \
23 	{ CXL_PSL_DSISR_An_ST,	"ST" }, \
24 	{ CXL_PSL_DSISR_An_UR,	"UR" }, \
25 	{ CXL_PSL_DSISR_An_PE,	"PE" }, \
26 	{ CXL_PSL_DSISR_An_AE,	"AE" }, \
27 	{ CXL_PSL_DSISR_An_OC,	"OC" }, \
28 	{ CXL_PSL_DSISR_An_M,	"M" }, \
29 	{ CXL_PSL_DSISR_An_P,	"P" }, \
30 	{ CXL_PSL_DSISR_An_A,	"A" }, \
31 	{ CXL_PSL_DSISR_An_S,	"S" }, \
32 	{ CXL_PSL_DSISR_An_K,	"K" }
33 
34 #define TFC_FLAGS \
35 	{ CXL_PSL_TFC_An_A,	"A" }, \
36 	{ CXL_PSL_TFC_An_C,	"C" }, \
37 	{ CXL_PSL_TFC_An_AE,	"AE" }, \
38 	{ CXL_PSL_TFC_An_R,	"R" }
39 
40 #define LLCMD_NAMES \
41 	{ CXL_SPA_SW_CMD_TERMINATE,	"TERMINATE" }, \
42 	{ CXL_SPA_SW_CMD_REMOVE,	"REMOVE" }, \
43 	{ CXL_SPA_SW_CMD_SUSPEND,	"SUSPEND" }, \
44 	{ CXL_SPA_SW_CMD_RESUME,	"RESUME" }, \
45 	{ CXL_SPA_SW_CMD_ADD,		"ADD" }, \
46 	{ CXL_SPA_SW_CMD_UPDATE,	"UPDATE" }
47 
48 #define AFU_COMMANDS \
49 	{ 0,			"DISABLE" }, \
50 	{ CXL_AFU_Cntl_An_E,	"ENABLE" }, \
51 	{ CXL_AFU_Cntl_An_RA,	"RESET" }
52 
53 #define PSL_COMMANDS \
54 	{ CXL_PSL_SCNTL_An_Pc,	"PURGE" }, \
55 	{ CXL_PSL_SCNTL_An_Sc,	"SUSPEND" }
56 
57 
58 DECLARE_EVENT_CLASS(cxl_pe_class,
59 	TP_PROTO(struct cxl_context *ctx),
60 
61 	TP_ARGS(ctx),
62 
63 	TP_STRUCT__entry(
64 		__field(u8, card)
65 		__field(u8, afu)
66 		__field(u16, pe)
67 	),
68 
69 	TP_fast_assign(
70 		__entry->card = ctx->afu->adapter->adapter_num;
71 		__entry->afu = ctx->afu->slice;
72 		__entry->pe = ctx->pe;
73 	),
74 
75 	TP_printk("afu%i.%i pe=%i",
76 		__entry->card,
77 		__entry->afu,
78 		__entry->pe
79 	)
80 );
81 
82 
83 TRACE_EVENT(cxl_attach,
84 	TP_PROTO(struct cxl_context *ctx, u64 wed, s16 num_interrupts, u64 amr),
85 
86 	TP_ARGS(ctx, wed, num_interrupts, amr),
87 
88 	TP_STRUCT__entry(
89 		__field(u8, card)
90 		__field(u8, afu)
91 		__field(u16, pe)
92 		__field(pid_t, pid)
93 		__field(u64, wed)
94 		__field(u64, amr)
95 		__field(s16, num_interrupts)
96 	),
97 
98 	TP_fast_assign(
99 		__entry->card = ctx->afu->adapter->adapter_num;
100 		__entry->afu = ctx->afu->slice;
101 		__entry->pe = ctx->pe;
102 		__entry->pid = pid_nr(ctx->pid);
103 		__entry->wed = wed;
104 		__entry->amr = amr;
105 		__entry->num_interrupts = num_interrupts;
106 	),
107 
108 	TP_printk("afu%i.%i pid=%i pe=%i wed=0x%016llx irqs=%i amr=0x%llx",
109 		__entry->card,
110 		__entry->afu,
111 		__entry->pid,
112 		__entry->pe,
113 		__entry->wed,
114 		__entry->num_interrupts,
115 		__entry->amr
116 	)
117 );
118 
119 DEFINE_EVENT(cxl_pe_class, cxl_detach,
120 	TP_PROTO(struct cxl_context *ctx),
121 	TP_ARGS(ctx)
122 );
123 
124 TRACE_EVENT(cxl_afu_irq,
125 	TP_PROTO(struct cxl_context *ctx, int afu_irq, int virq, irq_hw_number_t hwirq),
126 
127 	TP_ARGS(ctx, afu_irq, virq, hwirq),
128 
129 	TP_STRUCT__entry(
130 		__field(u8, card)
131 		__field(u8, afu)
132 		__field(u16, pe)
133 		__field(u16, afu_irq)
134 		__field(int, virq)
135 		__field(irq_hw_number_t, hwirq)
136 	),
137 
138 	TP_fast_assign(
139 		__entry->card = ctx->afu->adapter->adapter_num;
140 		__entry->afu = ctx->afu->slice;
141 		__entry->pe = ctx->pe;
142 		__entry->afu_irq = afu_irq;
143 		__entry->virq = virq;
144 		__entry->hwirq = hwirq;
145 	),
146 
147 	TP_printk("afu%i.%i pe=%i afu_irq=%i virq=%i hwirq=0x%lx",
148 		__entry->card,
149 		__entry->afu,
150 		__entry->pe,
151 		__entry->afu_irq,
152 		__entry->virq,
153 		__entry->hwirq
154 	)
155 );
156 
157 TRACE_EVENT(cxl_psl_irq,
158 	TP_PROTO(struct cxl_context *ctx, int irq, u64 dsisr, u64 dar),
159 
160 	TP_ARGS(ctx, irq, dsisr, dar),
161 
162 	TP_STRUCT__entry(
163 		__field(u8, card)
164 		__field(u8, afu)
165 		__field(u16, pe)
166 		__field(int, irq)
167 		__field(u64, dsisr)
168 		__field(u64, dar)
169 	),
170 
171 	TP_fast_assign(
172 		__entry->card = ctx->afu->adapter->adapter_num;
173 		__entry->afu = ctx->afu->slice;
174 		__entry->pe = ctx->pe;
175 		__entry->irq = irq;
176 		__entry->dsisr = dsisr;
177 		__entry->dar = dar;
178 	),
179 
180 	TP_printk("afu%i.%i pe=%i irq=%i dsisr=%s dar=0x%016llx",
181 		__entry->card,
182 		__entry->afu,
183 		__entry->pe,
184 		__entry->irq,
185 		__print_flags(__entry->dsisr, "|", DSISR_FLAGS),
186 		__entry->dar
187 	)
188 );
189 
190 TRACE_EVENT(cxl_psl_irq_ack,
191 	TP_PROTO(struct cxl_context *ctx, u64 tfc),
192 
193 	TP_ARGS(ctx, tfc),
194 
195 	TP_STRUCT__entry(
196 		__field(u8, card)
197 		__field(u8, afu)
198 		__field(u16, pe)
199 		__field(u64, tfc)
200 	),
201 
202 	TP_fast_assign(
203 		__entry->card = ctx->afu->adapter->adapter_num;
204 		__entry->afu = ctx->afu->slice;
205 		__entry->pe = ctx->pe;
206 		__entry->tfc = tfc;
207 	),
208 
209 	TP_printk("afu%i.%i pe=%i tfc=%s",
210 		__entry->card,
211 		__entry->afu,
212 		__entry->pe,
213 		__print_flags(__entry->tfc, "|", TFC_FLAGS)
214 	)
215 );
216 
217 TRACE_EVENT(cxl_ste_miss,
218 	TP_PROTO(struct cxl_context *ctx, u64 dar),
219 
220 	TP_ARGS(ctx, dar),
221 
222 	TP_STRUCT__entry(
223 		__field(u8, card)
224 		__field(u8, afu)
225 		__field(u16, pe)
226 		__field(u64, dar)
227 	),
228 
229 	TP_fast_assign(
230 		__entry->card = ctx->afu->adapter->adapter_num;
231 		__entry->afu = ctx->afu->slice;
232 		__entry->pe = ctx->pe;
233 		__entry->dar = dar;
234 	),
235 
236 	TP_printk("afu%i.%i pe=%i dar=0x%016llx",
237 		__entry->card,
238 		__entry->afu,
239 		__entry->pe,
240 		__entry->dar
241 	)
242 );
243 
244 TRACE_EVENT(cxl_ste_write,
245 	TP_PROTO(struct cxl_context *ctx, unsigned int idx, u64 e, u64 v),
246 
247 	TP_ARGS(ctx, idx, e, v),
248 
249 	TP_STRUCT__entry(
250 		__field(u8, card)
251 		__field(u8, afu)
252 		__field(u16, pe)
253 		__field(unsigned int, idx)
254 		__field(u64, e)
255 		__field(u64, v)
256 	),
257 
258 	TP_fast_assign(
259 		__entry->card = ctx->afu->adapter->adapter_num;
260 		__entry->afu = ctx->afu->slice;
261 		__entry->pe = ctx->pe;
262 		__entry->idx = idx;
263 		__entry->e = e;
264 		__entry->v = v;
265 	),
266 
267 	TP_printk("afu%i.%i pe=%i SSTE[%i] E=0x%016llx V=0x%016llx",
268 		__entry->card,
269 		__entry->afu,
270 		__entry->pe,
271 		__entry->idx,
272 		__entry->e,
273 		__entry->v
274 	)
275 );
276 
277 TRACE_EVENT(cxl_pte_miss,
278 	TP_PROTO(struct cxl_context *ctx, u64 dsisr, u64 dar),
279 
280 	TP_ARGS(ctx, dsisr, dar),
281 
282 	TP_STRUCT__entry(
283 		__field(u8, card)
284 		__field(u8, afu)
285 		__field(u16, pe)
286 		__field(u64, dsisr)
287 		__field(u64, dar)
288 	),
289 
290 	TP_fast_assign(
291 		__entry->card = ctx->afu->adapter->adapter_num;
292 		__entry->afu = ctx->afu->slice;
293 		__entry->pe = ctx->pe;
294 		__entry->dsisr = dsisr;
295 		__entry->dar = dar;
296 	),
297 
298 	TP_printk("afu%i.%i pe=%i dsisr=%s dar=0x%016llx",
299 		__entry->card,
300 		__entry->afu,
301 		__entry->pe,
302 		__print_flags(__entry->dsisr, "|", DSISR_FLAGS),
303 		__entry->dar
304 	)
305 );
306 
307 TRACE_EVENT(cxl_llcmd,
308 	TP_PROTO(struct cxl_context *ctx, u64 cmd),
309 
310 	TP_ARGS(ctx, cmd),
311 
312 	TP_STRUCT__entry(
313 		__field(u8, card)
314 		__field(u8, afu)
315 		__field(u16, pe)
316 		__field(u64, cmd)
317 	),
318 
319 	TP_fast_assign(
320 		__entry->card = ctx->afu->adapter->adapter_num;
321 		__entry->afu = ctx->afu->slice;
322 		__entry->pe = ctx->pe;
323 		__entry->cmd = cmd;
324 	),
325 
326 	TP_printk("afu%i.%i pe=%i cmd=%s",
327 		__entry->card,
328 		__entry->afu,
329 		__entry->pe,
330 		__print_symbolic_u64(__entry->cmd, LLCMD_NAMES)
331 	)
332 );
333 
334 TRACE_EVENT(cxl_llcmd_done,
335 	TP_PROTO(struct cxl_context *ctx, u64 cmd, int rc),
336 
337 	TP_ARGS(ctx, cmd, rc),
338 
339 	TP_STRUCT__entry(
340 		__field(u8, card)
341 		__field(u8, afu)
342 		__field(u16, pe)
343 		__field(u64, cmd)
344 		__field(int, rc)
345 	),
346 
347 	TP_fast_assign(
348 		__entry->card = ctx->afu->adapter->adapter_num;
349 		__entry->afu = ctx->afu->slice;
350 		__entry->pe = ctx->pe;
351 		__entry->rc = rc;
352 		__entry->cmd = cmd;
353 	),
354 
355 	TP_printk("afu%i.%i pe=%i cmd=%s rc=%i",
356 		__entry->card,
357 		__entry->afu,
358 		__entry->pe,
359 		__print_symbolic_u64(__entry->cmd, LLCMD_NAMES),
360 		__entry->rc
361 	)
362 );
363 
364 DECLARE_EVENT_CLASS(cxl_afu_psl_ctrl,
365 	TP_PROTO(struct cxl_afu *afu, u64 cmd),
366 
367 	TP_ARGS(afu, cmd),
368 
369 	TP_STRUCT__entry(
370 		__field(u8, card)
371 		__field(u8, afu)
372 		__field(u64, cmd)
373 	),
374 
375 	TP_fast_assign(
376 		__entry->card = afu->adapter->adapter_num;
377 		__entry->afu = afu->slice;
378 		__entry->cmd = cmd;
379 	),
380 
381 	TP_printk("afu%i.%i cmd=%s",
382 		__entry->card,
383 		__entry->afu,
384 		__print_symbolic_u64(__entry->cmd, AFU_COMMANDS)
385 	)
386 );
387 
388 DECLARE_EVENT_CLASS(cxl_afu_psl_ctrl_done,
389 	TP_PROTO(struct cxl_afu *afu, u64 cmd, int rc),
390 
391 	TP_ARGS(afu, cmd, rc),
392 
393 	TP_STRUCT__entry(
394 		__field(u8, card)
395 		__field(u8, afu)
396 		__field(u64, cmd)
397 		__field(int, rc)
398 	),
399 
400 	TP_fast_assign(
401 		__entry->card = afu->adapter->adapter_num;
402 		__entry->afu = afu->slice;
403 		__entry->rc = rc;
404 		__entry->cmd = cmd;
405 	),
406 
407 	TP_printk("afu%i.%i cmd=%s rc=%i",
408 		__entry->card,
409 		__entry->afu,
410 		__print_symbolic_u64(__entry->cmd, AFU_COMMANDS),
411 		__entry->rc
412 	)
413 );
414 
415 DEFINE_EVENT(cxl_afu_psl_ctrl, cxl_afu_ctrl,
416 	TP_PROTO(struct cxl_afu *afu, u64 cmd),
417 	TP_ARGS(afu, cmd)
418 );
419 
420 DEFINE_EVENT(cxl_afu_psl_ctrl_done, cxl_afu_ctrl_done,
421 	TP_PROTO(struct cxl_afu *afu, u64 cmd, int rc),
422 	TP_ARGS(afu, cmd, rc)
423 );
424 
425 DEFINE_EVENT_PRINT(cxl_afu_psl_ctrl, cxl_psl_ctrl,
426 	TP_PROTO(struct cxl_afu *afu, u64 cmd),
427 	TP_ARGS(afu, cmd),
428 
429 	TP_printk("psl%i.%i cmd=%s",
430 		__entry->card,
431 		__entry->afu,
432 		__print_symbolic_u64(__entry->cmd, PSL_COMMANDS)
433 	)
434 );
435 
436 DEFINE_EVENT_PRINT(cxl_afu_psl_ctrl_done, cxl_psl_ctrl_done,
437 	TP_PROTO(struct cxl_afu *afu, u64 cmd, int rc),
438 	TP_ARGS(afu, cmd, rc),
439 
440 	TP_printk("psl%i.%i cmd=%s rc=%i",
441 		__entry->card,
442 		__entry->afu,
443 		__print_symbolic_u64(__entry->cmd, PSL_COMMANDS),
444 		__entry->rc
445 	)
446 );
447 
448 DEFINE_EVENT(cxl_pe_class, cxl_slbia,
449 	TP_PROTO(struct cxl_context *ctx),
450 	TP_ARGS(ctx)
451 );
452 
453 #endif /* _CXL_TRACE_H */
454 
455 /* This part must be outside protection */
456 #undef TRACE_INCLUDE_PATH
457 #define TRACE_INCLUDE_PATH .
458 #define TRACE_INCLUDE_FILE trace
459 #include <trace/define_trace.h>
460