692 lines · c
1/* SPDX-License-Identifier: GPL-2.0-or-later */2/*3 * Copyright 2015 IBM Corp.4 */5 6#undef TRACE_SYSTEM7#define TRACE_SYSTEM cxl8 9#if !defined(_CXL_TRACE_H) || defined(TRACE_HEADER_MULTI_READ)10#define _CXL_TRACE_H11 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->pe84 )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->amr121 )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->hwirq159 )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->dar193 )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->dar226 )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->dar280 )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->v313 )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->dar343 )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->rc400 )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->rc451 )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->rc484 )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->rc513 )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->rc553 )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->rc589 )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->rc642 )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->rc682 )683);684 685#endif /* _CXL_TRACE_H */686 687/* This part must be outside protection */688#undef TRACE_INCLUDE_PATH689#define TRACE_INCLUDE_PATH .690#define TRACE_INCLUDE_FILE trace691#include <trace/define_trace.h>692