1 /* SPDX-License-Identifier: GPL-2.0-only */ 2 /* 3 * Copyright © 2024 Intel Corporation 4 */ 5 6 #undef TRACE_SYSTEM 7 #define TRACE_SYSTEM xe 8 9 #if !defined(_XE_TRACE_GUC_H_) || defined(TRACE_HEADER_MULTI_READ) 10 #define _XE_TRACE_GUC_H_ 11 12 #include <linux/tracepoint.h> 13 #include <linux/types.h> 14 15 #include "xe_device_types.h" 16 #include "xe_guc_exec_queue_types.h" 17 #include "xe_guc_engine_activity_types.h" 18 19 #define __dev_name_xe(xe) dev_name((xe)->drm.dev) 20 21 DECLARE_EVENT_CLASS(xe_guc_ct_flow_control, 22 TP_PROTO(struct xe_device *xe, u32 _head, u32 _tail, u32 size, u32 space, u32 len), 23 TP_ARGS(xe, _head, _tail, size, space, len), 24 25 TP_STRUCT__entry( 26 __string(dev, __dev_name_xe(xe)) 27 __field(u32, _head) 28 __field(u32, _tail) 29 __field(u32, size) 30 __field(u32, space) 31 __field(u32, len) 32 ), 33 34 TP_fast_assign( 35 __assign_str(dev); 36 __entry->_head = _head; 37 __entry->_tail = _tail; 38 __entry->size = size; 39 __entry->space = space; 40 __entry->len = len; 41 ), 42 43 TP_printk("h2g flow control: dev=%s, head=%u, tail=%u, size=%u, space=%u, len=%u", 44 __get_str(dev), __entry->_head, __entry->_tail, __entry->size, 45 __entry->space, __entry->len) 46 ); 47 48 DEFINE_EVENT(xe_guc_ct_flow_control, xe_guc_ct_h2g_flow_control, 49 TP_PROTO(struct xe_device *xe, u32 _head, u32 _tail, u32 size, u32 space, u32 len), 50 TP_ARGS(xe, _head, _tail, size, space, len) 51 ); 52 53 DEFINE_EVENT_PRINT(xe_guc_ct_flow_control, xe_guc_ct_g2h_flow_control, 54 TP_PROTO(struct xe_device *xe, u32 _head, u32 _tail, u32 size, u32 space, u32 len), 55 TP_ARGS(xe, _head, _tail, size, space, len), 56 57 TP_printk("g2h flow control: dev=%s, head=%u, tail=%u, size=%u, space=%u, len=%u", 58 __get_str(dev), __entry->_head, __entry->_tail, __entry->size, 59 __entry->space, __entry->len) 60 ); 61 62 DECLARE_EVENT_CLASS(xe_guc_ctb, 63 TP_PROTO(struct xe_device *xe, u8 gt_id, u32 action, u32 len, u32 _head, u32 tail), 64 TP_ARGS(xe, gt_id, action, len, _head, tail), 65 66 TP_STRUCT__entry( 67 __string(dev, __dev_name_xe(xe)) 68 __field(u8, gt_id) 69 __field(u32, action) 70 __field(u32, len) 71 __field(u32, tail) 72 __field(u32, _head) 73 ), 74 75 TP_fast_assign( 76 __assign_str(dev); 77 __entry->gt_id = gt_id; 78 __entry->action = action; 79 __entry->len = len; 80 __entry->tail = tail; 81 __entry->_head = _head; 82 ), 83 84 TP_printk("H2G CTB: dev=%s, gt%d: action=0x%x, len=%d, tail=%d, head=%d\n", 85 __get_str(dev), __entry->gt_id, __entry->action, __entry->len, 86 __entry->tail, __entry->_head) 87 ); 88 89 DEFINE_EVENT(xe_guc_ctb, xe_guc_ctb_h2g, 90 TP_PROTO(struct xe_device *xe, u8 gt_id, u32 action, u32 len, u32 _head, u32 tail), 91 TP_ARGS(xe, gt_id, action, len, _head, tail) 92 ); 93 94 DEFINE_EVENT_PRINT(xe_guc_ctb, xe_guc_ctb_g2h, 95 TP_PROTO(struct xe_device *xe, u8 gt_id, u32 action, u32 len, u32 _head, u32 tail), 96 TP_ARGS(xe, gt_id, action, len, _head, tail), 97 98 TP_printk("G2H CTB: dev=%s, gt%d: action=0x%x, len=%d, tail=%d, head=%d\n", 99 __get_str(dev), __entry->gt_id, __entry->action, __entry->len, 100 __entry->tail, __entry->_head) 101 102 ); 103 104 TRACE_EVENT(xe_guc_engine_activity, 105 TP_PROTO(struct xe_device *xe, struct engine_activity *ea, const char *name, 106 u16 instance), 107 TP_ARGS(xe, ea, name, instance), 108 109 TP_STRUCT__entry( 110 __string(dev, __dev_name_xe(xe)) 111 __string(name, name) 112 __field(u32, global_change_num) 113 __field(u32, guc_tsc_frequency_hz) 114 __field(u32, lag_latency_usec) 115 __field(u16, instance) 116 __field(u16, change_num) 117 __field(u16, quanta_ratio) 118 __field(u32, last_update_tick) 119 __field(u64, active_ticks) 120 __field(u64, active) 121 __field(u64, total) 122 __field(u64, quanta) 123 __field(u64, last_cpu_ts) 124 ), 125 126 TP_fast_assign( 127 __assign_str(dev); 128 __assign_str(name); 129 __entry->global_change_num = ea->metadata.global_change_num; 130 __entry->guc_tsc_frequency_hz = ea->metadata.guc_tsc_frequency_hz; 131 __entry->lag_latency_usec = ea->metadata.lag_latency_usec; 132 __entry->instance = instance; 133 __entry->change_num = ea->activity.change_num; 134 __entry->quanta_ratio = ea->activity.quanta_ratio; 135 __entry->last_update_tick = ea->activity.last_update_tick; 136 __entry->active_ticks = ea->activity.active_ticks; 137 __entry->active = ea->active; 138 __entry->total = ea->total; 139 __entry->quanta = ea->quanta; 140 __entry->last_cpu_ts = ea->last_cpu_ts; 141 ), 142 143 TP_printk("dev=%s engine %s:%d Active=%llu, quanta=%llu, last_cpu_ts=%llu\n" 144 "Activity metadata: global_change_num=%u, guc_tsc_frequency_hz=%u lag_latency_usec=%u\n" 145 "Activity data: change_num=%u, quanta_ratio=0x%x, last_update_tick=%u, active_ticks=%llu\n", 146 __get_str(dev), __get_str(name), __entry->instance, 147 (__entry->active + __entry->total), __entry->quanta, __entry->last_cpu_ts, 148 __entry->global_change_num, __entry->guc_tsc_frequency_hz, 149 __entry->lag_latency_usec, __entry->change_num, __entry->quanta_ratio, 150 __entry->last_update_tick, __entry->active_ticks) 151 ); 152 #endif 153 154 /* This part must be outside protection */ 155 #undef TRACE_INCLUDE_PATH 156 #undef TRACE_INCLUDE_FILE 157 #define TRACE_INCLUDE_PATH ../../drivers/gpu/drm/xe 158 #define TRACE_INCLUDE_FILE xe_trace_guc 159 #include <trace/define_trace.h> 160