Linux Audio

Check our new training course

Loading...
v6.8
  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
 63DECLARE_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
 88TRACE_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
124DEFINE_EVENT(cxl_pe_class, cxl_detach,
125	TP_PROTO(struct cxl_context *ctx),
126	TP_ARGS(ctx)
127);
128
129TRACE_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
162TRACE_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
196TRACE_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
229TRACE_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
256TRACE_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
283TRACE_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
316TRACE_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
346TRACE_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
373TRACE_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
403DECLARE_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
427DECLARE_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
454DEFINE_EVENT(cxl_afu_psl_ctrl, cxl_afu_ctrl,
455	TP_PROTO(struct cxl_afu *afu, u64 cmd),
456	TP_ARGS(afu, cmd)
457);
458
459DEFINE_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
464DEFINE_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
475DEFINE_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
487DEFINE_EVENT(cxl_pe_class, cxl_slbia,
488	TP_PROTO(struct cxl_context *ctx),
489	TP_ARGS(ctx)
490);
491
492TRACE_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
516TRACE_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
556TRACE_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
592DEFINE_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
597DEFINE_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
603DEFINE_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
608TRACE_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
645DEFINE_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
651TRACE_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>
v4.6
 
  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
 58DECLARE_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
 83TRACE_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
119DEFINE_EVENT(cxl_pe_class, cxl_detach,
120	TP_PROTO(struct cxl_context *ctx),
121	TP_ARGS(ctx)
122);
123
124TRACE_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
157TRACE_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
190TRACE_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
217TRACE_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
244TRACE_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
277TRACE_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
307TRACE_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
334TRACE_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
364DECLARE_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
388DECLARE_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
415DEFINE_EVENT(cxl_afu_psl_ctrl, cxl_afu_ctrl,
416	TP_PROTO(struct cxl_afu *afu, u64 cmd),
417	TP_ARGS(afu, cmd)
418);
419
420DEFINE_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
425DEFINE_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
436DEFINE_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
448DEFINE_EVENT(cxl_pe_class, cxl_slbia,
449	TP_PROTO(struct cxl_context *ctx),
450	TP_ARGS(ctx)
451);
452
453TRACE_EVENT(cxl_hcall,
454	TP_PROTO(u64 unit_address, u64 process_token, long rc),
455
456	TP_ARGS(unit_address, process_token, rc),
457
458	TP_STRUCT__entry(
459		__field(u64, unit_address)
460		__field(u64, process_token)
461		__field(long, rc)
462	),
463
464	TP_fast_assign(
465		__entry->unit_address = unit_address;
466		__entry->process_token = process_token;
467		__entry->rc = rc;
468	),
469
470	TP_printk("unit_address=0x%016llx process_token=0x%016llx rc=%li",
471		__entry->unit_address,
472		__entry->process_token,
473		__entry->rc
474	)
475);
476
477TRACE_EVENT(cxl_hcall_control,
478	TP_PROTO(u64 unit_address, char *fct, u64 p1, u64 p2, u64 p3,
479	u64 p4, unsigned long r4, long rc),
480
481	TP_ARGS(unit_address, fct, p1, p2, p3, p4, r4, rc),
482
483	TP_STRUCT__entry(
484		__field(u64, unit_address)
485		__field(char *, fct)
486		__field(u64, p1)
487		__field(u64, p2)
488		__field(u64, p3)
489		__field(u64, p4)
490		__field(unsigned long, r4)
491		__field(long, rc)
492	),
493
494	TP_fast_assign(
495		__entry->unit_address = unit_address;
496		__entry->fct = fct;
497		__entry->p1 = p1;
498		__entry->p2 = p2;
499		__entry->p3 = p3;
500		__entry->p4 = p4;
501		__entry->r4 = r4;
502		__entry->rc = rc;
503	),
504
505	TP_printk("unit_address=%#.16llx %s(%#llx, %#llx, %#llx, %#llx, R4: %#lx)): %li",
506		__entry->unit_address,
507		__entry->fct,
508		__entry->p1,
509		__entry->p2,
510		__entry->p3,
511		__entry->p4,
512		__entry->r4,
513		__entry->rc
514	)
515);
516
517TRACE_EVENT(cxl_hcall_attach,
518	TP_PROTO(u64 unit_address, u64 phys_addr, unsigned long process_token,
519		unsigned long mmio_addr, unsigned long mmio_size, long rc),
520
521	TP_ARGS(unit_address, phys_addr, process_token,
522		mmio_addr, mmio_size, rc),
523
524	TP_STRUCT__entry(
525		__field(u64, unit_address)
526		__field(u64, phys_addr)
527		__field(unsigned long, process_token)
528		__field(unsigned long, mmio_addr)
529		__field(unsigned long, mmio_size)
530		__field(long, rc)
531	),
532
533	TP_fast_assign(
534		__entry->unit_address = unit_address;
535		__entry->phys_addr = phys_addr;
536		__entry->process_token = process_token;
537		__entry->mmio_addr = mmio_addr;
538		__entry->mmio_size = mmio_size;
539		__entry->rc = rc;
540	),
541
542	TP_printk("unit_address=0x%016llx phys_addr=0x%016llx "
543		"token=0x%.8lx mmio_addr=0x%lx mmio_size=0x%lx rc=%li",
544		__entry->unit_address,
545		__entry->phys_addr,
546		__entry->process_token,
547		__entry->mmio_addr,
548		__entry->mmio_size,
549		__entry->rc
550	)
551);
552
553DEFINE_EVENT(cxl_hcall, cxl_hcall_detach,
554	TP_PROTO(u64 unit_address, u64 process_token, long rc),
555	TP_ARGS(unit_address, process_token, rc)
556);
557
558DEFINE_EVENT(cxl_hcall_control, cxl_hcall_control_function,
559	TP_PROTO(u64 unit_address, char *fct, u64 p1, u64 p2, u64 p3,
560	u64 p4, unsigned long r4, long rc),
561	TP_ARGS(unit_address, fct, p1, p2, p3, p4, r4, rc)
562);
563
564DEFINE_EVENT(cxl_hcall, cxl_hcall_collect_int_info,
565	TP_PROTO(u64 unit_address, u64 process_token, long rc),
566	TP_ARGS(unit_address, process_token, rc)
567);
568
569TRACE_EVENT(cxl_hcall_control_faults,
570	TP_PROTO(u64 unit_address, u64 process_token,
571		u64 control_mask, u64 reset_mask, unsigned long r4,
572		long rc),
573
574	TP_ARGS(unit_address, process_token,
575		control_mask, reset_mask, r4, rc),
576
577	TP_STRUCT__entry(
578		__field(u64, unit_address)
579		__field(u64, process_token)
580		__field(u64, control_mask)
581		__field(u64, reset_mask)
582		__field(unsigned long, r4)
583		__field(long, rc)
584	),
585
586	TP_fast_assign(
587		__entry->unit_address = unit_address;
588		__entry->process_token = process_token;
589		__entry->control_mask = control_mask;
590		__entry->reset_mask = reset_mask;
591		__entry->r4 = r4;
592		__entry->rc = rc;
593	),
594
595	TP_printk("unit_address=0x%016llx process_token=0x%llx "
596		"control_mask=%#llx reset_mask=%#llx r4=%#lx rc=%li",
597		__entry->unit_address,
598		__entry->process_token,
599		__entry->control_mask,
600		__entry->reset_mask,
601		__entry->r4,
602		__entry->rc
603	)
604);
605
606DEFINE_EVENT(cxl_hcall_control, cxl_hcall_control_facility,
607	TP_PROTO(u64 unit_address, char *fct, u64 p1, u64 p2, u64 p3,
608	u64 p4, unsigned long r4, long rc),
609	TP_ARGS(unit_address, fct, p1, p2, p3, p4, r4, rc)
610);
611
612TRACE_EVENT(cxl_hcall_download_facility,
613	TP_PROTO(u64 unit_address, char *fct, u64 list_address, u64 num,
614	unsigned long r4, long rc),
615
616	TP_ARGS(unit_address, fct, list_address, num, r4, rc),
617
618	TP_STRUCT__entry(
619		__field(u64, unit_address)
620		__field(char *, fct)
621		__field(u64, list_address)
622		__field(u64, num)
623		__field(unsigned long, r4)
624		__field(long, rc)
625	),
626
627	TP_fast_assign(
628		__entry->unit_address = unit_address;
629		__entry->fct = fct;
630		__entry->list_address = list_address;
631		__entry->num = num;
632		__entry->r4 = r4;
633		__entry->rc = rc;
634	),
635
636	TP_printk("%#.16llx, %s(%#llx, %#llx), %#lx): %li",
637		__entry->unit_address,
638		__entry->fct,
639		__entry->list_address,
640		__entry->num,
641		__entry->r4,
642		__entry->rc
643	)
644);
645
646#endif /* _CXL_TRACE_H */
647
648/* This part must be outside protection */
649#undef TRACE_INCLUDE_PATH
650#define TRACE_INCLUDE_PATH .
651#define TRACE_INCLUDE_FILE trace
652#include <trace/define_trace.h>