xref: /openbmc/linux/drivers/gpu/drm/i915/i915_trace.h (revision a4872ba6)
11c5d22f7SChris Wilson #if !defined(_I915_TRACE_H_) || defined(TRACE_HEADER_MULTI_READ)
21c5d22f7SChris Wilson #define _I915_TRACE_H_
31c5d22f7SChris Wilson 
41c5d22f7SChris Wilson #include <linux/stringify.h>
51c5d22f7SChris Wilson #include <linux/types.h>
61c5d22f7SChris Wilson #include <linux/tracepoint.h>
71c5d22f7SChris Wilson 
81c5d22f7SChris Wilson #include <drm/drmP.h>
905394f39SChris Wilson #include "i915_drv.h"
1025ef284aSVille Syrjälä #include "intel_drv.h"
11db53a302SChris Wilson #include "intel_ringbuffer.h"
121c5d22f7SChris Wilson 
131c5d22f7SChris Wilson #undef TRACE_SYSTEM
141c5d22f7SChris Wilson #define TRACE_SYSTEM i915
151c5d22f7SChris Wilson #define TRACE_SYSTEM_STRING __stringify(TRACE_SYSTEM)
161c5d22f7SChris Wilson #define TRACE_INCLUDE_FILE i915_trace
171c5d22f7SChris Wilson 
1825ef284aSVille Syrjälä /* pipe updates */
1925ef284aSVille Syrjälä 
2025ef284aSVille Syrjälä TRACE_EVENT(i915_pipe_update_start,
2125ef284aSVille Syrjälä 	    TP_PROTO(struct intel_crtc *crtc, u32 min, u32 max),
2225ef284aSVille Syrjälä 	    TP_ARGS(crtc, min, max),
2325ef284aSVille Syrjälä 
2425ef284aSVille Syrjälä 	    TP_STRUCT__entry(
2525ef284aSVille Syrjälä 			     __field(enum pipe, pipe)
2625ef284aSVille Syrjälä 			     __field(u32, frame)
2725ef284aSVille Syrjälä 			     __field(u32, scanline)
2825ef284aSVille Syrjälä 			     __field(u32, min)
2925ef284aSVille Syrjälä 			     __field(u32, max)
3025ef284aSVille Syrjälä 			     ),
3125ef284aSVille Syrjälä 
3225ef284aSVille Syrjälä 	    TP_fast_assign(
3325ef284aSVille Syrjälä 			   __entry->pipe = crtc->pipe;
3425ef284aSVille Syrjälä 			   __entry->frame = crtc->base.dev->driver->get_vblank_counter(crtc->base.dev,
3525ef284aSVille Syrjälä 										       crtc->pipe);
3625ef284aSVille Syrjälä 			   __entry->scanline = intel_get_crtc_scanline(crtc);
3725ef284aSVille Syrjälä 			   __entry->min = min;
3825ef284aSVille Syrjälä 			   __entry->max = max;
3925ef284aSVille Syrjälä 			   ),
4025ef284aSVille Syrjälä 
4125ef284aSVille Syrjälä 	    TP_printk("pipe %c, frame=%u, scanline=%u, min=%u, max=%u",
4225ef284aSVille Syrjälä 		      pipe_name(__entry->pipe), __entry->frame,
4325ef284aSVille Syrjälä 		       __entry->scanline, __entry->min, __entry->max)
4425ef284aSVille Syrjälä );
4525ef284aSVille Syrjälä 
4625ef284aSVille Syrjälä TRACE_EVENT(i915_pipe_update_vblank_evaded,
4725ef284aSVille Syrjälä 	    TP_PROTO(struct intel_crtc *crtc, u32 min, u32 max, u32 frame),
4825ef284aSVille Syrjälä 	    TP_ARGS(crtc, min, max, frame),
4925ef284aSVille Syrjälä 
5025ef284aSVille Syrjälä 	    TP_STRUCT__entry(
5125ef284aSVille Syrjälä 			     __field(enum pipe, pipe)
5225ef284aSVille Syrjälä 			     __field(u32, frame)
5325ef284aSVille Syrjälä 			     __field(u32, scanline)
5425ef284aSVille Syrjälä 			     __field(u32, min)
5525ef284aSVille Syrjälä 			     __field(u32, max)
5625ef284aSVille Syrjälä 			     ),
5725ef284aSVille Syrjälä 
5825ef284aSVille Syrjälä 	    TP_fast_assign(
5925ef284aSVille Syrjälä 			   __entry->pipe = crtc->pipe;
6025ef284aSVille Syrjälä 			   __entry->frame = frame;
6125ef284aSVille Syrjälä 			   __entry->scanline = intel_get_crtc_scanline(crtc);
6225ef284aSVille Syrjälä 			   __entry->min = min;
6325ef284aSVille Syrjälä 			   __entry->max = max;
6425ef284aSVille Syrjälä 			   ),
6525ef284aSVille Syrjälä 
6625ef284aSVille Syrjälä 	    TP_printk("pipe %c, frame=%u, scanline=%u, min=%u, max=%u",
6725ef284aSVille Syrjälä 		      pipe_name(__entry->pipe), __entry->frame,
6825ef284aSVille Syrjälä 		       __entry->scanline, __entry->min, __entry->max)
6925ef284aSVille Syrjälä );
7025ef284aSVille Syrjälä 
7125ef284aSVille Syrjälä TRACE_EVENT(i915_pipe_update_end,
7225ef284aSVille Syrjälä 	    TP_PROTO(struct intel_crtc *crtc, u32 frame),
7325ef284aSVille Syrjälä 	    TP_ARGS(crtc, frame),
7425ef284aSVille Syrjälä 
7525ef284aSVille Syrjälä 	    TP_STRUCT__entry(
7625ef284aSVille Syrjälä 			     __field(enum pipe, pipe)
7725ef284aSVille Syrjälä 			     __field(u32, frame)
7825ef284aSVille Syrjälä 			     __field(u32, scanline)
7925ef284aSVille Syrjälä 			     ),
8025ef284aSVille Syrjälä 
8125ef284aSVille Syrjälä 	    TP_fast_assign(
8225ef284aSVille Syrjälä 			   __entry->pipe = crtc->pipe;
8325ef284aSVille Syrjälä 			   __entry->frame = frame;
8425ef284aSVille Syrjälä 			   __entry->scanline = intel_get_crtc_scanline(crtc);
8525ef284aSVille Syrjälä 			   ),
8625ef284aSVille Syrjälä 
8725ef284aSVille Syrjälä 	    TP_printk("pipe %c, frame=%u, scanline=%u",
8825ef284aSVille Syrjälä 		      pipe_name(__entry->pipe), __entry->frame,
8925ef284aSVille Syrjälä 		      __entry->scanline)
9025ef284aSVille Syrjälä );
9125ef284aSVille Syrjälä 
921c5d22f7SChris Wilson /* object tracking */
931c5d22f7SChris Wilson 
941c5d22f7SChris Wilson TRACE_EVENT(i915_gem_object_create,
9505394f39SChris Wilson 	    TP_PROTO(struct drm_i915_gem_object *obj),
961c5d22f7SChris Wilson 	    TP_ARGS(obj),
971c5d22f7SChris Wilson 
981c5d22f7SChris Wilson 	    TP_STRUCT__entry(
9905394f39SChris Wilson 			     __field(struct drm_i915_gem_object *, obj)
1001c5d22f7SChris Wilson 			     __field(u32, size)
1011c5d22f7SChris Wilson 			     ),
1021c5d22f7SChris Wilson 
1031c5d22f7SChris Wilson 	    TP_fast_assign(
1041c5d22f7SChris Wilson 			   __entry->obj = obj;
10505394f39SChris Wilson 			   __entry->size = obj->base.size;
1061c5d22f7SChris Wilson 			   ),
1071c5d22f7SChris Wilson 
1081c5d22f7SChris Wilson 	    TP_printk("obj=%p, size=%u", __entry->obj, __entry->size)
1091c5d22f7SChris Wilson );
1101c5d22f7SChris Wilson 
11107fe0b12SBen Widawsky TRACE_EVENT(i915_vma_bind,
1121ec9e26dSDaniel Vetter 	    TP_PROTO(struct i915_vma *vma, unsigned flags),
1131ec9e26dSDaniel Vetter 	    TP_ARGS(vma, flags),
1141c5d22f7SChris Wilson 
1151c5d22f7SChris Wilson 	    TP_STRUCT__entry(
11605394f39SChris Wilson 			     __field(struct drm_i915_gem_object *, obj)
11707fe0b12SBen Widawsky 			     __field(struct i915_address_space *, vm)
118db53a302SChris Wilson 			     __field(u32, offset)
119db53a302SChris Wilson 			     __field(u32, size)
1201ec9e26dSDaniel Vetter 			     __field(unsigned, flags)
1211c5d22f7SChris Wilson 			     ),
1221c5d22f7SChris Wilson 
1231c5d22f7SChris Wilson 	    TP_fast_assign(
12407fe0b12SBen Widawsky 			   __entry->obj = vma->obj;
12507fe0b12SBen Widawsky 			   __entry->vm = vma->vm;
12607fe0b12SBen Widawsky 			   __entry->offset = vma->node.start;
12707fe0b12SBen Widawsky 			   __entry->size = vma->node.size;
1281ec9e26dSDaniel Vetter 			   __entry->flags = flags;
1291c5d22f7SChris Wilson 			   ),
1301c5d22f7SChris Wilson 
13107fe0b12SBen Widawsky 	    TP_printk("obj=%p, offset=%08x size=%x%s vm=%p",
132db53a302SChris Wilson 		      __entry->obj, __entry->offset, __entry->size,
1331ec9e26dSDaniel Vetter 		      __entry->flags & PIN_MAPPABLE ? ", mappable" : "",
13407fe0b12SBen Widawsky 		      __entry->vm)
1351c5d22f7SChris Wilson );
1361c5d22f7SChris Wilson 
13707fe0b12SBen Widawsky TRACE_EVENT(i915_vma_unbind,
13807fe0b12SBen Widawsky 	    TP_PROTO(struct i915_vma *vma),
13907fe0b12SBen Widawsky 	    TP_ARGS(vma),
140db53a302SChris Wilson 
141db53a302SChris Wilson 	    TP_STRUCT__entry(
142db53a302SChris Wilson 			     __field(struct drm_i915_gem_object *, obj)
14307fe0b12SBen Widawsky 			     __field(struct i915_address_space *, vm)
144db53a302SChris Wilson 			     __field(u32, offset)
145db53a302SChris Wilson 			     __field(u32, size)
146db53a302SChris Wilson 			     ),
147db53a302SChris Wilson 
148db53a302SChris Wilson 	    TP_fast_assign(
14907fe0b12SBen Widawsky 			   __entry->obj = vma->obj;
15007fe0b12SBen Widawsky 			   __entry->vm = vma->vm;
15107fe0b12SBen Widawsky 			   __entry->offset = vma->node.start;
15207fe0b12SBen Widawsky 			   __entry->size = vma->node.size;
153db53a302SChris Wilson 			   ),
154db53a302SChris Wilson 
15507fe0b12SBen Widawsky 	    TP_printk("obj=%p, offset=%08x size=%x vm=%p",
15607fe0b12SBen Widawsky 		      __entry->obj, __entry->offset, __entry->size, __entry->vm)
157db53a302SChris Wilson );
158db53a302SChris Wilson 
1591c5d22f7SChris Wilson TRACE_EVENT(i915_gem_object_change_domain,
160db53a302SChris Wilson 	    TP_PROTO(struct drm_i915_gem_object *obj, u32 old_read, u32 old_write),
161db53a302SChris Wilson 	    TP_ARGS(obj, old_read, old_write),
1621c5d22f7SChris Wilson 
1631c5d22f7SChris Wilson 	    TP_STRUCT__entry(
16405394f39SChris Wilson 			     __field(struct drm_i915_gem_object *, obj)
1651c5d22f7SChris Wilson 			     __field(u32, read_domains)
1661c5d22f7SChris Wilson 			     __field(u32, write_domain)
1671c5d22f7SChris Wilson 			     ),
1681c5d22f7SChris Wilson 
1691c5d22f7SChris Wilson 	    TP_fast_assign(
1701c5d22f7SChris Wilson 			   __entry->obj = obj;
171db53a302SChris Wilson 			   __entry->read_domains = obj->base.read_domains | (old_read << 16);
172db53a302SChris Wilson 			   __entry->write_domain = obj->base.write_domain | (old_write << 16);
1731c5d22f7SChris Wilson 			   ),
1741c5d22f7SChris Wilson 
175db53a302SChris Wilson 	    TP_printk("obj=%p, read=%02x=>%02x, write=%02x=>%02x",
1761c5d22f7SChris Wilson 		      __entry->obj,
177db53a302SChris Wilson 		      __entry->read_domains >> 16,
178db53a302SChris Wilson 		      __entry->read_domains & 0xffff,
179db53a302SChris Wilson 		      __entry->write_domain >> 16,
180db53a302SChris Wilson 		      __entry->write_domain & 0xffff)
181db53a302SChris Wilson );
182db53a302SChris Wilson 
183db53a302SChris Wilson TRACE_EVENT(i915_gem_object_pwrite,
184db53a302SChris Wilson 	    TP_PROTO(struct drm_i915_gem_object *obj, u32 offset, u32 len),
185db53a302SChris Wilson 	    TP_ARGS(obj, offset, len),
186db53a302SChris Wilson 
187db53a302SChris Wilson 	    TP_STRUCT__entry(
188db53a302SChris Wilson 			     __field(struct drm_i915_gem_object *, obj)
189db53a302SChris Wilson 			     __field(u32, offset)
190db53a302SChris Wilson 			     __field(u32, len)
191db53a302SChris Wilson 			     ),
192db53a302SChris Wilson 
193db53a302SChris Wilson 	    TP_fast_assign(
194db53a302SChris Wilson 			   __entry->obj = obj;
195db53a302SChris Wilson 			   __entry->offset = offset;
196db53a302SChris Wilson 			   __entry->len = len;
197db53a302SChris Wilson 			   ),
198db53a302SChris Wilson 
199db53a302SChris Wilson 	    TP_printk("obj=%p, offset=%u, len=%u",
200db53a302SChris Wilson 		      __entry->obj, __entry->offset, __entry->len)
201db53a302SChris Wilson );
202db53a302SChris Wilson 
203db53a302SChris Wilson TRACE_EVENT(i915_gem_object_pread,
204db53a302SChris Wilson 	    TP_PROTO(struct drm_i915_gem_object *obj, u32 offset, u32 len),
205db53a302SChris Wilson 	    TP_ARGS(obj, offset, len),
206db53a302SChris Wilson 
207db53a302SChris Wilson 	    TP_STRUCT__entry(
208db53a302SChris Wilson 			     __field(struct drm_i915_gem_object *, obj)
209db53a302SChris Wilson 			     __field(u32, offset)
210db53a302SChris Wilson 			     __field(u32, len)
211db53a302SChris Wilson 			     ),
212db53a302SChris Wilson 
213db53a302SChris Wilson 	    TP_fast_assign(
214db53a302SChris Wilson 			   __entry->obj = obj;
215db53a302SChris Wilson 			   __entry->offset = offset;
216db53a302SChris Wilson 			   __entry->len = len;
217db53a302SChris Wilson 			   ),
218db53a302SChris Wilson 
219db53a302SChris Wilson 	    TP_printk("obj=%p, offset=%u, len=%u",
220db53a302SChris Wilson 		      __entry->obj, __entry->offset, __entry->len)
221db53a302SChris Wilson );
222db53a302SChris Wilson 
223db53a302SChris Wilson TRACE_EVENT(i915_gem_object_fault,
224db53a302SChris Wilson 	    TP_PROTO(struct drm_i915_gem_object *obj, u32 index, bool gtt, bool write),
225db53a302SChris Wilson 	    TP_ARGS(obj, index, gtt, write),
226db53a302SChris Wilson 
227db53a302SChris Wilson 	    TP_STRUCT__entry(
228db53a302SChris Wilson 			     __field(struct drm_i915_gem_object *, obj)
229db53a302SChris Wilson 			     __field(u32, index)
230db53a302SChris Wilson 			     __field(bool, gtt)
231db53a302SChris Wilson 			     __field(bool, write)
232db53a302SChris Wilson 			     ),
233db53a302SChris Wilson 
234db53a302SChris Wilson 	    TP_fast_assign(
235db53a302SChris Wilson 			   __entry->obj = obj;
236db53a302SChris Wilson 			   __entry->index = index;
237db53a302SChris Wilson 			   __entry->gtt = gtt;
238db53a302SChris Wilson 			   __entry->write = write;
239db53a302SChris Wilson 			   ),
240db53a302SChris Wilson 
241db53a302SChris Wilson 	    TP_printk("obj=%p, %s index=%u %s",
242db53a302SChris Wilson 		      __entry->obj,
243db53a302SChris Wilson 		      __entry->gtt ? "GTT" : "CPU",
244db53a302SChris Wilson 		      __entry->index,
245db53a302SChris Wilson 		      __entry->write ? ", writable" : "")
2461c5d22f7SChris Wilson );
2471c5d22f7SChris Wilson 
248903cf20cSLi Zefan DECLARE_EVENT_CLASS(i915_gem_object,
24905394f39SChris Wilson 	    TP_PROTO(struct drm_i915_gem_object *obj),
2501c5d22f7SChris Wilson 	    TP_ARGS(obj),
2511c5d22f7SChris Wilson 
2521c5d22f7SChris Wilson 	    TP_STRUCT__entry(
25305394f39SChris Wilson 			     __field(struct drm_i915_gem_object *, obj)
2541c5d22f7SChris Wilson 			     ),
2551c5d22f7SChris Wilson 
2561c5d22f7SChris Wilson 	    TP_fast_assign(
2571c5d22f7SChris Wilson 			   __entry->obj = obj;
2581c5d22f7SChris Wilson 			   ),
2591c5d22f7SChris Wilson 
2601c5d22f7SChris Wilson 	    TP_printk("obj=%p", __entry->obj)
2611c5d22f7SChris Wilson );
2621c5d22f7SChris Wilson 
263f41275e8SLi Zefan DEFINE_EVENT(i915_gem_object, i915_gem_object_clflush,
26405394f39SChris Wilson 	     TP_PROTO(struct drm_i915_gem_object *obj),
265903cf20cSLi Zefan 	     TP_ARGS(obj)
266903cf20cSLi Zefan );
2671c5d22f7SChris Wilson 
268903cf20cSLi Zefan DEFINE_EVENT(i915_gem_object, i915_gem_object_destroy,
26905394f39SChris Wilson 	    TP_PROTO(struct drm_i915_gem_object *obj),
270903cf20cSLi Zefan 	    TP_ARGS(obj)
2711c5d22f7SChris Wilson );
2721c5d22f7SChris Wilson 
273db53a302SChris Wilson TRACE_EVENT(i915_gem_evict,
2741ec9e26dSDaniel Vetter 	    TP_PROTO(struct drm_device *dev, u32 size, u32 align, unsigned flags),
2751ec9e26dSDaniel Vetter 	    TP_ARGS(dev, size, align, flags),
2761c5d22f7SChris Wilson 
2771c5d22f7SChris Wilson 	    TP_STRUCT__entry(
2784f49be54SChris Wilson 			     __field(u32, dev)
279db53a302SChris Wilson 			     __field(u32, size)
280db53a302SChris Wilson 			     __field(u32, align)
2811ec9e26dSDaniel Vetter 			     __field(unsigned, flags)
2821c5d22f7SChris Wilson 			    ),
2831c5d22f7SChris Wilson 
2841c5d22f7SChris Wilson 	    TP_fast_assign(
2854f49be54SChris Wilson 			   __entry->dev = dev->primary->index;
286db53a302SChris Wilson 			   __entry->size = size;
287db53a302SChris Wilson 			   __entry->align = align;
2881ec9e26dSDaniel Vetter 			   __entry->flags = flags;
2891c5d22f7SChris Wilson 			  ),
2901c5d22f7SChris Wilson 
291db53a302SChris Wilson 	    TP_printk("dev=%d, size=%d, align=%d %s",
292db53a302SChris Wilson 		      __entry->dev, __entry->size, __entry->align,
2931ec9e26dSDaniel Vetter 		      __entry->flags & PIN_MAPPABLE ? ", mappable" : "")
2941c5d22f7SChris Wilson );
2951c5d22f7SChris Wilson 
296db53a302SChris Wilson TRACE_EVENT(i915_gem_evict_everything,
2976c085a72SChris Wilson 	    TP_PROTO(struct drm_device *dev),
2986c085a72SChris Wilson 	    TP_ARGS(dev),
2991c5d22f7SChris Wilson 
3001c5d22f7SChris Wilson 	    TP_STRUCT__entry(
3014f49be54SChris Wilson 			     __field(u32, dev)
3021c5d22f7SChris Wilson 			    ),
3031c5d22f7SChris Wilson 
3041c5d22f7SChris Wilson 	    TP_fast_assign(
3054f49be54SChris Wilson 			   __entry->dev = dev->primary->index;
3061c5d22f7SChris Wilson 			  ),
3071c5d22f7SChris Wilson 
3086c085a72SChris Wilson 	    TP_printk("dev=%d", __entry->dev)
309db53a302SChris Wilson );
310db53a302SChris Wilson 
311bcccff84SBen Widawsky TRACE_EVENT(i915_gem_evict_vm,
312bcccff84SBen Widawsky 	    TP_PROTO(struct i915_address_space *vm),
313bcccff84SBen Widawsky 	    TP_ARGS(vm),
314bcccff84SBen Widawsky 
315bcccff84SBen Widawsky 	    TP_STRUCT__entry(
3169297ebf2SSteven Rostedt 			     __field(u32, dev)
317bcccff84SBen Widawsky 			     __field(struct i915_address_space *, vm)
318bcccff84SBen Widawsky 			    ),
319bcccff84SBen Widawsky 
320bcccff84SBen Widawsky 	    TP_fast_assign(
3219297ebf2SSteven Rostedt 			   __entry->dev = vm->dev->primary->index;
322bcccff84SBen Widawsky 			   __entry->vm = vm;
323bcccff84SBen Widawsky 			  ),
324bcccff84SBen Widawsky 
3259297ebf2SSteven Rostedt 	    TP_printk("dev=%d, vm=%p", __entry->dev, __entry->vm)
326bcccff84SBen Widawsky );
327bcccff84SBen Widawsky 
328b52b89daSChris Wilson TRACE_EVENT(i915_gem_ring_sync_to,
329a4872ba6SOscar Mateo 	    TP_PROTO(struct intel_engine_cs *from,
330a4872ba6SOscar Mateo 		     struct intel_engine_cs *to,
331b52b89daSChris Wilson 		     u32 seqno),
332b52b89daSChris Wilson 	    TP_ARGS(from, to, seqno),
333b52b89daSChris Wilson 
334b52b89daSChris Wilson 	    TP_STRUCT__entry(
335b52b89daSChris Wilson 			     __field(u32, dev)
336b52b89daSChris Wilson 			     __field(u32, sync_from)
337b52b89daSChris Wilson 			     __field(u32, sync_to)
338b52b89daSChris Wilson 			     __field(u32, seqno)
339b52b89daSChris Wilson 			     ),
340b52b89daSChris Wilson 
341b52b89daSChris Wilson 	    TP_fast_assign(
342b52b89daSChris Wilson 			   __entry->dev = from->dev->primary->index;
343b52b89daSChris Wilson 			   __entry->sync_from = from->id;
344b52b89daSChris Wilson 			   __entry->sync_to = to->id;
345b52b89daSChris Wilson 			   __entry->seqno = seqno;
346b52b89daSChris Wilson 			   ),
347b52b89daSChris Wilson 
348b52b89daSChris Wilson 	    TP_printk("dev=%u, sync-from=%u, sync-to=%u, seqno=%u",
349b52b89daSChris Wilson 		      __entry->dev,
350b52b89daSChris Wilson 		      __entry->sync_from, __entry->sync_to,
351b52b89daSChris Wilson 		      __entry->seqno)
352b52b89daSChris Wilson );
353b52b89daSChris Wilson 
354db53a302SChris Wilson TRACE_EVENT(i915_gem_ring_dispatch,
355a4872ba6SOscar Mateo 	    TP_PROTO(struct intel_engine_cs *ring, u32 seqno, u32 flags),
356d7d4eeddSChris Wilson 	    TP_ARGS(ring, seqno, flags),
357db53a302SChris Wilson 
358db53a302SChris Wilson 	    TP_STRUCT__entry(
359db53a302SChris Wilson 			     __field(u32, dev)
360db53a302SChris Wilson 			     __field(u32, ring)
361db53a302SChris Wilson 			     __field(u32, seqno)
362d7d4eeddSChris Wilson 			     __field(u32, flags)
363db53a302SChris Wilson 			     ),
364db53a302SChris Wilson 
365db53a302SChris Wilson 	    TP_fast_assign(
366db53a302SChris Wilson 			   __entry->dev = ring->dev->primary->index;
367db53a302SChris Wilson 			   __entry->ring = ring->id;
368db53a302SChris Wilson 			   __entry->seqno = seqno;
369d7d4eeddSChris Wilson 			   __entry->flags = flags;
370db53a302SChris Wilson 			   i915_trace_irq_get(ring, seqno);
371db53a302SChris Wilson 			   ),
372db53a302SChris Wilson 
373d7d4eeddSChris Wilson 	    TP_printk("dev=%u, ring=%u, seqno=%u, flags=%x",
374d7d4eeddSChris Wilson 		      __entry->dev, __entry->ring, __entry->seqno, __entry->flags)
375db53a302SChris Wilson );
376db53a302SChris Wilson 
377db53a302SChris Wilson TRACE_EVENT(i915_gem_ring_flush,
378a4872ba6SOscar Mateo 	    TP_PROTO(struct intel_engine_cs *ring, u32 invalidate, u32 flush),
379db53a302SChris Wilson 	    TP_ARGS(ring, invalidate, flush),
380db53a302SChris Wilson 
381db53a302SChris Wilson 	    TP_STRUCT__entry(
382db53a302SChris Wilson 			     __field(u32, dev)
383db53a302SChris Wilson 			     __field(u32, ring)
384db53a302SChris Wilson 			     __field(u32, invalidate)
385db53a302SChris Wilson 			     __field(u32, flush)
386db53a302SChris Wilson 			     ),
387db53a302SChris Wilson 
388db53a302SChris Wilson 	    TP_fast_assign(
389db53a302SChris Wilson 			   __entry->dev = ring->dev->primary->index;
390db53a302SChris Wilson 			   __entry->ring = ring->id;
391db53a302SChris Wilson 			   __entry->invalidate = invalidate;
392db53a302SChris Wilson 			   __entry->flush = flush;
393db53a302SChris Wilson 			   ),
394db53a302SChris Wilson 
395db53a302SChris Wilson 	    TP_printk("dev=%u, ring=%x, invalidate=%04x, flush=%04x",
396db53a302SChris Wilson 		      __entry->dev, __entry->ring,
397db53a302SChris Wilson 		      __entry->invalidate, __entry->flush)
3981c5d22f7SChris Wilson );
3991c5d22f7SChris Wilson 
400903cf20cSLi Zefan DECLARE_EVENT_CLASS(i915_gem_request,
401a4872ba6SOscar Mateo 	    TP_PROTO(struct intel_engine_cs *ring, u32 seqno),
402db53a302SChris Wilson 	    TP_ARGS(ring, seqno),
4031c5d22f7SChris Wilson 
4041c5d22f7SChris Wilson 	    TP_STRUCT__entry(
4054f49be54SChris Wilson 			     __field(u32, dev)
406db53a302SChris Wilson 			     __field(u32, ring)
4071c5d22f7SChris Wilson 			     __field(u32, seqno)
4081c5d22f7SChris Wilson 			     ),
4091c5d22f7SChris Wilson 
4101c5d22f7SChris Wilson 	    TP_fast_assign(
411db53a302SChris Wilson 			   __entry->dev = ring->dev->primary->index;
412db53a302SChris Wilson 			   __entry->ring = ring->id;
4131c5d22f7SChris Wilson 			   __entry->seqno = seqno;
4141c5d22f7SChris Wilson 			   ),
4151c5d22f7SChris Wilson 
416db53a302SChris Wilson 	    TP_printk("dev=%u, ring=%u, seqno=%u",
417db53a302SChris Wilson 		      __entry->dev, __entry->ring, __entry->seqno)
418db53a302SChris Wilson );
419db53a302SChris Wilson 
420db53a302SChris Wilson DEFINE_EVENT(i915_gem_request, i915_gem_request_add,
421a4872ba6SOscar Mateo 	    TP_PROTO(struct intel_engine_cs *ring, u32 seqno),
422db53a302SChris Wilson 	    TP_ARGS(ring, seqno)
4231c5d22f7SChris Wilson );
4241c5d22f7SChris Wilson 
425814e9b57SChris Wilson TRACE_EVENT(i915_gem_request_complete,
426a4872ba6SOscar Mateo 	    TP_PROTO(struct intel_engine_cs *ring),
427814e9b57SChris Wilson 	    TP_ARGS(ring),
428814e9b57SChris Wilson 
429814e9b57SChris Wilson 	    TP_STRUCT__entry(
430814e9b57SChris Wilson 			     __field(u32, dev)
431814e9b57SChris Wilson 			     __field(u32, ring)
432814e9b57SChris Wilson 			     __field(u32, seqno)
433814e9b57SChris Wilson 			     ),
434814e9b57SChris Wilson 
435814e9b57SChris Wilson 	    TP_fast_assign(
436814e9b57SChris Wilson 			   __entry->dev = ring->dev->primary->index;
437814e9b57SChris Wilson 			   __entry->ring = ring->id;
438814e9b57SChris Wilson 			   __entry->seqno = ring->get_seqno(ring, false);
439814e9b57SChris Wilson 			   ),
440814e9b57SChris Wilson 
441814e9b57SChris Wilson 	    TP_printk("dev=%u, ring=%u, seqno=%u",
442814e9b57SChris Wilson 		      __entry->dev, __entry->ring, __entry->seqno)
4431c5d22f7SChris Wilson );
4441c5d22f7SChris Wilson 
445903cf20cSLi Zefan DEFINE_EVENT(i915_gem_request, i915_gem_request_retire,
446a4872ba6SOscar Mateo 	    TP_PROTO(struct intel_engine_cs *ring, u32 seqno),
447db53a302SChris Wilson 	    TP_ARGS(ring, seqno)
4481c5d22f7SChris Wilson );
4491c5d22f7SChris Wilson 
450f3fd3768SBen Widawsky TRACE_EVENT(i915_gem_request_wait_begin,
451a4872ba6SOscar Mateo 	    TP_PROTO(struct intel_engine_cs *ring, u32 seqno),
452f3fd3768SBen Widawsky 	    TP_ARGS(ring, seqno),
453f3fd3768SBen Widawsky 
454f3fd3768SBen Widawsky 	    TP_STRUCT__entry(
455f3fd3768SBen Widawsky 			     __field(u32, dev)
456f3fd3768SBen Widawsky 			     __field(u32, ring)
457f3fd3768SBen Widawsky 			     __field(u32, seqno)
458f3fd3768SBen Widawsky 			     __field(bool, blocking)
459f3fd3768SBen Widawsky 			     ),
460f3fd3768SBen Widawsky 
461f3fd3768SBen Widawsky 	    /* NB: the blocking information is racy since mutex_is_locked
462f3fd3768SBen Widawsky 	     * doesn't check that the current thread holds the lock. The only
463f3fd3768SBen Widawsky 	     * other option would be to pass the boolean information of whether
464f3fd3768SBen Widawsky 	     * or not the class was blocking down through the stack which is
465f3fd3768SBen Widawsky 	     * less desirable.
466f3fd3768SBen Widawsky 	     */
467f3fd3768SBen Widawsky 	    TP_fast_assign(
468f3fd3768SBen Widawsky 			   __entry->dev = ring->dev->primary->index;
469f3fd3768SBen Widawsky 			   __entry->ring = ring->id;
470f3fd3768SBen Widawsky 			   __entry->seqno = seqno;
471f3fd3768SBen Widawsky 			   __entry->blocking = mutex_is_locked(&ring->dev->struct_mutex);
472f3fd3768SBen Widawsky 			   ),
473f3fd3768SBen Widawsky 
474f3fd3768SBen Widawsky 	    TP_printk("dev=%u, ring=%u, seqno=%u, blocking=%s",
475f3fd3768SBen Widawsky 		      __entry->dev, __entry->ring, __entry->seqno,
476f3fd3768SBen Widawsky 		      __entry->blocking ?  "yes (NB)" : "no")
4771c5d22f7SChris Wilson );
4781c5d22f7SChris Wilson 
479903cf20cSLi Zefan DEFINE_EVENT(i915_gem_request, i915_gem_request_wait_end,
480a4872ba6SOscar Mateo 	    TP_PROTO(struct intel_engine_cs *ring, u32 seqno),
481db53a302SChris Wilson 	    TP_ARGS(ring, seqno)
482903cf20cSLi Zefan );
483903cf20cSLi Zefan 
484903cf20cSLi Zefan DECLARE_EVENT_CLASS(i915_ring,
485a4872ba6SOscar Mateo 	    TP_PROTO(struct intel_engine_cs *ring),
486db53a302SChris Wilson 	    TP_ARGS(ring),
4871c5d22f7SChris Wilson 
4881c5d22f7SChris Wilson 	    TP_STRUCT__entry(
4894f49be54SChris Wilson 			     __field(u32, dev)
490db53a302SChris Wilson 			     __field(u32, ring)
4911c5d22f7SChris Wilson 			     ),
4921c5d22f7SChris Wilson 
4931c5d22f7SChris Wilson 	    TP_fast_assign(
494db53a302SChris Wilson 			   __entry->dev = ring->dev->primary->index;
495db53a302SChris Wilson 			   __entry->ring = ring->id;
4961c5d22f7SChris Wilson 			   ),
4971c5d22f7SChris Wilson 
498db53a302SChris Wilson 	    TP_printk("dev=%u, ring=%u", __entry->dev, __entry->ring)
4991c5d22f7SChris Wilson );
5001c5d22f7SChris Wilson 
501903cf20cSLi Zefan DEFINE_EVENT(i915_ring, i915_ring_wait_begin,
502a4872ba6SOscar Mateo 	    TP_PROTO(struct intel_engine_cs *ring),
503db53a302SChris Wilson 	    TP_ARGS(ring)
504903cf20cSLi Zefan );
5051c5d22f7SChris Wilson 
506903cf20cSLi Zefan DEFINE_EVENT(i915_ring, i915_ring_wait_end,
507a4872ba6SOscar Mateo 	    TP_PROTO(struct intel_engine_cs *ring),
508db53a302SChris Wilson 	    TP_ARGS(ring)
5091c5d22f7SChris Wilson );
5101c5d22f7SChris Wilson 
511e5510facSJesse Barnes TRACE_EVENT(i915_flip_request,
51205394f39SChris Wilson 	    TP_PROTO(int plane, struct drm_i915_gem_object *obj),
513e5510facSJesse Barnes 
514e5510facSJesse Barnes 	    TP_ARGS(plane, obj),
515e5510facSJesse Barnes 
516e5510facSJesse Barnes 	    TP_STRUCT__entry(
517e5510facSJesse Barnes 		    __field(int, plane)
51805394f39SChris Wilson 		    __field(struct drm_i915_gem_object *, obj)
519e5510facSJesse Barnes 		    ),
520e5510facSJesse Barnes 
521e5510facSJesse Barnes 	    TP_fast_assign(
522e5510facSJesse Barnes 		    __entry->plane = plane;
523e5510facSJesse Barnes 		    __entry->obj = obj;
524e5510facSJesse Barnes 		    ),
525e5510facSJesse Barnes 
526e5510facSJesse Barnes 	    TP_printk("plane=%d, obj=%p", __entry->plane, __entry->obj)
527e5510facSJesse Barnes );
528e5510facSJesse Barnes 
529e5510facSJesse Barnes TRACE_EVENT(i915_flip_complete,
53005394f39SChris Wilson 	    TP_PROTO(int plane, struct drm_i915_gem_object *obj),
531e5510facSJesse Barnes 
532e5510facSJesse Barnes 	    TP_ARGS(plane, obj),
533e5510facSJesse Barnes 
534e5510facSJesse Barnes 	    TP_STRUCT__entry(
535e5510facSJesse Barnes 		    __field(int, plane)
53605394f39SChris Wilson 		    __field(struct drm_i915_gem_object *, obj)
537e5510facSJesse Barnes 		    ),
538e5510facSJesse Barnes 
539e5510facSJesse Barnes 	    TP_fast_assign(
540e5510facSJesse Barnes 		    __entry->plane = plane;
541e5510facSJesse Barnes 		    __entry->obj = obj;
542e5510facSJesse Barnes 		    ),
543e5510facSJesse Barnes 
544e5510facSJesse Barnes 	    TP_printk("plane=%d, obj=%p", __entry->plane, __entry->obj)
545e5510facSJesse Barnes );
546e5510facSJesse Barnes 
547ed71f1b4SChris Wilson TRACE_EVENT_CONDITION(i915_reg_rw,
548ed71f1b4SChris Wilson 	TP_PROTO(bool write, u32 reg, u64 val, int len, bool trace),
549ba4f01a3SYuanhan Liu 
550ed71f1b4SChris Wilson 	TP_ARGS(write, reg, val, len, trace),
551ed71f1b4SChris Wilson 
552ed71f1b4SChris Wilson 	TP_CONDITION(trace),
553ba4f01a3SYuanhan Liu 
554ba4f01a3SYuanhan Liu 	TP_STRUCT__entry(
555db53a302SChris Wilson 		__field(u64, val)
556db53a302SChris Wilson 		__field(u32, reg)
557db53a302SChris Wilson 		__field(u16, write)
558db53a302SChris Wilson 		__field(u16, len)
559ba4f01a3SYuanhan Liu 		),
560ba4f01a3SYuanhan Liu 
561ba4f01a3SYuanhan Liu 	TP_fast_assign(
562db53a302SChris Wilson 		__entry->val = (u64)val;
563ba4f01a3SYuanhan Liu 		__entry->reg = reg;
564db53a302SChris Wilson 		__entry->write = write;
565ba4f01a3SYuanhan Liu 		__entry->len = len;
566ba4f01a3SYuanhan Liu 		),
567ba4f01a3SYuanhan Liu 
568db53a302SChris Wilson 	TP_printk("%s reg=0x%x, len=%d, val=(0x%x, 0x%x)",
569db53a302SChris Wilson 		__entry->write ? "write" : "read",
570db53a302SChris Wilson 		__entry->reg, __entry->len,
571db53a302SChris Wilson 		(u32)(__entry->val & 0xffffffff),
572db53a302SChris Wilson 		(u32)(__entry->val >> 32))
573ba4f01a3SYuanhan Liu );
574ba4f01a3SYuanhan Liu 
575be2cde9aSDaniel Vetter TRACE_EVENT(intel_gpu_freq_change,
576be2cde9aSDaniel Vetter 	    TP_PROTO(u32 freq),
577be2cde9aSDaniel Vetter 	    TP_ARGS(freq),
578be2cde9aSDaniel Vetter 
579be2cde9aSDaniel Vetter 	    TP_STRUCT__entry(
580be2cde9aSDaniel Vetter 			     __field(u32, freq)
581be2cde9aSDaniel Vetter 			     ),
582be2cde9aSDaniel Vetter 
583be2cde9aSDaniel Vetter 	    TP_fast_assign(
584be2cde9aSDaniel Vetter 			   __entry->freq = freq;
585be2cde9aSDaniel Vetter 			   ),
586be2cde9aSDaniel Vetter 
587be2cde9aSDaniel Vetter 	    TP_printk("new_freq=%u", __entry->freq)
588be2cde9aSDaniel Vetter );
589be2cde9aSDaniel Vetter 
5901c5d22f7SChris Wilson #endif /* _I915_TRACE_H_ */
5911c5d22f7SChris Wilson 
5921c5d22f7SChris Wilson /* This part must be outside protection */
5931c5d22f7SChris Wilson #undef TRACE_INCLUDE_PATH
594a7c54278SPeter Clifton #define TRACE_INCLUDE_PATH .
5951c5d22f7SChris Wilson #include <trace/define_trace.h>
596