blob: ca81987853114599834efdc9b86593943cd589f0 [file] [log] [blame]
Chris Wilson1c5d22f2009-08-25 11:15:50 +01001#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>
Chris Wilson05394f32010-11-08 19:18:58 +00009#include "i915_drv.h"
Ville Syrjälä25ef2842014-04-29 13:35:48 +030010#include "intel_drv.h"
Chris Wilsondb53a302011-02-03 11:57:46 +000011#include "intel_ringbuffer.h"
Chris Wilson1c5d22f2009-08-25 11:15:50 +010012
13#undef TRACE_SYSTEM
14#define TRACE_SYSTEM i915
Chris Wilson1c5d22f2009-08-25 11:15:50 +010015#define TRACE_INCLUDE_FILE i915_trace
16
Ville Syrjäläc137d662017-03-02 19:15:06 +020017/* watermark/fifo updates */
18
19TRACE_EVENT(vlv_wm,
20 TP_PROTO(struct intel_crtc *crtc, const struct vlv_wm_values *wm),
21 TP_ARGS(crtc, wm),
22
23 TP_STRUCT__entry(
24 __field(enum pipe, pipe)
25 __field(u32, frame)
26 __field(u32, scanline)
27 __field(u32, level)
28 __field(u32, cxsr)
29 __field(u32, primary)
30 __field(u32, sprite0)
31 __field(u32, sprite1)
32 __field(u32, cursor)
33 __field(u32, sr_plane)
34 __field(u32, sr_cursor)
35 ),
36
37 TP_fast_assign(
38 __entry->pipe = crtc->pipe;
39 __entry->frame = crtc->base.dev->driver->get_vblank_counter(crtc->base.dev,
40 crtc->pipe);
41 __entry->scanline = intel_get_crtc_scanline(crtc);
42 __entry->level = wm->level;
43 __entry->cxsr = wm->cxsr;
44 __entry->primary = wm->pipe[crtc->pipe].plane[PLANE_PRIMARY];
45 __entry->sprite0 = wm->pipe[crtc->pipe].plane[PLANE_SPRITE0];
46 __entry->sprite1 = wm->pipe[crtc->pipe].plane[PLANE_SPRITE1];
47 __entry->cursor = wm->pipe[crtc->pipe].plane[PLANE_CURSOR];
48 __entry->sr_plane = wm->sr.plane;
49 __entry->sr_cursor = wm->sr.cursor;
50 ),
51
52 TP_printk("pipe %c, frame=%u, scanline=%u, level=%d, cxsr=%d, wm %d/%d/%d/%d, sr %d/%d",
53 pipe_name(__entry->pipe), __entry->frame,
54 __entry->scanline, __entry->level, __entry->cxsr,
55 __entry->primary, __entry->sprite0, __entry->sprite1, __entry->cursor,
56 __entry->sr_plane, __entry->sr_cursor)
57);
58
59TRACE_EVENT(vlv_fifo_size,
60 TP_PROTO(struct intel_crtc *crtc, u32 sprite0_start, u32 sprite1_start, u32 fifo_size),
61 TP_ARGS(crtc, sprite0_start, sprite1_start, fifo_size),
62
63 TP_STRUCT__entry(
64 __field(enum pipe, pipe)
65 __field(u32, frame)
66 __field(u32, scanline)
67 __field(u32, sprite0_start)
68 __field(u32, sprite1_start)
69 __field(u32, fifo_size)
70 ),
71
72 TP_fast_assign(
73 __entry->pipe = crtc->pipe;
74 __entry->frame = crtc->base.dev->driver->get_vblank_counter(crtc->base.dev,
75 crtc->pipe);
76 __entry->scanline = intel_get_crtc_scanline(crtc);
77 __entry->sprite0_start = sprite0_start;
78 __entry->sprite1_start = sprite1_start;
79 __entry->fifo_size = fifo_size;
80 ),
81
82 TP_printk("pipe %c, frame=%u, scanline=%u, %d/%d/%d",
83 pipe_name(__entry->pipe), __entry->frame,
84 __entry->scanline, __entry->sprite0_start,
85 __entry->sprite1_start, __entry->fifo_size)
86);
87
Ville Syrjälä72259532017-03-02 19:15:05 +020088/* plane updates */
89
90TRACE_EVENT(intel_update_plane,
91 TP_PROTO(struct drm_plane *plane, struct intel_crtc *crtc),
92 TP_ARGS(plane, crtc),
93
94 TP_STRUCT__entry(
95 __field(enum pipe, pipe)
96 __field(const char *, name)
97 __field(u32, frame)
98 __field(u32, scanline)
99 __array(int, src, 4)
100 __array(int, dst, 4)
101 ),
102
103 TP_fast_assign(
104 __entry->pipe = crtc->pipe;
105 __entry->name = plane->name;
106 __entry->frame = crtc->base.dev->driver->get_vblank_counter(crtc->base.dev,
107 crtc->pipe);
108 __entry->scanline = intel_get_crtc_scanline(crtc);
109 memcpy(__entry->src, &plane->state->src, sizeof(__entry->src));
110 memcpy(__entry->dst, &plane->state->dst, sizeof(__entry->dst));
111 ),
112
113 TP_printk("pipe %c, plane %s, frame=%u, scanline=%u, " DRM_RECT_FP_FMT " -> " DRM_RECT_FMT,
114 pipe_name(__entry->pipe), __entry->name,
115 __entry->frame, __entry->scanline,
116 DRM_RECT_FP_ARG((const struct drm_rect *)__entry->src),
117 DRM_RECT_ARG((const struct drm_rect *)__entry->dst))
118);
119
120TRACE_EVENT(intel_disable_plane,
121 TP_PROTO(struct drm_plane *plane, struct intel_crtc *crtc),
122 TP_ARGS(plane, crtc),
123
124 TP_STRUCT__entry(
125 __field(enum pipe, pipe)
126 __field(const char *, name)
127 __field(u32, frame)
128 __field(u32, scanline)
129 ),
130
131 TP_fast_assign(
132 __entry->pipe = crtc->pipe;
133 __entry->name = plane->name;
134 __entry->frame = crtc->base.dev->driver->get_vblank_counter(crtc->base.dev,
135 crtc->pipe);
136 __entry->scanline = intel_get_crtc_scanline(crtc);
137 ),
138
139 TP_printk("pipe %c, plane %s, frame=%u, scanline=%u",
140 pipe_name(__entry->pipe), __entry->name,
141 __entry->frame, __entry->scanline)
142);
143
Ville Syrjälä25ef2842014-04-29 13:35:48 +0300144/* pipe updates */
145
146TRACE_EVENT(i915_pipe_update_start,
Jesse Barnesd637ce32015-09-17 08:08:32 -0700147 TP_PROTO(struct intel_crtc *crtc),
148 TP_ARGS(crtc),
Ville Syrjälä25ef2842014-04-29 13:35:48 +0300149
150 TP_STRUCT__entry(
151 __field(enum pipe, pipe)
152 __field(u32, frame)
153 __field(u32, scanline)
154 __field(u32, min)
155 __field(u32, max)
156 ),
157
158 TP_fast_assign(
159 __entry->pipe = crtc->pipe;
160 __entry->frame = crtc->base.dev->driver->get_vblank_counter(crtc->base.dev,
161 crtc->pipe);
162 __entry->scanline = intel_get_crtc_scanline(crtc);
Jesse Barnesd637ce32015-09-17 08:08:32 -0700163 __entry->min = crtc->debug.min_vbl;
164 __entry->max = crtc->debug.max_vbl;
Ville Syrjälä25ef2842014-04-29 13:35:48 +0300165 ),
166
167 TP_printk("pipe %c, frame=%u, scanline=%u, min=%u, max=%u",
168 pipe_name(__entry->pipe), __entry->frame,
169 __entry->scanline, __entry->min, __entry->max)
170);
171
172TRACE_EVENT(i915_pipe_update_vblank_evaded,
Jesse Barnesd637ce32015-09-17 08:08:32 -0700173 TP_PROTO(struct intel_crtc *crtc),
174 TP_ARGS(crtc),
Ville Syrjälä25ef2842014-04-29 13:35:48 +0300175
176 TP_STRUCT__entry(
177 __field(enum pipe, pipe)
178 __field(u32, frame)
179 __field(u32, scanline)
180 __field(u32, min)
181 __field(u32, max)
182 ),
183
184 TP_fast_assign(
185 __entry->pipe = crtc->pipe;
Jesse Barnesd637ce32015-09-17 08:08:32 -0700186 __entry->frame = crtc->debug.start_vbl_count;
187 __entry->scanline = crtc->debug.scanline_start;
188 __entry->min = crtc->debug.min_vbl;
189 __entry->max = crtc->debug.max_vbl;
Ville Syrjälä25ef2842014-04-29 13:35:48 +0300190 ),
191
192 TP_printk("pipe %c, frame=%u, scanline=%u, min=%u, max=%u",
193 pipe_name(__entry->pipe), __entry->frame,
194 __entry->scanline, __entry->min, __entry->max)
195);
196
197TRACE_EVENT(i915_pipe_update_end,
Jesse Barnesd637ce32015-09-17 08:08:32 -0700198 TP_PROTO(struct intel_crtc *crtc, u32 frame, int scanline_end),
199 TP_ARGS(crtc, frame, scanline_end),
Ville Syrjälä25ef2842014-04-29 13:35:48 +0300200
201 TP_STRUCT__entry(
202 __field(enum pipe, pipe)
203 __field(u32, frame)
204 __field(u32, scanline)
205 ),
206
207 TP_fast_assign(
208 __entry->pipe = crtc->pipe;
209 __entry->frame = frame;
Jesse Barnesd637ce32015-09-17 08:08:32 -0700210 __entry->scanline = scanline_end;
Ville Syrjälä25ef2842014-04-29 13:35:48 +0300211 ),
212
213 TP_printk("pipe %c, frame=%u, scanline=%u",
214 pipe_name(__entry->pipe), __entry->frame,
215 __entry->scanline)
216);
217
Chris Wilson1c5d22f2009-08-25 11:15:50 +0100218/* object tracking */
219
220TRACE_EVENT(i915_gem_object_create,
Chris Wilson05394f32010-11-08 19:18:58 +0000221 TP_PROTO(struct drm_i915_gem_object *obj),
Chris Wilson1c5d22f2009-08-25 11:15:50 +0100222 TP_ARGS(obj),
223
224 TP_STRUCT__entry(
Chris Wilson05394f32010-11-08 19:18:58 +0000225 __field(struct drm_i915_gem_object *, obj)
Chris Wilson1c5d22f2009-08-25 11:15:50 +0100226 __field(u32, size)
227 ),
228
229 TP_fast_assign(
230 __entry->obj = obj;
Chris Wilson05394f32010-11-08 19:18:58 +0000231 __entry->size = obj->base.size;
Chris Wilson1c5d22f2009-08-25 11:15:50 +0100232 ),
233
234 TP_printk("obj=%p, size=%u", __entry->obj, __entry->size)
235);
236
Chris Wilson3abafa52015-10-01 12:18:26 +0100237TRACE_EVENT(i915_gem_shrink,
238 TP_PROTO(struct drm_i915_private *i915, unsigned long target, unsigned flags),
239 TP_ARGS(i915, target, flags),
240
241 TP_STRUCT__entry(
242 __field(int, dev)
243 __field(unsigned long, target)
244 __field(unsigned, flags)
245 ),
246
247 TP_fast_assign(
Chris Wilson91c8a322016-07-05 10:40:23 +0100248 __entry->dev = i915->drm.primary->index;
Chris Wilson3abafa52015-10-01 12:18:26 +0100249 __entry->target = target;
250 __entry->flags = flags;
251 ),
252
253 TP_printk("dev=%d, target=%lu, flags=%x",
254 __entry->dev, __entry->target, __entry->flags)
255);
256
Ben Widawsky07fe0b12013-07-31 17:00:10 -0700257TRACE_EVENT(i915_vma_bind,
Daniel Vetter1ec9e262014-02-14 14:01:11 +0100258 TP_PROTO(struct i915_vma *vma, unsigned flags),
259 TP_ARGS(vma, flags),
Chris Wilson1c5d22f2009-08-25 11:15:50 +0100260
261 TP_STRUCT__entry(
Chris Wilson05394f32010-11-08 19:18:58 +0000262 __field(struct drm_i915_gem_object *, obj)
Ben Widawsky07fe0b12013-07-31 17:00:10 -0700263 __field(struct i915_address_space *, vm)
Ben Widawsky33938712015-01-22 17:01:23 +0000264 __field(u64, offset)
Chris Wilsondb53a302011-02-03 11:57:46 +0000265 __field(u32, size)
Daniel Vetter1ec9e262014-02-14 14:01:11 +0100266 __field(unsigned, flags)
Chris Wilson1c5d22f2009-08-25 11:15:50 +0100267 ),
268
269 TP_fast_assign(
Ben Widawsky07fe0b12013-07-31 17:00:10 -0700270 __entry->obj = vma->obj;
271 __entry->vm = vma->vm;
272 __entry->offset = vma->node.start;
273 __entry->size = vma->node.size;
Daniel Vetter1ec9e262014-02-14 14:01:11 +0100274 __entry->flags = flags;
Chris Wilson1c5d22f2009-08-25 11:15:50 +0100275 ),
276
Ben Widawsky33938712015-01-22 17:01:23 +0000277 TP_printk("obj=%p, offset=%016llx size=%x%s vm=%p",
Chris Wilsondb53a302011-02-03 11:57:46 +0000278 __entry->obj, __entry->offset, __entry->size,
Daniel Vetter1ec9e262014-02-14 14:01:11 +0100279 __entry->flags & PIN_MAPPABLE ? ", mappable" : "",
Ben Widawsky07fe0b12013-07-31 17:00:10 -0700280 __entry->vm)
Chris Wilson1c5d22f2009-08-25 11:15:50 +0100281);
282
Ben Widawsky07fe0b12013-07-31 17:00:10 -0700283TRACE_EVENT(i915_vma_unbind,
284 TP_PROTO(struct i915_vma *vma),
285 TP_ARGS(vma),
Chris Wilsondb53a302011-02-03 11:57:46 +0000286
287 TP_STRUCT__entry(
288 __field(struct drm_i915_gem_object *, obj)
Ben Widawsky07fe0b12013-07-31 17:00:10 -0700289 __field(struct i915_address_space *, vm)
Ben Widawsky33938712015-01-22 17:01:23 +0000290 __field(u64, offset)
Chris Wilsondb53a302011-02-03 11:57:46 +0000291 __field(u32, size)
292 ),
293
294 TP_fast_assign(
Ben Widawsky07fe0b12013-07-31 17:00:10 -0700295 __entry->obj = vma->obj;
296 __entry->vm = vma->vm;
297 __entry->offset = vma->node.start;
298 __entry->size = vma->node.size;
Chris Wilsondb53a302011-02-03 11:57:46 +0000299 ),
300
Ben Widawsky33938712015-01-22 17:01:23 +0000301 TP_printk("obj=%p, offset=%016llx size=%x vm=%p",
Ben Widawsky07fe0b12013-07-31 17:00:10 -0700302 __entry->obj, __entry->offset, __entry->size, __entry->vm)
Chris Wilsondb53a302011-02-03 11:57:46 +0000303);
304
Chris Wilsondb53a302011-02-03 11:57:46 +0000305TRACE_EVENT(i915_gem_object_pwrite,
306 TP_PROTO(struct drm_i915_gem_object *obj, u32 offset, u32 len),
307 TP_ARGS(obj, offset, len),
308
309 TP_STRUCT__entry(
310 __field(struct drm_i915_gem_object *, obj)
311 __field(u32, offset)
312 __field(u32, len)
313 ),
314
315 TP_fast_assign(
316 __entry->obj = obj;
317 __entry->offset = offset;
318 __entry->len = len;
319 ),
320
321 TP_printk("obj=%p, offset=%u, len=%u",
322 __entry->obj, __entry->offset, __entry->len)
323);
324
325TRACE_EVENT(i915_gem_object_pread,
326 TP_PROTO(struct drm_i915_gem_object *obj, u32 offset, u32 len),
327 TP_ARGS(obj, offset, len),
328
329 TP_STRUCT__entry(
330 __field(struct drm_i915_gem_object *, obj)
331 __field(u32, offset)
332 __field(u32, len)
333 ),
334
335 TP_fast_assign(
336 __entry->obj = obj;
337 __entry->offset = offset;
338 __entry->len = len;
339 ),
340
341 TP_printk("obj=%p, offset=%u, len=%u",
342 __entry->obj, __entry->offset, __entry->len)
343);
344
345TRACE_EVENT(i915_gem_object_fault,
346 TP_PROTO(struct drm_i915_gem_object *obj, u32 index, bool gtt, bool write),
347 TP_ARGS(obj, index, gtt, write),
348
349 TP_STRUCT__entry(
350 __field(struct drm_i915_gem_object *, obj)
351 __field(u32, index)
352 __field(bool, gtt)
353 __field(bool, write)
354 ),
355
356 TP_fast_assign(
357 __entry->obj = obj;
358 __entry->index = index;
359 __entry->gtt = gtt;
360 __entry->write = write;
361 ),
362
363 TP_printk("obj=%p, %s index=%u %s",
364 __entry->obj,
365 __entry->gtt ? "GTT" : "CPU",
366 __entry->index,
367 __entry->write ? ", writable" : "")
Chris Wilson1c5d22f2009-08-25 11:15:50 +0100368);
369
Li Zefan903cf202010-03-11 16:41:45 +0800370DECLARE_EVENT_CLASS(i915_gem_object,
Chris Wilson05394f32010-11-08 19:18:58 +0000371 TP_PROTO(struct drm_i915_gem_object *obj),
Chris Wilson1c5d22f2009-08-25 11:15:50 +0100372 TP_ARGS(obj),
373
374 TP_STRUCT__entry(
Chris Wilson05394f32010-11-08 19:18:58 +0000375 __field(struct drm_i915_gem_object *, obj)
Chris Wilson1c5d22f2009-08-25 11:15:50 +0100376 ),
377
378 TP_fast_assign(
379 __entry->obj = obj;
380 ),
381
382 TP_printk("obj=%p", __entry->obj)
383);
384
Li Zefanf41275e2010-05-24 16:25:44 +0800385DEFINE_EVENT(i915_gem_object, i915_gem_object_clflush,
Chris Wilsondb53a302011-02-03 11:57:46 +0000386 TP_PROTO(struct drm_i915_gem_object *obj),
387 TP_ARGS(obj)
Li Zefan903cf202010-03-11 16:41:45 +0800388);
Chris Wilson1c5d22f2009-08-25 11:15:50 +0100389
Li Zefan903cf202010-03-11 16:41:45 +0800390DEFINE_EVENT(i915_gem_object, i915_gem_object_destroy,
Chris Wilson05394f32010-11-08 19:18:58 +0000391 TP_PROTO(struct drm_i915_gem_object *obj),
Li Zefan903cf202010-03-11 16:41:45 +0800392 TP_ARGS(obj)
Chris Wilson1c5d22f2009-08-25 11:15:50 +0100393);
394
Chris Wilsondb53a302011-02-03 11:57:46 +0000395TRACE_EVENT(i915_gem_evict,
Chris Wilsone522ac22016-08-04 16:32:18 +0100396 TP_PROTO(struct i915_address_space *vm, u32 size, u32 align, unsigned int flags),
397 TP_ARGS(vm, size, align, flags),
Chris Wilson1c5d22f2009-08-25 11:15:50 +0100398
399 TP_STRUCT__entry(
Chris Wilson4f49be52009-09-24 00:23:33 +0100400 __field(u32, dev)
Chris Wilsone522ac22016-08-04 16:32:18 +0100401 __field(struct i915_address_space *, vm)
Chris Wilsondb53a302011-02-03 11:57:46 +0000402 __field(u32, size)
403 __field(u32, align)
Chris Wilsone522ac22016-08-04 16:32:18 +0100404 __field(unsigned int, flags)
Chris Wilsondb53a302011-02-03 11:57:46 +0000405 ),
Chris Wilson1c5d22f2009-08-25 11:15:50 +0100406
407 TP_fast_assign(
Chris Wilsonc6385c92016-11-29 12:42:05 +0000408 __entry->dev = vm->i915->drm.primary->index;
Chris Wilsone522ac22016-08-04 16:32:18 +0100409 __entry->vm = vm;
Chris Wilsondb53a302011-02-03 11:57:46 +0000410 __entry->size = size;
411 __entry->align = align;
Daniel Vetter1ec9e262014-02-14 14:01:11 +0100412 __entry->flags = flags;
Chris Wilsondb53a302011-02-03 11:57:46 +0000413 ),
Chris Wilson1c5d22f2009-08-25 11:15:50 +0100414
Chris Wilsone522ac22016-08-04 16:32:18 +0100415 TP_printk("dev=%d, vm=%p, size=%d, align=%d %s",
416 __entry->dev, __entry->vm, __entry->size, __entry->align,
Daniel Vetter1ec9e262014-02-14 14:01:11 +0100417 __entry->flags & PIN_MAPPABLE ? ", mappable" : "")
Chris Wilson1c5d22f2009-08-25 11:15:50 +0100418);
419
Chris Wilsondb53a302011-02-03 11:57:46 +0000420TRACE_EVENT(i915_gem_evict_everything,
Chris Wilson6c085a72012-08-20 11:40:46 +0200421 TP_PROTO(struct drm_device *dev),
422 TP_ARGS(dev),
Chris Wilson1c5d22f2009-08-25 11:15:50 +0100423
424 TP_STRUCT__entry(
Chris Wilson4f49be52009-09-24 00:23:33 +0100425 __field(u32, dev)
Chris Wilsondb53a302011-02-03 11:57:46 +0000426 ),
Chris Wilson1c5d22f2009-08-25 11:15:50 +0100427
428 TP_fast_assign(
Chris Wilson4f49be52009-09-24 00:23:33 +0100429 __entry->dev = dev->primary->index;
Chris Wilsondb53a302011-02-03 11:57:46 +0000430 ),
431
Chris Wilson6c085a72012-08-20 11:40:46 +0200432 TP_printk("dev=%d", __entry->dev)
Chris Wilsondb53a302011-02-03 11:57:46 +0000433);
434
Ben Widawskybcccff82013-09-24 09:57:56 -0700435TRACE_EVENT(i915_gem_evict_vm,
436 TP_PROTO(struct i915_address_space *vm),
437 TP_ARGS(vm),
438
439 TP_STRUCT__entry(
Steven Rostedt9297ebf2014-03-18 11:27:37 -0400440 __field(u32, dev)
Ben Widawskybcccff82013-09-24 09:57:56 -0700441 __field(struct i915_address_space *, vm)
442 ),
443
444 TP_fast_assign(
Chris Wilsonc6385c92016-11-29 12:42:05 +0000445 __entry->dev = vm->i915->drm.primary->index;
Ben Widawskybcccff82013-09-24 09:57:56 -0700446 __entry->vm = vm;
447 ),
448
Steven Rostedt9297ebf2014-03-18 11:27:37 -0400449 TP_printk("dev=%d, vm=%p", __entry->dev, __entry->vm)
Ben Widawskybcccff82013-09-24 09:57:56 -0700450);
451
Chris Wilson625d9882017-01-11 11:23:11 +0000452TRACE_EVENT(i915_gem_evict_node,
453 TP_PROTO(struct i915_address_space *vm, struct drm_mm_node *node, unsigned int flags),
454 TP_ARGS(vm, node, flags),
Chris Wilson172ae5b2016-12-05 14:29:37 +0000455
456 TP_STRUCT__entry(
457 __field(u32, dev)
458 __field(struct i915_address_space *, vm)
459 __field(u64, start)
460 __field(u64, size)
461 __field(unsigned long, color)
462 __field(unsigned int, flags)
463 ),
464
465 TP_fast_assign(
Chris Wilson625d9882017-01-11 11:23:11 +0000466 __entry->dev = vm->i915->drm.primary->index;
467 __entry->vm = vm;
468 __entry->start = node->start;
469 __entry->size = node->size;
470 __entry->color = node->color;
Chris Wilson172ae5b2016-12-05 14:29:37 +0000471 __entry->flags = flags;
472 ),
473
474 TP_printk("dev=%d, vm=%p, start=%llx size=%llx, color=%lx, flags=%x",
475 __entry->dev, __entry->vm,
476 __entry->start, __entry->size,
477 __entry->color, __entry->flags)
478);
479
Chris Wilsonb52b89d2013-09-25 11:43:28 +0100480TRACE_EVENT(i915_gem_ring_sync_to,
Chris Wilson8e637172016-08-02 22:50:26 +0100481 TP_PROTO(struct drm_i915_gem_request *to,
482 struct drm_i915_gem_request *from),
483 TP_ARGS(to, from),
Chris Wilsonb52b89d2013-09-25 11:43:28 +0100484
485 TP_STRUCT__entry(
486 __field(u32, dev)
487 __field(u32, sync_from)
488 __field(u32, sync_to)
489 __field(u32, seqno)
490 ),
491
492 TP_fast_assign(
Chris Wilson91c8a322016-07-05 10:40:23 +0100493 __entry->dev = from->i915->drm.primary->index;
Chris Wilson8e637172016-08-02 22:50:26 +0100494 __entry->sync_from = from->engine->id;
495 __entry->sync_to = to->engine->id;
Chris Wilson65e47602016-10-28 13:58:49 +0100496 __entry->seqno = from->global_seqno;
Chris Wilsonb52b89d2013-09-25 11:43:28 +0100497 ),
498
499 TP_printk("dev=%u, sync-from=%u, sync-to=%u, seqno=%u",
500 __entry->dev,
501 __entry->sync_from, __entry->sync_to,
502 __entry->seqno)
503);
504
Tvrtko Ursulin1cce8922017-02-21 09:13:44 +0000505TRACE_EVENT(i915_gem_request_queue,
John Harrison74328ee2014-11-24 18:49:38 +0000506 TP_PROTO(struct drm_i915_gem_request *req, u32 flags),
507 TP_ARGS(req, flags),
Chris Wilsondb53a302011-02-03 11:57:46 +0000508
509 TP_STRUCT__entry(
510 __field(u32, dev)
511 __field(u32, ring)
Tvrtko Ursulin1cce8922017-02-21 09:13:44 +0000512 __field(u32, ctx)
Chris Wilsondb53a302011-02-03 11:57:46 +0000513 __field(u32, seqno)
Chris Wilsond7d4eed2012-10-17 12:09:54 +0100514 __field(u32, flags)
Chris Wilsondb53a302011-02-03 11:57:46 +0000515 ),
516
517 TP_fast_assign(
Chris Wilson91c8a322016-07-05 10:40:23 +0100518 __entry->dev = req->i915->drm.primary->index;
Chris Wilsonc0336662016-05-06 15:40:21 +0100519 __entry->ring = req->engine->id;
Tvrtko Ursulin1cce8922017-02-21 09:13:44 +0000520 __entry->ctx = req->ctx->hw_id;
521 __entry->seqno = req->fence.seqno;
Chris Wilsond7d4eed2012-10-17 12:09:54 +0100522 __entry->flags = flags;
Chris Wilson1c5d22f2009-08-25 11:15:50 +0100523 ),
524
Tvrtko Ursulin1cce8922017-02-21 09:13:44 +0000525 TP_printk("dev=%u, ring=%u, ctx=%u, seqno=%u, flags=0x%x",
526 __entry->dev, __entry->ring, __entry->ctx, __entry->seqno,
527 __entry->flags)
Chris Wilsondb53a302011-02-03 11:57:46 +0000528);
529
530TRACE_EVENT(i915_gem_ring_flush,
John Harrisona84c3ae2015-05-29 17:43:57 +0100531 TP_PROTO(struct drm_i915_gem_request *req, u32 invalidate, u32 flush),
532 TP_ARGS(req, invalidate, flush),
Chris Wilsondb53a302011-02-03 11:57:46 +0000533
534 TP_STRUCT__entry(
535 __field(u32, dev)
536 __field(u32, ring)
537 __field(u32, invalidate)
538 __field(u32, flush)
539 ),
540
541 TP_fast_assign(
Chris Wilson91c8a322016-07-05 10:40:23 +0100542 __entry->dev = req->i915->drm.primary->index;
Tvrtko Ursulin4a570db2016-03-16 11:00:38 +0000543 __entry->ring = req->engine->id;
Chris Wilsondb53a302011-02-03 11:57:46 +0000544 __entry->invalidate = invalidate;
545 __entry->flush = flush;
546 ),
547
548 TP_printk("dev=%u, ring=%x, invalidate=%04x, flush=%04x",
549 __entry->dev, __entry->ring,
550 __entry->invalidate, __entry->flush)
Chris Wilson1c5d22f2009-08-25 11:15:50 +0100551);
552
Li Zefan903cf202010-03-11 16:41:45 +0800553DECLARE_EVENT_CLASS(i915_gem_request,
John Harrison74328ee2014-11-24 18:49:38 +0000554 TP_PROTO(struct drm_i915_gem_request *req),
555 TP_ARGS(req),
Chris Wilson1c5d22f2009-08-25 11:15:50 +0100556
557 TP_STRUCT__entry(
Chris Wilson4f49be52009-09-24 00:23:33 +0100558 __field(u32, dev)
Tvrtko Ursuline235b532017-02-21 09:13:43 +0000559 __field(u32, ctx)
Chris Wilsondb53a302011-02-03 11:57:46 +0000560 __field(u32, ring)
Chris Wilson1c5d22f2009-08-25 11:15:50 +0100561 __field(u32, seqno)
Tvrtko Ursuline235b532017-02-21 09:13:43 +0000562 __field(u32, global)
Chris Wilson1c5d22f2009-08-25 11:15:50 +0100563 ),
564
565 TP_fast_assign(
Chris Wilson91c8a322016-07-05 10:40:23 +0100566 __entry->dev = req->i915->drm.primary->index;
Tvrtko Ursuline235b532017-02-21 09:13:43 +0000567 __entry->ctx = req->ctx->hw_id;
Chris Wilsonc0336662016-05-06 15:40:21 +0100568 __entry->ring = req->engine->id;
Tvrtko Ursuline235b532017-02-21 09:13:43 +0000569 __entry->seqno = req->fence.seqno;
570 __entry->global = req->global_seqno;
Chris Wilson1c5d22f2009-08-25 11:15:50 +0100571 ),
572
Tvrtko Ursuline235b532017-02-21 09:13:43 +0000573 TP_printk("dev=%u, ring=%u, ctx=%u, seqno=%u, global=%u",
574 __entry->dev, __entry->ring, __entry->ctx, __entry->seqno,
575 __entry->global)
Chris Wilsondb53a302011-02-03 11:57:46 +0000576);
577
578DEFINE_EVENT(i915_gem_request, i915_gem_request_add,
John Harrison74328ee2014-11-24 18:49:38 +0000579 TP_PROTO(struct drm_i915_gem_request *req),
580 TP_ARGS(req)
Chris Wilson1c5d22f2009-08-25 11:15:50 +0100581);
582
Tvrtko Ursulin354d0362017-02-21 11:01:42 +0000583#if defined(CONFIG_DRM_I915_LOW_LEVEL_TRACEPOINTS)
584DEFINE_EVENT(i915_gem_request, i915_gem_request_submit,
585 TP_PROTO(struct drm_i915_gem_request *req),
586 TP_ARGS(req)
587);
588
589DEFINE_EVENT(i915_gem_request, i915_gem_request_execute,
590 TP_PROTO(struct drm_i915_gem_request *req),
591 TP_ARGS(req)
592);
Tvrtko Ursulind7d96832017-02-21 11:03:00 +0000593
594DECLARE_EVENT_CLASS(i915_gem_request_hw,
595 TP_PROTO(struct drm_i915_gem_request *req,
596 unsigned int port),
597 TP_ARGS(req, port),
598
599 TP_STRUCT__entry(
600 __field(u32, dev)
601 __field(u32, ring)
602 __field(u32, seqno)
603 __field(u32, global_seqno)
604 __field(u32, ctx)
605 __field(u32, port)
606 ),
607
608 TP_fast_assign(
609 __entry->dev = req->i915->drm.primary->index;
610 __entry->ring = req->engine->id;
611 __entry->ctx = req->ctx->hw_id;
612 __entry->seqno = req->fence.seqno;
613 __entry->global_seqno = req->global_seqno;
614 __entry->port = port;
615 ),
616
617 TP_printk("dev=%u, ring=%u, ctx=%u, seqno=%u, global=%u, port=%u",
618 __entry->dev, __entry->ring, __entry->ctx,
619 __entry->seqno, __entry->global_seqno,
620 __entry->port)
621);
622
623DEFINE_EVENT(i915_gem_request_hw, i915_gem_request_in,
624 TP_PROTO(struct drm_i915_gem_request *req, unsigned int port),
625 TP_ARGS(req, port)
626);
627
628DEFINE_EVENT(i915_gem_request, i915_gem_request_out,
629 TP_PROTO(struct drm_i915_gem_request *req),
630 TP_ARGS(req)
631);
Tvrtko Ursulin354d0362017-02-21 11:01:42 +0000632#else
633#if !defined(TRACE_HEADER_MULTI_READ)
634static inline void
635trace_i915_gem_request_submit(struct drm_i915_gem_request *req)
636{
637}
638
639static inline void
640trace_i915_gem_request_execute(struct drm_i915_gem_request *req)
641{
642}
Tvrtko Ursulind7d96832017-02-21 11:03:00 +0000643
644static inline void
645trace_i915_gem_request_in(struct drm_i915_gem_request *req, unsigned int port)
646{
647}
648
649static inline void
650trace_i915_gem_request_out(struct drm_i915_gem_request *req)
651{
652}
Tvrtko Ursulin354d0362017-02-21 11:01:42 +0000653#endif
654#endif
655
Tvrtko Ursulindffabc82017-02-21 09:13:48 +0000656TRACE_EVENT(intel_engine_notify,
657 TP_PROTO(struct intel_engine_cs *engine, bool waiters),
658 TP_ARGS(engine, waiters),
Chris Wilson814e9b52013-09-23 17:33:19 -0300659
660 TP_STRUCT__entry(
661 __field(u32, dev)
662 __field(u32, ring)
663 __field(u32, seqno)
Tvrtko Ursulindffabc82017-02-21 09:13:48 +0000664 __field(bool, waiters)
Chris Wilson814e9b52013-09-23 17:33:19 -0300665 ),
666
667 TP_fast_assign(
Chris Wilson91c8a322016-07-05 10:40:23 +0100668 __entry->dev = engine->i915->drm.primary->index;
Tvrtko Ursulin4a570db2016-03-16 11:00:38 +0000669 __entry->ring = engine->id;
Chris Wilson1b7744e2016-07-01 17:23:17 +0100670 __entry->seqno = intel_engine_get_seqno(engine);
Tvrtko Ursulindffabc82017-02-21 09:13:48 +0000671 __entry->waiters = waiters;
Chris Wilson814e9b52013-09-23 17:33:19 -0300672 ),
673
Tvrtko Ursulindffabc82017-02-21 09:13:48 +0000674 TP_printk("dev=%u, ring=%u, seqno=%u, waiters=%u",
675 __entry->dev, __entry->ring, __entry->seqno,
676 __entry->waiters)
Chris Wilson1c5d22f2009-08-25 11:15:50 +0100677);
678
Li Zefan903cf202010-03-11 16:41:45 +0800679DEFINE_EVENT(i915_gem_request, i915_gem_request_retire,
John Harrison74328ee2014-11-24 18:49:38 +0000680 TP_PROTO(struct drm_i915_gem_request *req),
681 TP_ARGS(req)
Chris Wilson1c5d22f2009-08-25 11:15:50 +0100682);
683
Ben Widawskyf3fd3762012-05-24 15:03:09 -0700684TRACE_EVENT(i915_gem_request_wait_begin,
Tvrtko Ursulin936925022017-02-21 11:00:24 +0000685 TP_PROTO(struct drm_i915_gem_request *req, unsigned int flags),
686 TP_ARGS(req, flags),
Ben Widawskyf3fd3762012-05-24 15:03:09 -0700687
688 TP_STRUCT__entry(
689 __field(u32, dev)
690 __field(u32, ring)
Tvrtko Ursulin936925022017-02-21 11:00:24 +0000691 __field(u32, ctx)
Ben Widawskyf3fd3762012-05-24 15:03:09 -0700692 __field(u32, seqno)
Tvrtko Ursulin936925022017-02-21 11:00:24 +0000693 __field(u32, global)
694 __field(unsigned int, flags)
Ben Widawskyf3fd3762012-05-24 15:03:09 -0700695 ),
696
697 /* NB: the blocking information is racy since mutex_is_locked
698 * doesn't check that the current thread holds the lock. The only
699 * other option would be to pass the boolean information of whether
700 * or not the class was blocking down through the stack which is
701 * less desirable.
702 */
703 TP_fast_assign(
Chris Wilson91c8a322016-07-05 10:40:23 +0100704 __entry->dev = req->i915->drm.primary->index;
Chris Wilsonc0336662016-05-06 15:40:21 +0100705 __entry->ring = req->engine->id;
Tvrtko Ursulin936925022017-02-21 11:00:24 +0000706 __entry->ctx = req->ctx->hw_id;
707 __entry->seqno = req->fence.seqno;
708 __entry->global = req->global_seqno;
709 __entry->flags = flags;
Ben Widawskyf3fd3762012-05-24 15:03:09 -0700710 ),
711
Tvrtko Ursulin936925022017-02-21 11:00:24 +0000712 TP_printk("dev=%u, ring=%u, ctx=%u, seqno=%u, global=%u, blocking=%u, flags=0x%x",
713 __entry->dev, __entry->ring, __entry->ctx, __entry->seqno,
714 __entry->global, !!(__entry->flags & I915_WAIT_LOCKED),
715 __entry->flags)
Chris Wilson1c5d22f2009-08-25 11:15:50 +0100716);
717
Li Zefan903cf202010-03-11 16:41:45 +0800718DEFINE_EVENT(i915_gem_request, i915_gem_request_wait_end,
John Harrison74328ee2014-11-24 18:49:38 +0000719 TP_PROTO(struct drm_i915_gem_request *req),
720 TP_ARGS(req)
Li Zefan903cf202010-03-11 16:41:45 +0800721);
722
Jesse Barnese5510fa2010-07-01 16:48:37 -0700723TRACE_EVENT(i915_flip_request,
Chris Wilson05394f32010-11-08 19:18:58 +0000724 TP_PROTO(int plane, struct drm_i915_gem_object *obj),
Jesse Barnese5510fa2010-07-01 16:48:37 -0700725
726 TP_ARGS(plane, obj),
727
728 TP_STRUCT__entry(
729 __field(int, plane)
Chris Wilson05394f32010-11-08 19:18:58 +0000730 __field(struct drm_i915_gem_object *, obj)
Jesse Barnese5510fa2010-07-01 16:48:37 -0700731 ),
732
733 TP_fast_assign(
734 __entry->plane = plane;
735 __entry->obj = obj;
736 ),
737
738 TP_printk("plane=%d, obj=%p", __entry->plane, __entry->obj)
739);
740
741TRACE_EVENT(i915_flip_complete,
Chris Wilson05394f32010-11-08 19:18:58 +0000742 TP_PROTO(int plane, struct drm_i915_gem_object *obj),
Jesse Barnese5510fa2010-07-01 16:48:37 -0700743
744 TP_ARGS(plane, obj),
745
746 TP_STRUCT__entry(
747 __field(int, plane)
Chris Wilson05394f32010-11-08 19:18:58 +0000748 __field(struct drm_i915_gem_object *, obj)
Jesse Barnese5510fa2010-07-01 16:48:37 -0700749 ),
750
751 TP_fast_assign(
752 __entry->plane = plane;
753 __entry->obj = obj;
754 ),
755
756 TP_printk("plane=%d, obj=%p", __entry->plane, __entry->obj)
757);
758
Chris Wilsoned71f1b2013-07-19 20:36:56 +0100759TRACE_EVENT_CONDITION(i915_reg_rw,
Ville Syrjäläf0f59a02015-11-18 15:33:26 +0200760 TP_PROTO(bool write, i915_reg_t reg, u64 val, int len, bool trace),
Yuanhan Liuba4f01a2010-11-08 17:09:41 +0800761
Chris Wilsoned71f1b2013-07-19 20:36:56 +0100762 TP_ARGS(write, reg, val, len, trace),
763
764 TP_CONDITION(trace),
Yuanhan Liuba4f01a2010-11-08 17:09:41 +0800765
Akshay Joshi0206e352011-08-16 15:34:10 -0400766 TP_STRUCT__entry(
767 __field(u64, val)
768 __field(u32, reg)
769 __field(u16, write)
770 __field(u16, len)
771 ),
Yuanhan Liuba4f01a2010-11-08 17:09:41 +0800772
Akshay Joshi0206e352011-08-16 15:34:10 -0400773 TP_fast_assign(
774 __entry->val = (u64)val;
Ville Syrjäläf0f59a02015-11-18 15:33:26 +0200775 __entry->reg = i915_mmio_reg_offset(reg);
Akshay Joshi0206e352011-08-16 15:34:10 -0400776 __entry->write = write;
777 __entry->len = len;
778 ),
Yuanhan Liuba4f01a2010-11-08 17:09:41 +0800779
Akshay Joshi0206e352011-08-16 15:34:10 -0400780 TP_printk("%s reg=0x%x, len=%d, val=(0x%x, 0x%x)",
781 __entry->write ? "write" : "read",
782 __entry->reg, __entry->len,
783 (u32)(__entry->val & 0xffffffff),
784 (u32)(__entry->val >> 32))
Yuanhan Liuba4f01a2010-11-08 17:09:41 +0800785);
786
Daniel Vetterbe2cde92012-08-30 13:26:48 +0200787TRACE_EVENT(intel_gpu_freq_change,
788 TP_PROTO(u32 freq),
789 TP_ARGS(freq),
790
791 TP_STRUCT__entry(
792 __field(u32, freq)
793 ),
794
795 TP_fast_assign(
796 __entry->freq = freq;
797 ),
798
799 TP_printk("new_freq=%u", __entry->freq)
800);
801
Daniele Ceraolo Spurio198c9742014-11-10 13:44:31 +0000802/**
803 * DOC: i915_ppgtt_create and i915_ppgtt_release tracepoints
804 *
805 * With full ppgtt enabled each process using drm will allocate at least one
806 * translation table. With these traces it is possible to keep track of the
807 * allocation and of the lifetime of the tables; this can be used during
808 * testing/debug to verify that we are not leaking ppgtts.
809 * These traces identify the ppgtt through the vm pointer, which is also printed
810 * by the i915_vma_bind and i915_vma_unbind tracepoints.
811 */
812DECLARE_EVENT_CLASS(i915_ppgtt,
813 TP_PROTO(struct i915_address_space *vm),
814 TP_ARGS(vm),
815
816 TP_STRUCT__entry(
817 __field(struct i915_address_space *, vm)
818 __field(u32, dev)
819 ),
820
821 TP_fast_assign(
822 __entry->vm = vm;
Chris Wilsonc6385c92016-11-29 12:42:05 +0000823 __entry->dev = vm->i915->drm.primary->index;
Daniele Ceraolo Spurio198c9742014-11-10 13:44:31 +0000824 ),
825
826 TP_printk("dev=%u, vm=%p", __entry->dev, __entry->vm)
827)
828
829DEFINE_EVENT(i915_ppgtt, i915_ppgtt_create,
830 TP_PROTO(struct i915_address_space *vm),
831 TP_ARGS(vm)
832);
833
834DEFINE_EVENT(i915_ppgtt, i915_ppgtt_release,
835 TP_PROTO(struct i915_address_space *vm),
836 TP_ARGS(vm)
837);
838
839/**
840 * DOC: i915_context_create and i915_context_free tracepoints
841 *
842 * These tracepoints are used to track creation and deletion of contexts.
843 * If full ppgtt is enabled, they also print the address of the vm assigned to
844 * the context.
845 */
846DECLARE_EVENT_CLASS(i915_context,
Chris Wilsone2efd132016-05-24 14:53:34 +0100847 TP_PROTO(struct i915_gem_context *ctx),
Daniele Ceraolo Spurio198c9742014-11-10 13:44:31 +0000848 TP_ARGS(ctx),
849
850 TP_STRUCT__entry(
851 __field(u32, dev)
Chris Wilsone2efd132016-05-24 14:53:34 +0100852 __field(struct i915_gem_context *, ctx)
Tvrtko Ursulin99c181a2017-02-21 09:13:50 +0000853 __field(u32, hw_id)
Daniele Ceraolo Spurio198c9742014-11-10 13:44:31 +0000854 __field(struct i915_address_space *, vm)
855 ),
856
857 TP_fast_assign(
Chris Wilson91c8a322016-07-05 10:40:23 +0100858 __entry->dev = ctx->i915->drm.primary->index;
Tvrtko Ursulin99c181a2017-02-21 09:13:50 +0000859 __entry->ctx = ctx;
860 __entry->hw_id = ctx->hw_id;
861 __entry->vm = ctx->ppgtt ? &ctx->ppgtt->base : NULL;
Daniele Ceraolo Spurio198c9742014-11-10 13:44:31 +0000862 ),
863
Tvrtko Ursulin99c181a2017-02-21 09:13:50 +0000864 TP_printk("dev=%u, ctx=%p, ctx_vm=%p, hw_id=%u",
865 __entry->dev, __entry->ctx, __entry->vm, __entry->hw_id)
Daniele Ceraolo Spurio198c9742014-11-10 13:44:31 +0000866)
867
868DEFINE_EVENT(i915_context, i915_context_create,
Chris Wilsone2efd132016-05-24 14:53:34 +0100869 TP_PROTO(struct i915_gem_context *ctx),
Daniele Ceraolo Spurio198c9742014-11-10 13:44:31 +0000870 TP_ARGS(ctx)
871);
872
873DEFINE_EVENT(i915_context, i915_context_free,
Chris Wilsone2efd132016-05-24 14:53:34 +0100874 TP_PROTO(struct i915_gem_context *ctx),
Daniele Ceraolo Spurio198c9742014-11-10 13:44:31 +0000875 TP_ARGS(ctx)
876);
877
878/**
879 * DOC: switch_mm tracepoint
880 *
881 * This tracepoint allows tracking of the mm switch, which is an important point
882 * in the lifetime of the vm in the legacy submission path. This tracepoint is
883 * called only if full ppgtt is enabled.
884 */
885TRACE_EVENT(switch_mm,
Chris Wilsone2efd132016-05-24 14:53:34 +0100886 TP_PROTO(struct intel_engine_cs *engine, struct i915_gem_context *to),
Daniele Ceraolo Spurio198c9742014-11-10 13:44:31 +0000887
Tvrtko Ursulin4a570db2016-03-16 11:00:38 +0000888 TP_ARGS(engine, to),
Daniele Ceraolo Spurio198c9742014-11-10 13:44:31 +0000889
890 TP_STRUCT__entry(
891 __field(u32, ring)
Chris Wilsone2efd132016-05-24 14:53:34 +0100892 __field(struct i915_gem_context *, to)
Daniele Ceraolo Spurio198c9742014-11-10 13:44:31 +0000893 __field(struct i915_address_space *, vm)
894 __field(u32, dev)
895 ),
896
897 TP_fast_assign(
Tvrtko Ursulin4a570db2016-03-16 11:00:38 +0000898 __entry->ring = engine->id;
Daniele Ceraolo Spurio198c9742014-11-10 13:44:31 +0000899 __entry->to = to;
900 __entry->vm = to->ppgtt? &to->ppgtt->base : NULL;
Chris Wilson91c8a322016-07-05 10:40:23 +0100901 __entry->dev = engine->i915->drm.primary->index;
Daniele Ceraolo Spurio198c9742014-11-10 13:44:31 +0000902 ),
903
904 TP_printk("dev=%u, ring=%u, ctx=%p, ctx_vm=%p",
905 __entry->dev, __entry->ring, __entry->to, __entry->vm)
906);
907
Chris Wilson1c5d22f2009-08-25 11:15:50 +0100908#endif /* _I915_TRACE_H_ */
909
910/* This part must be outside protection */
911#undef TRACE_INCLUDE_PATH
Peter Cliftona7c54272010-05-03 13:24:41 +0100912#define TRACE_INCLUDE_PATH .
Chris Wilson1c5d22f2009-08-25 11:15:50 +0100913#include <trace/define_trace.h>