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