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