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