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