xref: /openbmc/linux/drivers/gpu/drm/i915/i915_trace.h (revision 814e9b57)
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"
10db53a302SChris Wilson #include "intel_ringbuffer.h"
111c5d22f7SChris Wilson 
121c5d22f7SChris Wilson #undef TRACE_SYSTEM
131c5d22f7SChris Wilson #define TRACE_SYSTEM i915
141c5d22f7SChris Wilson #define TRACE_SYSTEM_STRING __stringify(TRACE_SYSTEM)
151c5d22f7SChris Wilson #define TRACE_INCLUDE_FILE i915_trace
161c5d22f7SChris Wilson 
171c5d22f7SChris Wilson /* object tracking */
181c5d22f7SChris Wilson 
191c5d22f7SChris Wilson TRACE_EVENT(i915_gem_object_create,
2005394f39SChris Wilson 	    TP_PROTO(struct drm_i915_gem_object *obj),
211c5d22f7SChris Wilson 	    TP_ARGS(obj),
221c5d22f7SChris Wilson 
231c5d22f7SChris Wilson 	    TP_STRUCT__entry(
2405394f39SChris Wilson 			     __field(struct drm_i915_gem_object *, obj)
251c5d22f7SChris Wilson 			     __field(u32, size)
261c5d22f7SChris Wilson 			     ),
271c5d22f7SChris Wilson 
281c5d22f7SChris Wilson 	    TP_fast_assign(
291c5d22f7SChris Wilson 			   __entry->obj = obj;
3005394f39SChris Wilson 			   __entry->size = obj->base.size;
311c5d22f7SChris Wilson 			   ),
321c5d22f7SChris Wilson 
331c5d22f7SChris Wilson 	    TP_printk("obj=%p, size=%u", __entry->obj, __entry->size)
341c5d22f7SChris Wilson );
351c5d22f7SChris Wilson 
3607fe0b12SBen Widawsky TRACE_EVENT(i915_vma_bind,
3707fe0b12SBen Widawsky 	    TP_PROTO(struct i915_vma *vma, bool mappable),
3807fe0b12SBen Widawsky 	    TP_ARGS(vma, mappable),
391c5d22f7SChris Wilson 
401c5d22f7SChris Wilson 	    TP_STRUCT__entry(
4105394f39SChris Wilson 			     __field(struct drm_i915_gem_object *, obj)
4207fe0b12SBen Widawsky 			     __field(struct i915_address_space *, vm)
43db53a302SChris Wilson 			     __field(u32, offset)
44db53a302SChris Wilson 			     __field(u32, size)
45ec57d260SDaniel Vetter 			     __field(bool, mappable)
461c5d22f7SChris Wilson 			     ),
471c5d22f7SChris Wilson 
481c5d22f7SChris Wilson 	    TP_fast_assign(
4907fe0b12SBen Widawsky 			   __entry->obj = vma->obj;
5007fe0b12SBen Widawsky 			   __entry->vm = vma->vm;
5107fe0b12SBen Widawsky 			   __entry->offset = vma->node.start;
5207fe0b12SBen Widawsky 			   __entry->size = vma->node.size;
53ec57d260SDaniel Vetter 			   __entry->mappable = mappable;
541c5d22f7SChris Wilson 			   ),
551c5d22f7SChris Wilson 
5607fe0b12SBen Widawsky 	    TP_printk("obj=%p, offset=%08x size=%x%s vm=%p",
57db53a302SChris Wilson 		      __entry->obj, __entry->offset, __entry->size,
5807fe0b12SBen Widawsky 		      __entry->mappable ? ", mappable" : "",
5907fe0b12SBen Widawsky 		      __entry->vm)
601c5d22f7SChris Wilson );
611c5d22f7SChris Wilson 
6207fe0b12SBen Widawsky TRACE_EVENT(i915_vma_unbind,
6307fe0b12SBen Widawsky 	    TP_PROTO(struct i915_vma *vma),
6407fe0b12SBen Widawsky 	    TP_ARGS(vma),
65db53a302SChris Wilson 
66db53a302SChris Wilson 	    TP_STRUCT__entry(
67db53a302SChris Wilson 			     __field(struct drm_i915_gem_object *, obj)
6807fe0b12SBen Widawsky 			     __field(struct i915_address_space *, vm)
69db53a302SChris Wilson 			     __field(u32, offset)
70db53a302SChris Wilson 			     __field(u32, size)
71db53a302SChris Wilson 			     ),
72db53a302SChris Wilson 
73db53a302SChris Wilson 	    TP_fast_assign(
7407fe0b12SBen Widawsky 			   __entry->obj = vma->obj;
7507fe0b12SBen Widawsky 			   __entry->vm = vma->vm;
7607fe0b12SBen Widawsky 			   __entry->offset = vma->node.start;
7707fe0b12SBen Widawsky 			   __entry->size = vma->node.size;
78db53a302SChris Wilson 			   ),
79db53a302SChris Wilson 
8007fe0b12SBen Widawsky 	    TP_printk("obj=%p, offset=%08x size=%x vm=%p",
8107fe0b12SBen Widawsky 		      __entry->obj, __entry->offset, __entry->size, __entry->vm)
82db53a302SChris Wilson );
83db53a302SChris Wilson 
841c5d22f7SChris Wilson TRACE_EVENT(i915_gem_object_change_domain,
85db53a302SChris Wilson 	    TP_PROTO(struct drm_i915_gem_object *obj, u32 old_read, u32 old_write),
86db53a302SChris Wilson 	    TP_ARGS(obj, old_read, old_write),
871c5d22f7SChris Wilson 
881c5d22f7SChris Wilson 	    TP_STRUCT__entry(
8905394f39SChris Wilson 			     __field(struct drm_i915_gem_object *, obj)
901c5d22f7SChris Wilson 			     __field(u32, read_domains)
911c5d22f7SChris Wilson 			     __field(u32, write_domain)
921c5d22f7SChris Wilson 			     ),
931c5d22f7SChris Wilson 
941c5d22f7SChris Wilson 	    TP_fast_assign(
951c5d22f7SChris Wilson 			   __entry->obj = obj;
96db53a302SChris Wilson 			   __entry->read_domains = obj->base.read_domains | (old_read << 16);
97db53a302SChris Wilson 			   __entry->write_domain = obj->base.write_domain | (old_write << 16);
981c5d22f7SChris Wilson 			   ),
991c5d22f7SChris Wilson 
100db53a302SChris Wilson 	    TP_printk("obj=%p, read=%02x=>%02x, write=%02x=>%02x",
1011c5d22f7SChris Wilson 		      __entry->obj,
102db53a302SChris Wilson 		      __entry->read_domains >> 16,
103db53a302SChris Wilson 		      __entry->read_domains & 0xffff,
104db53a302SChris Wilson 		      __entry->write_domain >> 16,
105db53a302SChris Wilson 		      __entry->write_domain & 0xffff)
106db53a302SChris Wilson );
107db53a302SChris Wilson 
108db53a302SChris Wilson TRACE_EVENT(i915_gem_object_pwrite,
109db53a302SChris Wilson 	    TP_PROTO(struct drm_i915_gem_object *obj, u32 offset, u32 len),
110db53a302SChris Wilson 	    TP_ARGS(obj, offset, len),
111db53a302SChris Wilson 
112db53a302SChris Wilson 	    TP_STRUCT__entry(
113db53a302SChris Wilson 			     __field(struct drm_i915_gem_object *, obj)
114db53a302SChris Wilson 			     __field(u32, offset)
115db53a302SChris Wilson 			     __field(u32, len)
116db53a302SChris Wilson 			     ),
117db53a302SChris Wilson 
118db53a302SChris Wilson 	    TP_fast_assign(
119db53a302SChris Wilson 			   __entry->obj = obj;
120db53a302SChris Wilson 			   __entry->offset = offset;
121db53a302SChris Wilson 			   __entry->len = len;
122db53a302SChris Wilson 			   ),
123db53a302SChris Wilson 
124db53a302SChris Wilson 	    TP_printk("obj=%p, offset=%u, len=%u",
125db53a302SChris Wilson 		      __entry->obj, __entry->offset, __entry->len)
126db53a302SChris Wilson );
127db53a302SChris Wilson 
128db53a302SChris Wilson TRACE_EVENT(i915_gem_object_pread,
129db53a302SChris Wilson 	    TP_PROTO(struct drm_i915_gem_object *obj, u32 offset, u32 len),
130db53a302SChris Wilson 	    TP_ARGS(obj, offset, len),
131db53a302SChris Wilson 
132db53a302SChris Wilson 	    TP_STRUCT__entry(
133db53a302SChris Wilson 			     __field(struct drm_i915_gem_object *, obj)
134db53a302SChris Wilson 			     __field(u32, offset)
135db53a302SChris Wilson 			     __field(u32, len)
136db53a302SChris Wilson 			     ),
137db53a302SChris Wilson 
138db53a302SChris Wilson 	    TP_fast_assign(
139db53a302SChris Wilson 			   __entry->obj = obj;
140db53a302SChris Wilson 			   __entry->offset = offset;
141db53a302SChris Wilson 			   __entry->len = len;
142db53a302SChris Wilson 			   ),
143db53a302SChris Wilson 
144db53a302SChris Wilson 	    TP_printk("obj=%p, offset=%u, len=%u",
145db53a302SChris Wilson 		      __entry->obj, __entry->offset, __entry->len)
146db53a302SChris Wilson );
147db53a302SChris Wilson 
148db53a302SChris Wilson TRACE_EVENT(i915_gem_object_fault,
149db53a302SChris Wilson 	    TP_PROTO(struct drm_i915_gem_object *obj, u32 index, bool gtt, bool write),
150db53a302SChris Wilson 	    TP_ARGS(obj, index, gtt, write),
151db53a302SChris Wilson 
152db53a302SChris Wilson 	    TP_STRUCT__entry(
153db53a302SChris Wilson 			     __field(struct drm_i915_gem_object *, obj)
154db53a302SChris Wilson 			     __field(u32, index)
155db53a302SChris Wilson 			     __field(bool, gtt)
156db53a302SChris Wilson 			     __field(bool, write)
157db53a302SChris Wilson 			     ),
158db53a302SChris Wilson 
159db53a302SChris Wilson 	    TP_fast_assign(
160db53a302SChris Wilson 			   __entry->obj = obj;
161db53a302SChris Wilson 			   __entry->index = index;
162db53a302SChris Wilson 			   __entry->gtt = gtt;
163db53a302SChris Wilson 			   __entry->write = write;
164db53a302SChris Wilson 			   ),
165db53a302SChris Wilson 
166db53a302SChris Wilson 	    TP_printk("obj=%p, %s index=%u %s",
167db53a302SChris Wilson 		      __entry->obj,
168db53a302SChris Wilson 		      __entry->gtt ? "GTT" : "CPU",
169db53a302SChris Wilson 		      __entry->index,
170db53a302SChris Wilson 		      __entry->write ? ", writable" : "")
1711c5d22f7SChris Wilson );
1721c5d22f7SChris Wilson 
173903cf20cSLi Zefan DECLARE_EVENT_CLASS(i915_gem_object,
17405394f39SChris Wilson 	    TP_PROTO(struct drm_i915_gem_object *obj),
1751c5d22f7SChris Wilson 	    TP_ARGS(obj),
1761c5d22f7SChris Wilson 
1771c5d22f7SChris Wilson 	    TP_STRUCT__entry(
17805394f39SChris Wilson 			     __field(struct drm_i915_gem_object *, obj)
1791c5d22f7SChris Wilson 			     ),
1801c5d22f7SChris Wilson 
1811c5d22f7SChris Wilson 	    TP_fast_assign(
1821c5d22f7SChris Wilson 			   __entry->obj = obj;
1831c5d22f7SChris Wilson 			   ),
1841c5d22f7SChris Wilson 
1851c5d22f7SChris Wilson 	    TP_printk("obj=%p", __entry->obj)
1861c5d22f7SChris Wilson );
1871c5d22f7SChris Wilson 
188f41275e8SLi Zefan DEFINE_EVENT(i915_gem_object, i915_gem_object_clflush,
18905394f39SChris Wilson 	     TP_PROTO(struct drm_i915_gem_object *obj),
190903cf20cSLi Zefan 	     TP_ARGS(obj)
191903cf20cSLi Zefan );
1921c5d22f7SChris Wilson 
193903cf20cSLi Zefan DEFINE_EVENT(i915_gem_object, i915_gem_object_destroy,
19405394f39SChris Wilson 	    TP_PROTO(struct drm_i915_gem_object *obj),
195903cf20cSLi Zefan 	    TP_ARGS(obj)
1961c5d22f7SChris Wilson );
1971c5d22f7SChris Wilson 
198db53a302SChris Wilson TRACE_EVENT(i915_gem_evict,
199db53a302SChris Wilson 	    TP_PROTO(struct drm_device *dev, u32 size, u32 align, bool mappable),
200db53a302SChris Wilson 	    TP_ARGS(dev, size, align, mappable),
2011c5d22f7SChris Wilson 
2021c5d22f7SChris Wilson 	    TP_STRUCT__entry(
2034f49be54SChris Wilson 			     __field(u32, dev)
204db53a302SChris Wilson 			     __field(u32, size)
205db53a302SChris Wilson 			     __field(u32, align)
206db53a302SChris Wilson 			     __field(bool, mappable)
2071c5d22f7SChris Wilson 			    ),
2081c5d22f7SChris Wilson 
2091c5d22f7SChris Wilson 	    TP_fast_assign(
2104f49be54SChris Wilson 			   __entry->dev = dev->primary->index;
211db53a302SChris Wilson 			   __entry->size = size;
212db53a302SChris Wilson 			   __entry->align = align;
213db53a302SChris Wilson 			   __entry->mappable = mappable;
2141c5d22f7SChris Wilson 			  ),
2151c5d22f7SChris Wilson 
216db53a302SChris Wilson 	    TP_printk("dev=%d, size=%d, align=%d %s",
217db53a302SChris Wilson 		      __entry->dev, __entry->size, __entry->align,
218db53a302SChris Wilson 		      __entry->mappable ? ", mappable" : "")
2191c5d22f7SChris Wilson );
2201c5d22f7SChris Wilson 
221db53a302SChris Wilson TRACE_EVENT(i915_gem_evict_everything,
2226c085a72SChris Wilson 	    TP_PROTO(struct drm_device *dev),
2236c085a72SChris Wilson 	    TP_ARGS(dev),
2241c5d22f7SChris Wilson 
2251c5d22f7SChris Wilson 	    TP_STRUCT__entry(
2264f49be54SChris Wilson 			     __field(u32, dev)
2271c5d22f7SChris Wilson 			    ),
2281c5d22f7SChris Wilson 
2291c5d22f7SChris Wilson 	    TP_fast_assign(
2304f49be54SChris Wilson 			   __entry->dev = dev->primary->index;
2311c5d22f7SChris Wilson 			  ),
2321c5d22f7SChris Wilson 
2336c085a72SChris Wilson 	    TP_printk("dev=%d", __entry->dev)
234db53a302SChris Wilson );
235db53a302SChris Wilson 
236bcccff84SBen Widawsky TRACE_EVENT(i915_gem_evict_vm,
237bcccff84SBen Widawsky 	    TP_PROTO(struct i915_address_space *vm),
238bcccff84SBen Widawsky 	    TP_ARGS(vm),
239bcccff84SBen Widawsky 
240bcccff84SBen Widawsky 	    TP_STRUCT__entry(
241bcccff84SBen Widawsky 			     __field(struct i915_address_space *, vm)
242bcccff84SBen Widawsky 			    ),
243bcccff84SBen Widawsky 
244bcccff84SBen Widawsky 	    TP_fast_assign(
245bcccff84SBen Widawsky 			   __entry->vm = vm;
246bcccff84SBen Widawsky 			  ),
247bcccff84SBen Widawsky 
248bcccff84SBen Widawsky 	    TP_printk("dev=%d, vm=%p", __entry->vm->dev->primary->index, __entry->vm)
249bcccff84SBen Widawsky );
250bcccff84SBen Widawsky 
251db53a302SChris Wilson TRACE_EVENT(i915_gem_ring_dispatch,
252d7d4eeddSChris Wilson 	    TP_PROTO(struct intel_ring_buffer *ring, u32 seqno, u32 flags),
253d7d4eeddSChris Wilson 	    TP_ARGS(ring, seqno, flags),
254db53a302SChris Wilson 
255db53a302SChris Wilson 	    TP_STRUCT__entry(
256db53a302SChris Wilson 			     __field(u32, dev)
257db53a302SChris Wilson 			     __field(u32, ring)
258db53a302SChris Wilson 			     __field(u32, seqno)
259d7d4eeddSChris Wilson 			     __field(u32, flags)
260db53a302SChris Wilson 			     ),
261db53a302SChris Wilson 
262db53a302SChris Wilson 	    TP_fast_assign(
263db53a302SChris Wilson 			   __entry->dev = ring->dev->primary->index;
264db53a302SChris Wilson 			   __entry->ring = ring->id;
265db53a302SChris Wilson 			   __entry->seqno = seqno;
266d7d4eeddSChris Wilson 			   __entry->flags = flags;
267db53a302SChris Wilson 			   i915_trace_irq_get(ring, seqno);
268db53a302SChris Wilson 			   ),
269db53a302SChris Wilson 
270d7d4eeddSChris Wilson 	    TP_printk("dev=%u, ring=%u, seqno=%u, flags=%x",
271d7d4eeddSChris Wilson 		      __entry->dev, __entry->ring, __entry->seqno, __entry->flags)
272db53a302SChris Wilson );
273db53a302SChris Wilson 
274db53a302SChris Wilson TRACE_EVENT(i915_gem_ring_flush,
275db53a302SChris Wilson 	    TP_PROTO(struct intel_ring_buffer *ring, u32 invalidate, u32 flush),
276db53a302SChris Wilson 	    TP_ARGS(ring, invalidate, flush),
277db53a302SChris Wilson 
278db53a302SChris Wilson 	    TP_STRUCT__entry(
279db53a302SChris Wilson 			     __field(u32, dev)
280db53a302SChris Wilson 			     __field(u32, ring)
281db53a302SChris Wilson 			     __field(u32, invalidate)
282db53a302SChris Wilson 			     __field(u32, flush)
283db53a302SChris Wilson 			     ),
284db53a302SChris Wilson 
285db53a302SChris Wilson 	    TP_fast_assign(
286db53a302SChris Wilson 			   __entry->dev = ring->dev->primary->index;
287db53a302SChris Wilson 			   __entry->ring = ring->id;
288db53a302SChris Wilson 			   __entry->invalidate = invalidate;
289db53a302SChris Wilson 			   __entry->flush = flush;
290db53a302SChris Wilson 			   ),
291db53a302SChris Wilson 
292db53a302SChris Wilson 	    TP_printk("dev=%u, ring=%x, invalidate=%04x, flush=%04x",
293db53a302SChris Wilson 		      __entry->dev, __entry->ring,
294db53a302SChris Wilson 		      __entry->invalidate, __entry->flush)
2951c5d22f7SChris Wilson );
2961c5d22f7SChris Wilson 
297903cf20cSLi Zefan DECLARE_EVENT_CLASS(i915_gem_request,
298db53a302SChris Wilson 	    TP_PROTO(struct intel_ring_buffer *ring, u32 seqno),
299db53a302SChris Wilson 	    TP_ARGS(ring, seqno),
3001c5d22f7SChris Wilson 
3011c5d22f7SChris Wilson 	    TP_STRUCT__entry(
3024f49be54SChris Wilson 			     __field(u32, dev)
303db53a302SChris Wilson 			     __field(u32, ring)
3041c5d22f7SChris Wilson 			     __field(u32, seqno)
3051c5d22f7SChris Wilson 			     ),
3061c5d22f7SChris Wilson 
3071c5d22f7SChris Wilson 	    TP_fast_assign(
308db53a302SChris Wilson 			   __entry->dev = ring->dev->primary->index;
309db53a302SChris Wilson 			   __entry->ring = ring->id;
3101c5d22f7SChris Wilson 			   __entry->seqno = seqno;
3111c5d22f7SChris Wilson 			   ),
3121c5d22f7SChris Wilson 
313db53a302SChris Wilson 	    TP_printk("dev=%u, ring=%u, seqno=%u",
314db53a302SChris Wilson 		      __entry->dev, __entry->ring, __entry->seqno)
315db53a302SChris Wilson );
316db53a302SChris Wilson 
317db53a302SChris Wilson DEFINE_EVENT(i915_gem_request, i915_gem_request_add,
318db53a302SChris Wilson 	    TP_PROTO(struct intel_ring_buffer *ring, u32 seqno),
319db53a302SChris Wilson 	    TP_ARGS(ring, seqno)
3201c5d22f7SChris Wilson );
3211c5d22f7SChris Wilson 
322814e9b57SChris Wilson TRACE_EVENT(i915_gem_request_complete,
323814e9b57SChris Wilson 	    TP_PROTO(struct intel_ring_buffer *ring),
324814e9b57SChris Wilson 	    TP_ARGS(ring),
325814e9b57SChris Wilson 
326814e9b57SChris Wilson 	    TP_STRUCT__entry(
327814e9b57SChris Wilson 			     __field(u32, dev)
328814e9b57SChris Wilson 			     __field(u32, ring)
329814e9b57SChris Wilson 			     __field(u32, seqno)
330814e9b57SChris Wilson 			     ),
331814e9b57SChris Wilson 
332814e9b57SChris Wilson 	    TP_fast_assign(
333814e9b57SChris Wilson 			   __entry->dev = ring->dev->primary->index;
334814e9b57SChris Wilson 			   __entry->ring = ring->id;
335814e9b57SChris Wilson 			   __entry->seqno = ring->get_seqno(ring, false);
336814e9b57SChris Wilson 			   ),
337814e9b57SChris Wilson 
338814e9b57SChris Wilson 	    TP_printk("dev=%u, ring=%u, seqno=%u",
339814e9b57SChris Wilson 		      __entry->dev, __entry->ring, __entry->seqno)
3401c5d22f7SChris Wilson );
3411c5d22f7SChris Wilson 
342903cf20cSLi Zefan DEFINE_EVENT(i915_gem_request, i915_gem_request_retire,
343db53a302SChris Wilson 	    TP_PROTO(struct intel_ring_buffer *ring, u32 seqno),
344db53a302SChris Wilson 	    TP_ARGS(ring, seqno)
3451c5d22f7SChris Wilson );
3461c5d22f7SChris Wilson 
347f3fd3768SBen Widawsky TRACE_EVENT(i915_gem_request_wait_begin,
348db53a302SChris Wilson 	    TP_PROTO(struct intel_ring_buffer *ring, u32 seqno),
349f3fd3768SBen Widawsky 	    TP_ARGS(ring, seqno),
350f3fd3768SBen Widawsky 
351f3fd3768SBen Widawsky 	    TP_STRUCT__entry(
352f3fd3768SBen Widawsky 			     __field(u32, dev)
353f3fd3768SBen Widawsky 			     __field(u32, ring)
354f3fd3768SBen Widawsky 			     __field(u32, seqno)
355f3fd3768SBen Widawsky 			     __field(bool, blocking)
356f3fd3768SBen Widawsky 			     ),
357f3fd3768SBen Widawsky 
358f3fd3768SBen Widawsky 	    /* NB: the blocking information is racy since mutex_is_locked
359f3fd3768SBen Widawsky 	     * doesn't check that the current thread holds the lock. The only
360f3fd3768SBen Widawsky 	     * other option would be to pass the boolean information of whether
361f3fd3768SBen Widawsky 	     * or not the class was blocking down through the stack which is
362f3fd3768SBen Widawsky 	     * less desirable.
363f3fd3768SBen Widawsky 	     */
364f3fd3768SBen Widawsky 	    TP_fast_assign(
365f3fd3768SBen Widawsky 			   __entry->dev = ring->dev->primary->index;
366f3fd3768SBen Widawsky 			   __entry->ring = ring->id;
367f3fd3768SBen Widawsky 			   __entry->seqno = seqno;
368f3fd3768SBen Widawsky 			   __entry->blocking = mutex_is_locked(&ring->dev->struct_mutex);
369f3fd3768SBen Widawsky 			   ),
370f3fd3768SBen Widawsky 
371f3fd3768SBen Widawsky 	    TP_printk("dev=%u, ring=%u, seqno=%u, blocking=%s",
372f3fd3768SBen Widawsky 		      __entry->dev, __entry->ring, __entry->seqno,
373f3fd3768SBen Widawsky 		      __entry->blocking ?  "yes (NB)" : "no")
3741c5d22f7SChris Wilson );
3751c5d22f7SChris Wilson 
376903cf20cSLi Zefan DEFINE_EVENT(i915_gem_request, i915_gem_request_wait_end,
377db53a302SChris Wilson 	    TP_PROTO(struct intel_ring_buffer *ring, u32 seqno),
378db53a302SChris Wilson 	    TP_ARGS(ring, seqno)
379903cf20cSLi Zefan );
380903cf20cSLi Zefan 
381903cf20cSLi Zefan DECLARE_EVENT_CLASS(i915_ring,
382db53a302SChris Wilson 	    TP_PROTO(struct intel_ring_buffer *ring),
383db53a302SChris Wilson 	    TP_ARGS(ring),
3841c5d22f7SChris Wilson 
3851c5d22f7SChris Wilson 	    TP_STRUCT__entry(
3864f49be54SChris Wilson 			     __field(u32, dev)
387db53a302SChris Wilson 			     __field(u32, ring)
3881c5d22f7SChris Wilson 			     ),
3891c5d22f7SChris Wilson 
3901c5d22f7SChris Wilson 	    TP_fast_assign(
391db53a302SChris Wilson 			   __entry->dev = ring->dev->primary->index;
392db53a302SChris Wilson 			   __entry->ring = ring->id;
3931c5d22f7SChris Wilson 			   ),
3941c5d22f7SChris Wilson 
395db53a302SChris Wilson 	    TP_printk("dev=%u, ring=%u", __entry->dev, __entry->ring)
3961c5d22f7SChris Wilson );
3971c5d22f7SChris Wilson 
398903cf20cSLi Zefan DEFINE_EVENT(i915_ring, i915_ring_wait_begin,
399db53a302SChris Wilson 	    TP_PROTO(struct intel_ring_buffer *ring),
400db53a302SChris Wilson 	    TP_ARGS(ring)
401903cf20cSLi Zefan );
4021c5d22f7SChris Wilson 
403903cf20cSLi Zefan DEFINE_EVENT(i915_ring, i915_ring_wait_end,
404db53a302SChris Wilson 	    TP_PROTO(struct intel_ring_buffer *ring),
405db53a302SChris Wilson 	    TP_ARGS(ring)
4061c5d22f7SChris Wilson );
4071c5d22f7SChris Wilson 
408e5510facSJesse Barnes TRACE_EVENT(i915_flip_request,
40905394f39SChris Wilson 	    TP_PROTO(int plane, struct drm_i915_gem_object *obj),
410e5510facSJesse Barnes 
411e5510facSJesse Barnes 	    TP_ARGS(plane, obj),
412e5510facSJesse Barnes 
413e5510facSJesse Barnes 	    TP_STRUCT__entry(
414e5510facSJesse Barnes 		    __field(int, plane)
41505394f39SChris Wilson 		    __field(struct drm_i915_gem_object *, obj)
416e5510facSJesse Barnes 		    ),
417e5510facSJesse Barnes 
418e5510facSJesse Barnes 	    TP_fast_assign(
419e5510facSJesse Barnes 		    __entry->plane = plane;
420e5510facSJesse Barnes 		    __entry->obj = obj;
421e5510facSJesse Barnes 		    ),
422e5510facSJesse Barnes 
423e5510facSJesse Barnes 	    TP_printk("plane=%d, obj=%p", __entry->plane, __entry->obj)
424e5510facSJesse Barnes );
425e5510facSJesse Barnes 
426e5510facSJesse Barnes TRACE_EVENT(i915_flip_complete,
42705394f39SChris Wilson 	    TP_PROTO(int plane, struct drm_i915_gem_object *obj),
428e5510facSJesse Barnes 
429e5510facSJesse Barnes 	    TP_ARGS(plane, obj),
430e5510facSJesse Barnes 
431e5510facSJesse Barnes 	    TP_STRUCT__entry(
432e5510facSJesse Barnes 		    __field(int, plane)
43305394f39SChris Wilson 		    __field(struct drm_i915_gem_object *, obj)
434e5510facSJesse Barnes 		    ),
435e5510facSJesse Barnes 
436e5510facSJesse Barnes 	    TP_fast_assign(
437e5510facSJesse Barnes 		    __entry->plane = plane;
438e5510facSJesse Barnes 		    __entry->obj = obj;
439e5510facSJesse Barnes 		    ),
440e5510facSJesse Barnes 
441e5510facSJesse Barnes 	    TP_printk("plane=%d, obj=%p", __entry->plane, __entry->obj)
442e5510facSJesse Barnes );
443e5510facSJesse Barnes 
444ed71f1b4SChris Wilson TRACE_EVENT_CONDITION(i915_reg_rw,
445ed71f1b4SChris Wilson 	TP_PROTO(bool write, u32 reg, u64 val, int len, bool trace),
446ba4f01a3SYuanhan Liu 
447ed71f1b4SChris Wilson 	TP_ARGS(write, reg, val, len, trace),
448ed71f1b4SChris Wilson 
449ed71f1b4SChris Wilson 	TP_CONDITION(trace),
450ba4f01a3SYuanhan Liu 
451ba4f01a3SYuanhan Liu 	TP_STRUCT__entry(
452db53a302SChris Wilson 		__field(u64, val)
453db53a302SChris Wilson 		__field(u32, reg)
454db53a302SChris Wilson 		__field(u16, write)
455db53a302SChris Wilson 		__field(u16, len)
456ba4f01a3SYuanhan Liu 		),
457ba4f01a3SYuanhan Liu 
458ba4f01a3SYuanhan Liu 	TP_fast_assign(
459db53a302SChris Wilson 		__entry->val = (u64)val;
460ba4f01a3SYuanhan Liu 		__entry->reg = reg;
461db53a302SChris Wilson 		__entry->write = write;
462ba4f01a3SYuanhan Liu 		__entry->len = len;
463ba4f01a3SYuanhan Liu 		),
464ba4f01a3SYuanhan Liu 
465db53a302SChris Wilson 	TP_printk("%s reg=0x%x, len=%d, val=(0x%x, 0x%x)",
466db53a302SChris Wilson 		__entry->write ? "write" : "read",
467db53a302SChris Wilson 		__entry->reg, __entry->len,
468db53a302SChris Wilson 		(u32)(__entry->val & 0xffffffff),
469db53a302SChris Wilson 		(u32)(__entry->val >> 32))
470ba4f01a3SYuanhan Liu );
471ba4f01a3SYuanhan Liu 
472be2cde9aSDaniel Vetter TRACE_EVENT(intel_gpu_freq_change,
473be2cde9aSDaniel Vetter 	    TP_PROTO(u32 freq),
474be2cde9aSDaniel Vetter 	    TP_ARGS(freq),
475be2cde9aSDaniel Vetter 
476be2cde9aSDaniel Vetter 	    TP_STRUCT__entry(
477be2cde9aSDaniel Vetter 			     __field(u32, freq)
478be2cde9aSDaniel Vetter 			     ),
479be2cde9aSDaniel Vetter 
480be2cde9aSDaniel Vetter 	    TP_fast_assign(
481be2cde9aSDaniel Vetter 			   __entry->freq = freq;
482be2cde9aSDaniel Vetter 			   ),
483be2cde9aSDaniel Vetter 
484be2cde9aSDaniel Vetter 	    TP_printk("new_freq=%u", __entry->freq)
485be2cde9aSDaniel Vetter );
486be2cde9aSDaniel Vetter 
4871c5d22f7SChris Wilson #endif /* _I915_TRACE_H_ */
4881c5d22f7SChris Wilson 
4891c5d22f7SChris Wilson /* This part must be outside protection */
4901c5d22f7SChris Wilson #undef TRACE_INCLUDE_PATH
491a7c54278SPeter Clifton #define TRACE_INCLUDE_PATH .
4921c5d22f7SChris Wilson #include <trace/define_trace.h>
493