1 #if !defined(_I915_TRACE_H_) || defined(TRACE_HEADER_MULTI_READ) 2 #define _I915_TRACE_H_ 3 4 #include <linux/stringify.h> 5 #include <linux/types.h> 6 #include <linux/tracepoint.h> 7 8 #include <drm/drmP.h> 9 #include "i915_drv.h" 10 11 #undef TRACE_SYSTEM 12 #define TRACE_SYSTEM i915 13 #define TRACE_SYSTEM_STRING __stringify(TRACE_SYSTEM) 14 #define TRACE_INCLUDE_FILE i915_trace 15 16 /* object tracking */ 17 18 TRACE_EVENT(i915_gem_object_create, 19 20 TP_PROTO(struct drm_i915_gem_object *obj), 21 22 TP_ARGS(obj), 23 24 TP_STRUCT__entry( 25 __field(struct drm_i915_gem_object *, obj) 26 __field(u32, size) 27 ), 28 29 TP_fast_assign( 30 __entry->obj = obj; 31 __entry->size = obj->base.size; 32 ), 33 34 TP_printk("obj=%p, size=%u", __entry->obj, __entry->size) 35 ); 36 37 TRACE_EVENT(i915_gem_object_bind, 38 39 TP_PROTO(struct drm_i915_gem_object *obj, u32 gtt_offset, bool mappable), 40 41 TP_ARGS(obj, gtt_offset, mappable), 42 43 TP_STRUCT__entry( 44 __field(struct drm_i915_gem_object *, obj) 45 __field(u32, gtt_offset) 46 __field(bool, mappable) 47 ), 48 49 TP_fast_assign( 50 __entry->obj = obj; 51 __entry->gtt_offset = gtt_offset; 52 __entry->mappable = mappable; 53 ), 54 55 TP_printk("obj=%p, gtt_offset=%08x%s", 56 __entry->obj, __entry->gtt_offset, 57 __entry->mappable ? ", mappable" : "") 58 ); 59 60 TRACE_EVENT(i915_gem_object_change_domain, 61 62 TP_PROTO(struct drm_i915_gem_object *obj, uint32_t old_read_domains, uint32_t old_write_domain), 63 64 TP_ARGS(obj, old_read_domains, old_write_domain), 65 66 TP_STRUCT__entry( 67 __field(struct drm_i915_gem_object *, obj) 68 __field(u32, read_domains) 69 __field(u32, write_domain) 70 ), 71 72 TP_fast_assign( 73 __entry->obj = obj; 74 __entry->read_domains = obj->base.read_domains | (old_read_domains << 16); 75 __entry->write_domain = obj->base.write_domain | (old_write_domain << 16); 76 ), 77 78 TP_printk("obj=%p, read=%04x, write=%04x", 79 __entry->obj, 80 __entry->read_domains, __entry->write_domain) 81 ); 82 83 DECLARE_EVENT_CLASS(i915_gem_object, 84 85 TP_PROTO(struct drm_i915_gem_object *obj), 86 87 TP_ARGS(obj), 88 89 TP_STRUCT__entry( 90 __field(struct drm_i915_gem_object *, obj) 91 ), 92 93 TP_fast_assign( 94 __entry->obj = obj; 95 ), 96 97 TP_printk("obj=%p", __entry->obj) 98 ); 99 100 DEFINE_EVENT(i915_gem_object, i915_gem_object_clflush, 101 102 TP_PROTO(struct drm_i915_gem_object *obj), 103 104 TP_ARGS(obj) 105 ); 106 107 DEFINE_EVENT(i915_gem_object, i915_gem_object_unbind, 108 109 TP_PROTO(struct drm_i915_gem_object *obj), 110 111 TP_ARGS(obj) 112 ); 113 114 DEFINE_EVENT(i915_gem_object, i915_gem_object_destroy, 115 116 TP_PROTO(struct drm_i915_gem_object *obj), 117 118 TP_ARGS(obj) 119 ); 120 121 /* batch tracing */ 122 123 TRACE_EVENT(i915_gem_request_submit, 124 125 TP_PROTO(struct drm_device *dev, u32 seqno), 126 127 TP_ARGS(dev, seqno), 128 129 TP_STRUCT__entry( 130 __field(u32, dev) 131 __field(u32, seqno) 132 ), 133 134 TP_fast_assign( 135 __entry->dev = dev->primary->index; 136 __entry->seqno = seqno; 137 i915_trace_irq_get(dev, seqno); 138 ), 139 140 TP_printk("dev=%u, seqno=%u", __entry->dev, __entry->seqno) 141 ); 142 143 TRACE_EVENT(i915_gem_request_flush, 144 145 TP_PROTO(struct drm_device *dev, u32 seqno, 146 u32 flush_domains, u32 invalidate_domains), 147 148 TP_ARGS(dev, seqno, flush_domains, invalidate_domains), 149 150 TP_STRUCT__entry( 151 __field(u32, dev) 152 __field(u32, seqno) 153 __field(u32, flush_domains) 154 __field(u32, invalidate_domains) 155 ), 156 157 TP_fast_assign( 158 __entry->dev = dev->primary->index; 159 __entry->seqno = seqno; 160 __entry->flush_domains = flush_domains; 161 __entry->invalidate_domains = invalidate_domains; 162 ), 163 164 TP_printk("dev=%u, seqno=%u, flush=%04x, invalidate=%04x", 165 __entry->dev, __entry->seqno, 166 __entry->flush_domains, __entry->invalidate_domains) 167 ); 168 169 DECLARE_EVENT_CLASS(i915_gem_request, 170 171 TP_PROTO(struct drm_device *dev, u32 seqno), 172 173 TP_ARGS(dev, seqno), 174 175 TP_STRUCT__entry( 176 __field(u32, dev) 177 __field(u32, seqno) 178 ), 179 180 TP_fast_assign( 181 __entry->dev = dev->primary->index; 182 __entry->seqno = seqno; 183 ), 184 185 TP_printk("dev=%u, seqno=%u", __entry->dev, __entry->seqno) 186 ); 187 188 DEFINE_EVENT(i915_gem_request, i915_gem_request_complete, 189 190 TP_PROTO(struct drm_device *dev, u32 seqno), 191 192 TP_ARGS(dev, seqno) 193 ); 194 195 DEFINE_EVENT(i915_gem_request, i915_gem_request_retire, 196 197 TP_PROTO(struct drm_device *dev, u32 seqno), 198 199 TP_ARGS(dev, seqno) 200 ); 201 202 DEFINE_EVENT(i915_gem_request, i915_gem_request_wait_begin, 203 204 TP_PROTO(struct drm_device *dev, u32 seqno), 205 206 TP_ARGS(dev, seqno) 207 ); 208 209 DEFINE_EVENT(i915_gem_request, i915_gem_request_wait_end, 210 211 TP_PROTO(struct drm_device *dev, u32 seqno), 212 213 TP_ARGS(dev, seqno) 214 ); 215 216 DECLARE_EVENT_CLASS(i915_ring, 217 218 TP_PROTO(struct drm_device *dev), 219 220 TP_ARGS(dev), 221 222 TP_STRUCT__entry( 223 __field(u32, dev) 224 ), 225 226 TP_fast_assign( 227 __entry->dev = dev->primary->index; 228 ), 229 230 TP_printk("dev=%u", __entry->dev) 231 ); 232 233 DEFINE_EVENT(i915_ring, i915_ring_wait_begin, 234 235 TP_PROTO(struct drm_device *dev), 236 237 TP_ARGS(dev) 238 ); 239 240 DEFINE_EVENT(i915_ring, i915_ring_wait_end, 241 242 TP_PROTO(struct drm_device *dev), 243 244 TP_ARGS(dev) 245 ); 246 247 TRACE_EVENT(i915_flip_request, 248 TP_PROTO(int plane, struct drm_i915_gem_object *obj), 249 250 TP_ARGS(plane, obj), 251 252 TP_STRUCT__entry( 253 __field(int, plane) 254 __field(struct drm_i915_gem_object *, obj) 255 ), 256 257 TP_fast_assign( 258 __entry->plane = plane; 259 __entry->obj = obj; 260 ), 261 262 TP_printk("plane=%d, obj=%p", __entry->plane, __entry->obj) 263 ); 264 265 TRACE_EVENT(i915_flip_complete, 266 TP_PROTO(int plane, struct drm_i915_gem_object *obj), 267 268 TP_ARGS(plane, obj), 269 270 TP_STRUCT__entry( 271 __field(int, plane) 272 __field(struct drm_i915_gem_object *, obj) 273 ), 274 275 TP_fast_assign( 276 __entry->plane = plane; 277 __entry->obj = obj; 278 ), 279 280 TP_printk("plane=%d, obj=%p", __entry->plane, __entry->obj) 281 ); 282 283 TRACE_EVENT(i915_reg_rw, 284 TP_PROTO(int cmd, uint32_t reg, uint64_t val, int len), 285 286 TP_ARGS(cmd, reg, val, len), 287 288 TP_STRUCT__entry( 289 __field(int, cmd) 290 __field(uint32_t, reg) 291 __field(uint64_t, val) 292 __field(int, len) 293 ), 294 295 TP_fast_assign( 296 __entry->cmd = cmd; 297 __entry->reg = reg; 298 __entry->val = (uint64_t)val; 299 __entry->len = len; 300 ), 301 302 TP_printk("cmd=%c, reg=0x%x, val=0x%llx, len=%d", 303 __entry->cmd, __entry->reg, __entry->val, __entry->len) 304 ); 305 306 #endif /* _I915_TRACE_H_ */ 307 308 /* This part must be outside protection */ 309 #undef TRACE_INCLUDE_PATH 310 #define TRACE_INCLUDE_PATH . 311 #include <trace/define_trace.h> 312