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> 692