1 /* SPDX-License-Identifier: GPL-2.0-only */ 2 /* 3 * Copyright © 2022 Intel Corporation 4 */ 5 6 #undef TRACE_SYSTEM 7 #define TRACE_SYSTEM xe 8 9 #if !defined(_XE_TRACE_H_) || defined(TRACE_HEADER_MULTI_READ) 10 #define _XE_TRACE_H_ 11 12 #include <linux/tracepoint.h> 13 #include <linux/types.h> 14 15 #include "xe_exec_queue_types.h" 16 #include "xe_exec_queue.h" 17 #include "xe_gpu_scheduler_types.h" 18 #include "xe_gt_types.h" 19 #include "xe_guc_exec_queue_types.h" 20 #include "xe_sched_job.h" 21 #include "xe_tlb_inval_types.h" 22 #include "xe_vm.h" 23 24 #define __dev_name_xe(xe) dev_name((xe)->drm.dev) 25 #define __dev_name_tile(tile) __dev_name_xe(tile_to_xe((tile))) 26 #define __dev_name_gt(gt) __dev_name_xe(gt_to_xe((gt))) 27 #define __dev_name_eq(q) __dev_name_gt((q)->gt) 28 29 DECLARE_EVENT_CLASS(xe_tlb_inval_fence, 30 TP_PROTO(struct xe_device *xe, struct xe_tlb_inval_fence *fence), 31 TP_ARGS(xe, fence), 32 33 TP_STRUCT__entry( 34 __string(dev, __dev_name_xe(xe)) 35 __field(struct xe_tlb_inval_fence *, fence) 36 __field(int, seqno) 37 ), 38 39 TP_fast_assign( 40 __assign_str(dev); 41 __entry->fence = fence; 42 __entry->seqno = fence->seqno; 43 ), 44 45 TP_printk("dev=%s, fence=%p, seqno=%d", 46 __get_str(dev), __entry->fence, __entry->seqno) 47 ); 48 49 DEFINE_EVENT(xe_tlb_inval_fence, xe_tlb_inval_fence_send, 50 TP_PROTO(struct xe_device *xe, struct xe_tlb_inval_fence *fence), 51 TP_ARGS(xe, fence) 52 ); 53 54 DEFINE_EVENT(xe_tlb_inval_fence, xe_tlb_inval_fence_recv, 55 TP_PROTO(struct xe_device *xe, struct xe_tlb_inval_fence *fence), 56 TP_ARGS(xe, fence) 57 ); 58 59 DEFINE_EVENT(xe_tlb_inval_fence, xe_tlb_inval_fence_signal, 60 TP_PROTO(struct xe_device *xe, struct xe_tlb_inval_fence *fence), 61 TP_ARGS(xe, fence) 62 ); 63 64 DEFINE_EVENT(xe_tlb_inval_fence, xe_tlb_inval_fence_timeout, 65 TP_PROTO(struct xe_device *xe, struct xe_tlb_inval_fence *fence), 66 TP_ARGS(xe, fence) 67 ); 68 69 DECLARE_EVENT_CLASS(xe_exec_queue, 70 TP_PROTO(struct xe_exec_queue *q), 71 TP_ARGS(q), 72 73 TP_STRUCT__entry( 74 __string(dev, __dev_name_eq(q)) 75 __field(enum xe_engine_class, class) 76 __field(u32, logical_mask) 77 __field(u8, gt_id) 78 __field(u16, width) 79 __field(u16, guc_id) 80 __field(u32, guc_state) 81 __field(u32, flags) 82 ), 83 84 TP_fast_assign( 85 __assign_str(dev); 86 __entry->class = q->class; 87 __entry->logical_mask = q->logical_mask; 88 __entry->gt_id = q->gt->info.id; 89 __entry->width = q->width; 90 __entry->guc_id = q->guc->id; 91 __entry->guc_state = atomic_read(&q->guc->state); 92 __entry->flags = q->flags; 93 ), 94 95 TP_printk("dev=%s, %d:0x%x, gt=%d, width=%d, guc_id=%d, guc_state=0x%x, flags=0x%x", 96 __get_str(dev), __entry->class, __entry->logical_mask, 97 __entry->gt_id, __entry->width, __entry->guc_id, 98 __entry->guc_state, __entry->flags) 99 ); 100 101 DECLARE_EVENT_CLASS(xe_exec_queue_multi_queue, 102 TP_PROTO(struct xe_exec_queue *q), 103 TP_ARGS(q), 104 105 TP_STRUCT__entry( 106 __string(dev, __dev_name_eq(q)) 107 __field(enum xe_engine_class, class) 108 __field(u32, logical_mask) 109 __field(u8, gt_id) 110 __field(u16, width) 111 __field(u32, guc_id) 112 __field(u32, guc_state) 113 __field(u32, flags) 114 __field(u32, primary) 115 ), 116 117 TP_fast_assign( 118 __assign_str(dev); 119 __entry->class = q->class; 120 __entry->logical_mask = q->logical_mask; 121 __entry->gt_id = q->gt->info.id; 122 __entry->width = q->width; 123 __entry->guc_id = q->guc->id; 124 __entry->guc_state = atomic_read(&q->guc->state); 125 __entry->flags = q->flags; 126 __entry->primary = xe_exec_queue_multi_queue_primary(q)->guc->id; 127 ), 128 129 TP_printk("dev=%s, %d:0x%x, gt=%d, width=%d guc_id=%d, guc_state=0x%x, flags=0x%x, primary=%d", 130 __get_str(dev), __entry->class, __entry->logical_mask, 131 __entry->gt_id, __entry->width, __entry->guc_id, 132 __entry->guc_state, __entry->flags, 133 __entry->primary) 134 ); 135 136 DEFINE_EVENT(xe_exec_queue, xe_exec_queue_create, 137 TP_PROTO(struct xe_exec_queue *q), 138 TP_ARGS(q) 139 ); 140 141 DEFINE_EVENT(xe_exec_queue_multi_queue, xe_exec_queue_create_multi_queue, 142 TP_PROTO(struct xe_exec_queue *q), 143 TP_ARGS(q) 144 ); 145 146 DEFINE_EVENT(xe_exec_queue, xe_exec_queue_supress_resume, 147 TP_PROTO(struct xe_exec_queue *q), 148 TP_ARGS(q) 149 ); 150 151 DEFINE_EVENT(xe_exec_queue, xe_exec_queue_submit, 152 TP_PROTO(struct xe_exec_queue *q), 153 TP_ARGS(q) 154 ); 155 156 DEFINE_EVENT(xe_exec_queue, xe_exec_queue_scheduling_enable, 157 TP_PROTO(struct xe_exec_queue *q), 158 TP_ARGS(q) 159 ); 160 161 DEFINE_EVENT(xe_exec_queue, xe_exec_queue_scheduling_disable, 162 TP_PROTO(struct xe_exec_queue *q), 163 TP_ARGS(q) 164 ); 165 166 DEFINE_EVENT(xe_exec_queue, xe_exec_queue_scheduling_done, 167 TP_PROTO(struct xe_exec_queue *q), 168 TP_ARGS(q) 169 ); 170 171 DEFINE_EVENT(xe_exec_queue, xe_exec_queue_register, 172 TP_PROTO(struct xe_exec_queue *q), 173 TP_ARGS(q) 174 ); 175 176 DEFINE_EVENT(xe_exec_queue, xe_exec_queue_deregister, 177 TP_PROTO(struct xe_exec_queue *q), 178 TP_ARGS(q) 179 ); 180 181 DEFINE_EVENT(xe_exec_queue, xe_exec_queue_deregister_done, 182 TP_PROTO(struct xe_exec_queue *q), 183 TP_ARGS(q) 184 ); 185 186 DEFINE_EVENT(xe_exec_queue, xe_exec_queue_close, 187 TP_PROTO(struct xe_exec_queue *q), 188 TP_ARGS(q) 189 ); 190 191 DEFINE_EVENT(xe_exec_queue, xe_exec_queue_kill, 192 TP_PROTO(struct xe_exec_queue *q), 193 TP_ARGS(q) 194 ); 195 196 DEFINE_EVENT(xe_exec_queue, xe_exec_queue_cleanup_entity, 197 TP_PROTO(struct xe_exec_queue *q), 198 TP_ARGS(q) 199 ); 200 201 DEFINE_EVENT(xe_exec_queue, xe_exec_queue_destroy, 202 TP_PROTO(struct xe_exec_queue *q), 203 TP_ARGS(q) 204 ); 205 206 DEFINE_EVENT(xe_exec_queue, xe_exec_queue_reset, 207 TP_PROTO(struct xe_exec_queue *q), 208 TP_ARGS(q) 209 ); 210 211 DEFINE_EVENT(xe_exec_queue, xe_exec_queue_memory_cat_error, 212 TP_PROTO(struct xe_exec_queue *q), 213 TP_ARGS(q) 214 ); 215 216 DEFINE_EVENT(xe_exec_queue, xe_guc_uncorrectable_error, 217 TP_PROTO(struct xe_exec_queue *q), 218 TP_ARGS(q) 219 ); 220 221 DEFINE_EVENT(xe_exec_queue, xe_exec_queue_cgp_context_error, 222 TP_PROTO(struct xe_exec_queue *q), 223 TP_ARGS(q) 224 ); 225 226 DEFINE_EVENT(xe_exec_queue, xe_exec_queue_stop, 227 TP_PROTO(struct xe_exec_queue *q), 228 TP_ARGS(q) 229 ); 230 231 DEFINE_EVENT(xe_exec_queue, xe_exec_queue_resubmit, 232 TP_PROTO(struct xe_exec_queue *q), 233 TP_ARGS(q) 234 ); 235 236 DECLARE_EVENT_CLASS(xe_sched_job, 237 TP_PROTO(struct xe_sched_job *job), 238 TP_ARGS(job), 239 240 TP_STRUCT__entry( 241 __string(dev, __dev_name_eq(job->q)) 242 __field(u32, seqno) 243 __field(u32, lrc_seqno) 244 __field(u8, gt_id) 245 __field(u16, guc_id) 246 __field(u32, guc_state) 247 __field(u32, flags) 248 __field(int, error) 249 __field(struct dma_fence *, fence) 250 __field(u64, batch_addr) 251 ), 252 253 TP_fast_assign( 254 __assign_str(dev); 255 __entry->seqno = xe_sched_job_seqno(job); 256 __entry->lrc_seqno = xe_sched_job_lrc_seqno(job); 257 __entry->gt_id = job->q->gt->info.id; 258 __entry->guc_id = job->q->guc->id; 259 __entry->guc_state = 260 atomic_read(&job->q->guc->state); 261 __entry->flags = job->q->flags; 262 __entry->error = job->fence ? job->fence->error : 0; 263 __entry->fence = job->fence; 264 __entry->batch_addr = (u64)job->ptrs[0].batch_addr; 265 ), 266 267 TP_printk("dev=%s, fence=%p, seqno=%u, lrc_seqno=%u, gt=%u, guc_id=%d, batch_addr=0x%012llx, guc_state=0x%x, flags=0x%x, error=%d", 268 __get_str(dev), __entry->fence, __entry->seqno, 269 __entry->lrc_seqno, __entry->gt_id, __entry->guc_id, 270 __entry->batch_addr, __entry->guc_state, 271 __entry->flags, __entry->error) 272 ); 273 274 DEFINE_EVENT(xe_sched_job, xe_sched_job_create, 275 TP_PROTO(struct xe_sched_job *job), 276 TP_ARGS(job) 277 ); 278 279 DEFINE_EVENT(xe_sched_job, xe_sched_job_exec, 280 TP_PROTO(struct xe_sched_job *job), 281 TP_ARGS(job) 282 ); 283 284 DEFINE_EVENT(xe_sched_job, xe_sched_job_run, 285 TP_PROTO(struct xe_sched_job *job), 286 TP_ARGS(job) 287 ); 288 289 DEFINE_EVENT(xe_sched_job, xe_sched_job_free, 290 TP_PROTO(struct xe_sched_job *job), 291 TP_ARGS(job) 292 ); 293 294 DEFINE_EVENT(xe_sched_job, xe_sched_job_timedout, 295 TP_PROTO(struct xe_sched_job *job), 296 TP_ARGS(job) 297 ); 298 299 DEFINE_EVENT(xe_sched_job, xe_sched_job_set_error, 300 TP_PROTO(struct xe_sched_job *job), 301 TP_ARGS(job) 302 ); 303 304 DEFINE_EVENT(xe_sched_job, xe_sched_job_ban, 305 TP_PROTO(struct xe_sched_job *job), 306 TP_ARGS(job) 307 ); 308 309 DECLARE_EVENT_CLASS(xe_sched_msg, 310 TP_PROTO(struct xe_sched_msg *msg), 311 TP_ARGS(msg), 312 313 TP_STRUCT__entry( 314 __string(dev, __dev_name_eq(((struct xe_exec_queue *)msg->private_data))) 315 __field(u32, opcode) 316 __field(u16, guc_id) 317 __field(u8, gt_id) 318 ), 319 320 TP_fast_assign( 321 __assign_str(dev); 322 __entry->opcode = msg->opcode; 323 __entry->guc_id = 324 ((struct xe_exec_queue *)msg->private_data)->guc->id; 325 __entry->gt_id = 326 ((struct xe_exec_queue *)msg->private_data)->gt->info.id; 327 ), 328 329 TP_printk("dev=%s, gt=%u guc_id=%d, opcode=%u", __get_str(dev), __entry->gt_id, __entry->guc_id, 330 __entry->opcode) 331 ); 332 333 DEFINE_EVENT(xe_sched_msg, xe_sched_msg_add, 334 TP_PROTO(struct xe_sched_msg *msg), 335 TP_ARGS(msg) 336 ); 337 338 DEFINE_EVENT(xe_sched_msg, xe_sched_msg_recv, 339 TP_PROTO(struct xe_sched_msg *msg), 340 TP_ARGS(msg) 341 ); 342 343 DECLARE_EVENT_CLASS(xe_hw_fence, 344 TP_PROTO(struct xe_hw_fence *fence), 345 TP_ARGS(fence), 346 347 TP_STRUCT__entry( 348 __string(dev, __dev_name_xe(fence->xe)) 349 __field(u64, ctx) 350 __field(u32, seqno) 351 __field(struct xe_hw_fence *, fence) 352 ), 353 354 TP_fast_assign( 355 __assign_str(dev); 356 __entry->ctx = fence->dma.context; 357 __entry->seqno = fence->dma.seqno; 358 __entry->fence = fence; 359 ), 360 361 TP_printk("dev=%s, ctx=0x%016llx, fence=%p, seqno=%u", 362 __get_str(dev), __entry->ctx, __entry->fence, __entry->seqno) 363 ); 364 365 DEFINE_EVENT(xe_hw_fence, xe_hw_fence_create, 366 TP_PROTO(struct xe_hw_fence *fence), 367 TP_ARGS(fence) 368 ); 369 370 DEFINE_EVENT(xe_hw_fence, xe_hw_fence_signal, 371 TP_PROTO(struct xe_hw_fence *fence), 372 TP_ARGS(fence) 373 ); 374 375 DEFINE_EVENT(xe_hw_fence, xe_hw_fence_try_signal, 376 TP_PROTO(struct xe_hw_fence *fence), 377 TP_ARGS(fence) 378 ); 379 380 TRACE_EVENT(xe_reg_rw, 381 TP_PROTO(struct xe_mmio *mmio, bool write, u32 reg, u64 val, int len), 382 383 TP_ARGS(mmio, write, reg, val, len), 384 385 TP_STRUCT__entry( 386 __string(dev, __dev_name_tile(mmio->tile)) 387 __field(u64, val) 388 __field(u32, reg) 389 __field(u16, write) 390 __field(u16, len) 391 ), 392 393 TP_fast_assign( 394 __assign_str(dev); 395 __entry->val = val; 396 __entry->reg = reg; 397 __entry->write = write; 398 __entry->len = len; 399 ), 400 401 TP_printk("dev=%s, %s reg=0x%x, len=%d, val=(0x%x, 0x%x)", 402 __get_str(dev), __entry->write ? "write" : "read", 403 __entry->reg, __entry->len, 404 (u32)(__entry->val & 0xffffffff), 405 (u32)(__entry->val >> 32)) 406 ); 407 408 DECLARE_EVENT_CLASS(xe_pm_runtime, 409 TP_PROTO(struct xe_device *xe, void *caller), 410 TP_ARGS(xe, caller), 411 412 TP_STRUCT__entry( 413 __string(dev, __dev_name_xe(xe)) 414 __field(void *, caller) 415 ), 416 417 TP_fast_assign( 418 __assign_str(dev); 419 __entry->caller = caller; 420 ), 421 422 TP_printk("dev=%s caller_function=%pS", __get_str(dev), __entry->caller) 423 ); 424 425 DEFINE_EVENT(xe_pm_runtime, xe_pm_runtime_get, 426 TP_PROTO(struct xe_device *xe, void *caller), 427 TP_ARGS(xe, caller) 428 ); 429 430 DEFINE_EVENT(xe_pm_runtime, xe_pm_runtime_put, 431 TP_PROTO(struct xe_device *xe, void *caller), 432 TP_ARGS(xe, caller) 433 ); 434 435 DEFINE_EVENT(xe_pm_runtime, xe_pm_resume, 436 TP_PROTO(struct xe_device *xe, void *caller), 437 TP_ARGS(xe, caller) 438 ); 439 440 DEFINE_EVENT(xe_pm_runtime, xe_pm_suspend, 441 TP_PROTO(struct xe_device *xe, void *caller), 442 TP_ARGS(xe, caller) 443 ); 444 445 DEFINE_EVENT(xe_pm_runtime, xe_pm_runtime_resume, 446 TP_PROTO(struct xe_device *xe, void *caller), 447 TP_ARGS(xe, caller) 448 ); 449 450 DEFINE_EVENT(xe_pm_runtime, xe_pm_runtime_suspend, 451 TP_PROTO(struct xe_device *xe, void *caller), 452 TP_ARGS(xe, caller) 453 ); 454 455 DEFINE_EVENT(xe_pm_runtime, xe_pm_runtime_get_ioctl, 456 TP_PROTO(struct xe_device *xe, void *caller), 457 TP_ARGS(xe, caller) 458 ); 459 460 TRACE_EVENT(xe_eu_stall_data_read, 461 TP_PROTO(u8 slice, u8 subslice, 462 u32 read_ptr, u32 write_ptr, 463 size_t read_size, size_t total_size), 464 TP_ARGS(slice, subslice, 465 read_ptr, write_ptr, 466 read_size, total_size), 467 468 TP_STRUCT__entry(__field(u8, slice) 469 __field(u8, subslice) 470 __field(u32, read_ptr) 471 __field(u32, write_ptr) 472 __field(size_t, read_size) 473 __field(size_t, total_size) 474 ), 475 476 TP_fast_assign(__entry->slice = slice; 477 __entry->subslice = subslice; 478 __entry->read_ptr = read_ptr; 479 __entry->write_ptr = write_ptr; 480 __entry->read_size = read_size; 481 __entry->total_size = total_size; 482 ), 483 484 TP_printk("slice: %u subslice: %u read ptr: 0x%x write ptr: 0x%x read size: %zu total read size: %zu", 485 __entry->slice, __entry->subslice, 486 __entry->read_ptr, __entry->write_ptr, 487 __entry->read_size, __entry->total_size) 488 ); 489 490 TRACE_EVENT(xe_exec_queue_reach_max_job_count, 491 TP_PROTO(struct xe_exec_queue *q, int max_cnt), 492 TP_ARGS(q, max_cnt), 493 494 TP_STRUCT__entry(__string(dev, __dev_name_eq(q)) 495 __field(enum xe_engine_class, class) 496 __field(u32, logical_mask) 497 __field(u16, guc_id) 498 __field(int, max_cnt) 499 ), 500 501 TP_fast_assign(__assign_str(dev); 502 __entry->class = q->class; 503 __entry->logical_mask = q->logical_mask; 504 __entry->guc_id = q->guc->id; 505 __entry->max_cnt = max_cnt; 506 ), 507 508 TP_printk("dev=%s, job count exceeded the maximum limit (%d) per exec queue. engine_class=0x%x, logical_mask=0x%x, guc_id=%d", 509 __get_str(dev), __entry->max_cnt, 510 __entry->class, __entry->logical_mask, __entry->guc_id) 511 ); 512 513 #endif 514 515 /* This part must be outside protection */ 516 #undef TRACE_INCLUDE_PATH 517 #undef TRACE_INCLUDE_FILE 518 #define TRACE_INCLUDE_PATH ../../drivers/gpu/drm/xe 519 #define TRACE_INCLUDE_FILE xe_trace 520 #include <trace/define_trace.h> 521