Linux-libre 5.3.12-gnu
[librecmc/linux-libre.git] / drivers / misc / cxl / trace.h
1 /* SPDX-License-Identifier: GPL-2.0-or-later */
2 /*
3  * Copyright 2015 IBM Corp.
4  */
5
6 #undef TRACE_SYSTEM
7 #define TRACE_SYSTEM cxl
8
9 #if !defined(_CXL_TRACE_H) || defined(TRACE_HEADER_MULTI_READ)
10 #define _CXL_TRACE_H
11
12 #include <linux/tracepoint.h>
13
14 #include "cxl.h"
15
16 #define dsisr_psl9_flags(flags) \
17         __print_flags(flags, "|", \
18                 { CXL_PSL9_DSISR_An_CO_MASK,    "FR" }, \
19                 { CXL_PSL9_DSISR_An_TF,         "TF" }, \
20                 { CXL_PSL9_DSISR_An_PE,         "PE" }, \
21                 { CXL_PSL9_DSISR_An_AE,         "AE" }, \
22                 { CXL_PSL9_DSISR_An_OC,         "OC" }, \
23                 { CXL_PSL9_DSISR_An_S,          "S" })
24
25 #define DSISR_FLAGS \
26         { CXL_PSL_DSISR_An_DS,  "DS" }, \
27         { CXL_PSL_DSISR_An_DM,  "DM" }, \
28         { CXL_PSL_DSISR_An_ST,  "ST" }, \
29         { CXL_PSL_DSISR_An_UR,  "UR" }, \
30         { CXL_PSL_DSISR_An_PE,  "PE" }, \
31         { CXL_PSL_DSISR_An_AE,  "AE" }, \
32         { CXL_PSL_DSISR_An_OC,  "OC" }, \
33         { CXL_PSL_DSISR_An_M,   "M" }, \
34         { CXL_PSL_DSISR_An_P,   "P" }, \
35         { CXL_PSL_DSISR_An_A,   "A" }, \
36         { CXL_PSL_DSISR_An_S,   "S" }, \
37         { CXL_PSL_DSISR_An_K,   "K" }
38
39 #define TFC_FLAGS \
40         { CXL_PSL_TFC_An_A,     "A" }, \
41         { CXL_PSL_TFC_An_C,     "C" }, \
42         { CXL_PSL_TFC_An_AE,    "AE" }, \
43         { CXL_PSL_TFC_An_R,     "R" }
44
45 #define LLCMD_NAMES \
46         { CXL_SPA_SW_CMD_TERMINATE,     "TERMINATE" }, \
47         { CXL_SPA_SW_CMD_REMOVE,        "REMOVE" }, \
48         { CXL_SPA_SW_CMD_SUSPEND,       "SUSPEND" }, \
49         { CXL_SPA_SW_CMD_RESUME,        "RESUME" }, \
50         { CXL_SPA_SW_CMD_ADD,           "ADD" }, \
51         { CXL_SPA_SW_CMD_UPDATE,        "UPDATE" }
52
53 #define AFU_COMMANDS \
54         { 0,                    "DISABLE" }, \
55         { CXL_AFU_Cntl_An_E,    "ENABLE" }, \
56         { CXL_AFU_Cntl_An_RA,   "RESET" }
57
58 #define PSL_COMMANDS \
59         { CXL_PSL_SCNTL_An_Pc,  "PURGE" }, \
60         { CXL_PSL_SCNTL_An_Sc,  "SUSPEND" }
61
62
63 DECLARE_EVENT_CLASS(cxl_pe_class,
64         TP_PROTO(struct cxl_context *ctx),
65
66         TP_ARGS(ctx),
67
68         TP_STRUCT__entry(
69                 __field(u8, card)
70                 __field(u8, afu)
71                 __field(u16, pe)
72         ),
73
74         TP_fast_assign(
75                 __entry->card = ctx->afu->adapter->adapter_num;
76                 __entry->afu = ctx->afu->slice;
77                 __entry->pe = ctx->pe;
78         ),
79
80         TP_printk("afu%i.%i pe=%i",
81                 __entry->card,
82                 __entry->afu,
83                 __entry->pe
84         )
85 );
86
87
88 TRACE_EVENT(cxl_attach,
89         TP_PROTO(struct cxl_context *ctx, u64 wed, s16 num_interrupts, u64 amr),
90
91         TP_ARGS(ctx, wed, num_interrupts, amr),
92
93         TP_STRUCT__entry(
94                 __field(u8, card)
95                 __field(u8, afu)
96                 __field(u16, pe)
97                 __field(pid_t, pid)
98                 __field(u64, wed)
99                 __field(u64, amr)
100                 __field(s16, num_interrupts)
101         ),
102
103         TP_fast_assign(
104                 __entry->card = ctx->afu->adapter->adapter_num;
105                 __entry->afu = ctx->afu->slice;
106                 __entry->pe = ctx->pe;
107                 __entry->pid = pid_nr(ctx->pid);
108                 __entry->wed = wed;
109                 __entry->amr = amr;
110                 __entry->num_interrupts = num_interrupts;
111         ),
112
113         TP_printk("afu%i.%i pid=%i pe=%i wed=0x%016llx irqs=%i amr=0x%llx",
114                 __entry->card,
115                 __entry->afu,
116                 __entry->pid,
117                 __entry->pe,
118                 __entry->wed,
119                 __entry->num_interrupts,
120                 __entry->amr
121         )
122 );
123
124 DEFINE_EVENT(cxl_pe_class, cxl_detach,
125         TP_PROTO(struct cxl_context *ctx),
126         TP_ARGS(ctx)
127 );
128
129 TRACE_EVENT(cxl_afu_irq,
130         TP_PROTO(struct cxl_context *ctx, int afu_irq, int virq, irq_hw_number_t hwirq),
131
132         TP_ARGS(ctx, afu_irq, virq, hwirq),
133
134         TP_STRUCT__entry(
135                 __field(u8, card)
136                 __field(u8, afu)
137                 __field(u16, pe)
138                 __field(u16, afu_irq)
139                 __field(int, virq)
140                 __field(irq_hw_number_t, hwirq)
141         ),
142
143         TP_fast_assign(
144                 __entry->card = ctx->afu->adapter->adapter_num;
145                 __entry->afu = ctx->afu->slice;
146                 __entry->pe = ctx->pe;
147                 __entry->afu_irq = afu_irq;
148                 __entry->virq = virq;
149                 __entry->hwirq = hwirq;
150         ),
151
152         TP_printk("afu%i.%i pe=%i afu_irq=%i virq=%i hwirq=0x%lx",
153                 __entry->card,
154                 __entry->afu,
155                 __entry->pe,
156                 __entry->afu_irq,
157                 __entry->virq,
158                 __entry->hwirq
159         )
160 );
161
162 TRACE_EVENT(cxl_psl9_irq,
163         TP_PROTO(struct cxl_context *ctx, int irq, u64 dsisr, u64 dar),
164
165         TP_ARGS(ctx, irq, dsisr, dar),
166
167         TP_STRUCT__entry(
168                 __field(u8, card)
169                 __field(u8, afu)
170                 __field(u16, pe)
171                 __field(int, irq)
172                 __field(u64, dsisr)
173                 __field(u64, dar)
174         ),
175
176         TP_fast_assign(
177                 __entry->card = ctx->afu->adapter->adapter_num;
178                 __entry->afu = ctx->afu->slice;
179                 __entry->pe = ctx->pe;
180                 __entry->irq = irq;
181                 __entry->dsisr = dsisr;
182                 __entry->dar = dar;
183         ),
184
185         TP_printk("afu%i.%i pe=%i irq=%i dsisr=0x%016llx dsisr=%s dar=0x%016llx",
186                 __entry->card,
187                 __entry->afu,
188                 __entry->pe,
189                 __entry->irq,
190                 __entry->dsisr,
191                 dsisr_psl9_flags(__entry->dsisr),
192                 __entry->dar
193         )
194 );
195
196 TRACE_EVENT(cxl_psl_irq,
197         TP_PROTO(struct cxl_context *ctx, int irq, u64 dsisr, u64 dar),
198
199         TP_ARGS(ctx, irq, dsisr, dar),
200
201         TP_STRUCT__entry(
202                 __field(u8, card)
203                 __field(u8, afu)
204                 __field(u16, pe)
205                 __field(int, irq)
206                 __field(u64, dsisr)
207                 __field(u64, dar)
208         ),
209
210         TP_fast_assign(
211                 __entry->card = ctx->afu->adapter->adapter_num;
212                 __entry->afu = ctx->afu->slice;
213                 __entry->pe = ctx->pe;
214                 __entry->irq = irq;
215                 __entry->dsisr = dsisr;
216                 __entry->dar = dar;
217         ),
218
219         TP_printk("afu%i.%i pe=%i irq=%i dsisr=%s dar=0x%016llx",
220                 __entry->card,
221                 __entry->afu,
222                 __entry->pe,
223                 __entry->irq,
224                 __print_flags(__entry->dsisr, "|", DSISR_FLAGS),
225                 __entry->dar
226         )
227 );
228
229 TRACE_EVENT(cxl_psl_irq_ack,
230         TP_PROTO(struct cxl_context *ctx, u64 tfc),
231
232         TP_ARGS(ctx, tfc),
233
234         TP_STRUCT__entry(
235                 __field(u8, card)
236                 __field(u8, afu)
237                 __field(u16, pe)
238                 __field(u64, tfc)
239         ),
240
241         TP_fast_assign(
242                 __entry->card = ctx->afu->adapter->adapter_num;
243                 __entry->afu = ctx->afu->slice;
244                 __entry->pe = ctx->pe;
245                 __entry->tfc = tfc;
246         ),
247
248         TP_printk("afu%i.%i pe=%i tfc=%s",
249                 __entry->card,
250                 __entry->afu,
251                 __entry->pe,
252                 __print_flags(__entry->tfc, "|", TFC_FLAGS)
253         )
254 );
255
256 TRACE_EVENT(cxl_ste_miss,
257         TP_PROTO(struct cxl_context *ctx, u64 dar),
258
259         TP_ARGS(ctx, dar),
260
261         TP_STRUCT__entry(
262                 __field(u8, card)
263                 __field(u8, afu)
264                 __field(u16, pe)
265                 __field(u64, dar)
266         ),
267
268         TP_fast_assign(
269                 __entry->card = ctx->afu->adapter->adapter_num;
270                 __entry->afu = ctx->afu->slice;
271                 __entry->pe = ctx->pe;
272                 __entry->dar = dar;
273         ),
274
275         TP_printk("afu%i.%i pe=%i dar=0x%016llx",
276                 __entry->card,
277                 __entry->afu,
278                 __entry->pe,
279                 __entry->dar
280         )
281 );
282
283 TRACE_EVENT(cxl_ste_write,
284         TP_PROTO(struct cxl_context *ctx, unsigned int idx, u64 e, u64 v),
285
286         TP_ARGS(ctx, idx, e, v),
287
288         TP_STRUCT__entry(
289                 __field(u8, card)
290                 __field(u8, afu)
291                 __field(u16, pe)
292                 __field(unsigned int, idx)
293                 __field(u64, e)
294                 __field(u64, v)
295         ),
296
297         TP_fast_assign(
298                 __entry->card = ctx->afu->adapter->adapter_num;
299                 __entry->afu = ctx->afu->slice;
300                 __entry->pe = ctx->pe;
301                 __entry->idx = idx;
302                 __entry->e = e;
303                 __entry->v = v;
304         ),
305
306         TP_printk("afu%i.%i pe=%i SSTE[%i] E=0x%016llx V=0x%016llx",
307                 __entry->card,
308                 __entry->afu,
309                 __entry->pe,
310                 __entry->idx,
311                 __entry->e,
312                 __entry->v
313         )
314 );
315
316 TRACE_EVENT(cxl_pte_miss,
317         TP_PROTO(struct cxl_context *ctx, u64 dsisr, u64 dar),
318
319         TP_ARGS(ctx, dsisr, dar),
320
321         TP_STRUCT__entry(
322                 __field(u8, card)
323                 __field(u8, afu)
324                 __field(u16, pe)
325                 __field(u64, dsisr)
326                 __field(u64, dar)
327         ),
328
329         TP_fast_assign(
330                 __entry->card = ctx->afu->adapter->adapter_num;
331                 __entry->afu = ctx->afu->slice;
332                 __entry->pe = ctx->pe;
333                 __entry->dsisr = dsisr;
334                 __entry->dar = dar;
335         ),
336
337         TP_printk("afu%i.%i pe=%i dsisr=%s dar=0x%016llx",
338                 __entry->card,
339                 __entry->afu,
340                 __entry->pe,
341                 __print_flags(__entry->dsisr, "|", DSISR_FLAGS),
342                 __entry->dar
343         )
344 );
345
346 TRACE_EVENT(cxl_llcmd,
347         TP_PROTO(struct cxl_context *ctx, u64 cmd),
348
349         TP_ARGS(ctx, cmd),
350
351         TP_STRUCT__entry(
352                 __field(u8, card)
353                 __field(u8, afu)
354                 __field(u16, pe)
355                 __field(u64, cmd)
356         ),
357
358         TP_fast_assign(
359                 __entry->card = ctx->afu->adapter->adapter_num;
360                 __entry->afu = ctx->afu->slice;
361                 __entry->pe = ctx->pe;
362                 __entry->cmd = cmd;
363         ),
364
365         TP_printk("afu%i.%i pe=%i cmd=%s",
366                 __entry->card,
367                 __entry->afu,
368                 __entry->pe,
369                 __print_symbolic_u64(__entry->cmd, LLCMD_NAMES)
370         )
371 );
372
373 TRACE_EVENT(cxl_llcmd_done,
374         TP_PROTO(struct cxl_context *ctx, u64 cmd, int rc),
375
376         TP_ARGS(ctx, cmd, rc),
377
378         TP_STRUCT__entry(
379                 __field(u8, card)
380                 __field(u8, afu)
381                 __field(u16, pe)
382                 __field(u64, cmd)
383                 __field(int, rc)
384         ),
385
386         TP_fast_assign(
387                 __entry->card = ctx->afu->adapter->adapter_num;
388                 __entry->afu = ctx->afu->slice;
389                 __entry->pe = ctx->pe;
390                 __entry->rc = rc;
391                 __entry->cmd = cmd;
392         ),
393
394         TP_printk("afu%i.%i pe=%i cmd=%s rc=%i",
395                 __entry->card,
396                 __entry->afu,
397                 __entry->pe,
398                 __print_symbolic_u64(__entry->cmd, LLCMD_NAMES),
399                 __entry->rc
400         )
401 );
402
403 DECLARE_EVENT_CLASS(cxl_afu_psl_ctrl,
404         TP_PROTO(struct cxl_afu *afu, u64 cmd),
405
406         TP_ARGS(afu, cmd),
407
408         TP_STRUCT__entry(
409                 __field(u8, card)
410                 __field(u8, afu)
411                 __field(u64, cmd)
412         ),
413
414         TP_fast_assign(
415                 __entry->card = afu->adapter->adapter_num;
416                 __entry->afu = afu->slice;
417                 __entry->cmd = cmd;
418         ),
419
420         TP_printk("afu%i.%i cmd=%s",
421                 __entry->card,
422                 __entry->afu,
423                 __print_symbolic_u64(__entry->cmd, AFU_COMMANDS)
424         )
425 );
426
427 DECLARE_EVENT_CLASS(cxl_afu_psl_ctrl_done,
428         TP_PROTO(struct cxl_afu *afu, u64 cmd, int rc),
429
430         TP_ARGS(afu, cmd, rc),
431
432         TP_STRUCT__entry(
433                 __field(u8, card)
434                 __field(u8, afu)
435                 __field(u64, cmd)
436                 __field(int, rc)
437         ),
438
439         TP_fast_assign(
440                 __entry->card = afu->adapter->adapter_num;
441                 __entry->afu = afu->slice;
442                 __entry->rc = rc;
443                 __entry->cmd = cmd;
444         ),
445
446         TP_printk("afu%i.%i cmd=%s rc=%i",
447                 __entry->card,
448                 __entry->afu,
449                 __print_symbolic_u64(__entry->cmd, AFU_COMMANDS),
450                 __entry->rc
451         )
452 );
453
454 DEFINE_EVENT(cxl_afu_psl_ctrl, cxl_afu_ctrl,
455         TP_PROTO(struct cxl_afu *afu, u64 cmd),
456         TP_ARGS(afu, cmd)
457 );
458
459 DEFINE_EVENT(cxl_afu_psl_ctrl_done, cxl_afu_ctrl_done,
460         TP_PROTO(struct cxl_afu *afu, u64 cmd, int rc),
461         TP_ARGS(afu, cmd, rc)
462 );
463
464 DEFINE_EVENT_PRINT(cxl_afu_psl_ctrl, cxl_psl_ctrl,
465         TP_PROTO(struct cxl_afu *afu, u64 cmd),
466         TP_ARGS(afu, cmd),
467
468         TP_printk("psl%i.%i cmd=%s",
469                 __entry->card,
470                 __entry->afu,
471                 __print_symbolic_u64(__entry->cmd, PSL_COMMANDS)
472         )
473 );
474
475 DEFINE_EVENT_PRINT(cxl_afu_psl_ctrl_done, cxl_psl_ctrl_done,
476         TP_PROTO(struct cxl_afu *afu, u64 cmd, int rc),
477         TP_ARGS(afu, cmd, rc),
478
479         TP_printk("psl%i.%i cmd=%s rc=%i",
480                 __entry->card,
481                 __entry->afu,
482                 __print_symbolic_u64(__entry->cmd, PSL_COMMANDS),
483                 __entry->rc
484         )
485 );
486
487 DEFINE_EVENT(cxl_pe_class, cxl_slbia,
488         TP_PROTO(struct cxl_context *ctx),
489         TP_ARGS(ctx)
490 );
491
492 TRACE_EVENT(cxl_hcall,
493         TP_PROTO(u64 unit_address, u64 process_token, long rc),
494
495         TP_ARGS(unit_address, process_token, rc),
496
497         TP_STRUCT__entry(
498                 __field(u64, unit_address)
499                 __field(u64, process_token)
500                 __field(long, rc)
501         ),
502
503         TP_fast_assign(
504                 __entry->unit_address = unit_address;
505                 __entry->process_token = process_token;
506                 __entry->rc = rc;
507         ),
508
509         TP_printk("unit_address=0x%016llx process_token=0x%016llx rc=%li",
510                 __entry->unit_address,
511                 __entry->process_token,
512                 __entry->rc
513         )
514 );
515
516 TRACE_EVENT(cxl_hcall_control,
517         TP_PROTO(u64 unit_address, char *fct, u64 p1, u64 p2, u64 p3,
518         u64 p4, unsigned long r4, long rc),
519
520         TP_ARGS(unit_address, fct, p1, p2, p3, p4, r4, rc),
521
522         TP_STRUCT__entry(
523                 __field(u64, unit_address)
524                 __field(char *, fct)
525                 __field(u64, p1)
526                 __field(u64, p2)
527                 __field(u64, p3)
528                 __field(u64, p4)
529                 __field(unsigned long, r4)
530                 __field(long, rc)
531         ),
532
533         TP_fast_assign(
534                 __entry->unit_address = unit_address;
535                 __entry->fct = fct;
536                 __entry->p1 = p1;
537                 __entry->p2 = p2;
538                 __entry->p3 = p3;
539                 __entry->p4 = p4;
540                 __entry->r4 = r4;
541                 __entry->rc = rc;
542         ),
543
544         TP_printk("unit_address=%#.16llx %s(%#llx, %#llx, %#llx, %#llx, R4: %#lx)): %li",
545                 __entry->unit_address,
546                 __entry->fct,
547                 __entry->p1,
548                 __entry->p2,
549                 __entry->p3,
550                 __entry->p4,
551                 __entry->r4,
552                 __entry->rc
553         )
554 );
555
556 TRACE_EVENT(cxl_hcall_attach,
557         TP_PROTO(u64 unit_address, u64 phys_addr, unsigned long process_token,
558                 unsigned long mmio_addr, unsigned long mmio_size, long rc),
559
560         TP_ARGS(unit_address, phys_addr, process_token,
561                 mmio_addr, mmio_size, rc),
562
563         TP_STRUCT__entry(
564                 __field(u64, unit_address)
565                 __field(u64, phys_addr)
566                 __field(unsigned long, process_token)
567                 __field(unsigned long, mmio_addr)
568                 __field(unsigned long, mmio_size)
569                 __field(long, rc)
570         ),
571
572         TP_fast_assign(
573                 __entry->unit_address = unit_address;
574                 __entry->phys_addr = phys_addr;
575                 __entry->process_token = process_token;
576                 __entry->mmio_addr = mmio_addr;
577                 __entry->mmio_size = mmio_size;
578                 __entry->rc = rc;
579         ),
580
581         TP_printk("unit_address=0x%016llx phys_addr=0x%016llx "
582                 "token=0x%.8lx mmio_addr=0x%lx mmio_size=0x%lx rc=%li",
583                 __entry->unit_address,
584                 __entry->phys_addr,
585                 __entry->process_token,
586                 __entry->mmio_addr,
587                 __entry->mmio_size,
588                 __entry->rc
589         )
590 );
591
592 DEFINE_EVENT(cxl_hcall, cxl_hcall_detach,
593         TP_PROTO(u64 unit_address, u64 process_token, long rc),
594         TP_ARGS(unit_address, process_token, rc)
595 );
596
597 DEFINE_EVENT(cxl_hcall_control, cxl_hcall_control_function,
598         TP_PROTO(u64 unit_address, char *fct, u64 p1, u64 p2, u64 p3,
599         u64 p4, unsigned long r4, long rc),
600         TP_ARGS(unit_address, fct, p1, p2, p3, p4, r4, rc)
601 );
602
603 DEFINE_EVENT(cxl_hcall, cxl_hcall_collect_int_info,
604         TP_PROTO(u64 unit_address, u64 process_token, long rc),
605         TP_ARGS(unit_address, process_token, rc)
606 );
607
608 TRACE_EVENT(cxl_hcall_control_faults,
609         TP_PROTO(u64 unit_address, u64 process_token,
610                 u64 control_mask, u64 reset_mask, unsigned long r4,
611                 long rc),
612
613         TP_ARGS(unit_address, process_token,
614                 control_mask, reset_mask, r4, rc),
615
616         TP_STRUCT__entry(
617                 __field(u64, unit_address)
618                 __field(u64, process_token)
619                 __field(u64, control_mask)
620                 __field(u64, reset_mask)
621                 __field(unsigned long, r4)
622                 __field(long, rc)
623         ),
624
625         TP_fast_assign(
626                 __entry->unit_address = unit_address;
627                 __entry->process_token = process_token;
628                 __entry->control_mask = control_mask;
629                 __entry->reset_mask = reset_mask;
630                 __entry->r4 = r4;
631                 __entry->rc = rc;
632         ),
633
634         TP_printk("unit_address=0x%016llx process_token=0x%llx "
635                 "control_mask=%#llx reset_mask=%#llx r4=%#lx rc=%li",
636                 __entry->unit_address,
637                 __entry->process_token,
638                 __entry->control_mask,
639                 __entry->reset_mask,
640                 __entry->r4,
641                 __entry->rc
642         )
643 );
644
645 DEFINE_EVENT(cxl_hcall_control, cxl_hcall_control_facility,
646         TP_PROTO(u64 unit_address, char *fct, u64 p1, u64 p2, u64 p3,
647         u64 p4, unsigned long r4, long rc),
648         TP_ARGS(unit_address, fct, p1, p2, p3, p4, r4, rc)
649 );
650
651 TRACE_EVENT(cxl_hcall_download_facility,
652         TP_PROTO(u64 unit_address, char *fct, u64 list_address, u64 num,
653         unsigned long r4, long rc),
654
655         TP_ARGS(unit_address, fct, list_address, num, r4, rc),
656
657         TP_STRUCT__entry(
658                 __field(u64, unit_address)
659                 __field(char *, fct)
660                 __field(u64, list_address)
661                 __field(u64, num)
662                 __field(unsigned long, r4)
663                 __field(long, rc)
664         ),
665
666         TP_fast_assign(
667                 __entry->unit_address = unit_address;
668                 __entry->fct = fct;
669                 __entry->list_address = list_address;
670                 __entry->num = num;
671                 __entry->r4 = r4;
672                 __entry->rc = rc;
673         ),
674
675         TP_printk("%#.16llx, %s(%#llx, %#llx), %#lx): %li",
676                 __entry->unit_address,
677                 __entry->fct,
678                 __entry->list_address,
679                 __entry->num,
680                 __entry->r4,
681                 __entry->rc
682         )
683 );
684
685 #endif /* _CXL_TRACE_H */
686
687 /* This part must be outside protection */
688 #undef TRACE_INCLUDE_PATH
689 #define TRACE_INCLUDE_PATH .
690 #define TRACE_INCLUDE_FILE trace
691 #include <trace/define_trace.h>