xref: /openbmc/linux/drivers/gpu/drm/i915/i915_trace.h (revision 9297ebf2)
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,
371ec9e26dSDaniel Vetter 	    TP_PROTO(struct i915_vma *vma, unsigned flags),
381ec9e26dSDaniel Vetter 	    TP_ARGS(vma, flags),
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)
451ec9e26dSDaniel Vetter 			     __field(unsigned, flags)
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;
531ec9e26dSDaniel Vetter 			   __entry->flags = flags;
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,
581ec9e26dSDaniel Vetter 		      __entry->flags & PIN_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,
1991ec9e26dSDaniel Vetter 	    TP_PROTO(struct drm_device *dev, u32 size, u32 align, unsigned flags),
2001ec9e26dSDaniel Vetter 	    TP_ARGS(dev, size, align, flags),
2011c5d22f7SChris Wilson 
2021c5d22f7SChris Wilson 	    TP_STRUCT__entry(
2034f49be54SChris Wilson 			     __field(u32, dev)
204db53a302SChris Wilson 			     __field(u32, size)
205db53a302SChris Wilson 			     __field(u32, align)
2061ec9e26dSDaniel Vetter 			     __field(unsigned, flags)
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;
2131ec9e26dSDaniel Vetter 			   __entry->flags = flags;
2141c5d22f7SChris Wilson 			  ),
2151c5d22f7SChris Wilson 
216db53a302SChris Wilson 	    TP_printk("dev=%d, size=%d, align=%d %s",
217db53a302SChris Wilson 		      __entry->dev, __entry->size, __entry->align,
2181ec9e26dSDaniel Vetter 		      __entry->flags & PIN_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(
2419297ebf2SSteven Rostedt 			     __field(u32, dev)
242bcccff84SBen Widawsky 			     __field(struct i915_address_space *, vm)
243bcccff84SBen Widawsky 			    ),
244bcccff84SBen Widawsky 
245bcccff84SBen Widawsky 	    TP_fast_assign(
2469297ebf2SSteven Rostedt 			   __entry->dev = vm->dev->primary->index;
247bcccff84SBen Widawsky 			   __entry->vm = vm;
248bcccff84SBen Widawsky 			  ),
249bcccff84SBen Widawsky 
2509297ebf2SSteven Rostedt 	    TP_printk("dev=%d, vm=%p", __entry->dev, __entry->vm)
251bcccff84SBen Widawsky );
252bcccff84SBen Widawsky 
253b52b89daSChris Wilson TRACE_EVENT(i915_gem_ring_sync_to,
254b52b89daSChris Wilson 	    TP_PROTO(struct intel_ring_buffer *from,
255b52b89daSChris Wilson 		     struct intel_ring_buffer *to,
256b52b89daSChris Wilson 		     u32 seqno),
257b52b89daSChris Wilson 	    TP_ARGS(from, to, seqno),
258b52b89daSChris Wilson 
259b52b89daSChris Wilson 	    TP_STRUCT__entry(
260b52b89daSChris Wilson 			     __field(u32, dev)
261b52b89daSChris Wilson 			     __field(u32, sync_from)
262b52b89daSChris Wilson 			     __field(u32, sync_to)
263b52b89daSChris Wilson 			     __field(u32, seqno)
264b52b89daSChris Wilson 			     ),
265b52b89daSChris Wilson 
266b52b89daSChris Wilson 	    TP_fast_assign(
267b52b89daSChris Wilson 			   __entry->dev = from->dev->primary->index;
268b52b89daSChris Wilson 			   __entry->sync_from = from->id;
269b52b89daSChris Wilson 			   __entry->sync_to = to->id;
270b52b89daSChris Wilson 			   __entry->seqno = seqno;
271b52b89daSChris Wilson 			   ),
272b52b89daSChris Wilson 
273b52b89daSChris Wilson 	    TP_printk("dev=%u, sync-from=%u, sync-to=%u, seqno=%u",
274b52b89daSChris Wilson 		      __entry->dev,
275b52b89daSChris Wilson 		      __entry->sync_from, __entry->sync_to,
276b52b89daSChris Wilson 		      __entry->seqno)
277b52b89daSChris Wilson );
278b52b89daSChris Wilson 
279db53a302SChris Wilson TRACE_EVENT(i915_gem_ring_dispatch,
280d7d4eeddSChris Wilson 	    TP_PROTO(struct intel_ring_buffer *ring, u32 seqno, u32 flags),
281d7d4eeddSChris Wilson 	    TP_ARGS(ring, seqno, flags),
282db53a302SChris Wilson 
283db53a302SChris Wilson 	    TP_STRUCT__entry(
284db53a302SChris Wilson 			     __field(u32, dev)
285db53a302SChris Wilson 			     __field(u32, ring)
286db53a302SChris Wilson 			     __field(u32, seqno)
287d7d4eeddSChris Wilson 			     __field(u32, flags)
288db53a302SChris Wilson 			     ),
289db53a302SChris Wilson 
290db53a302SChris Wilson 	    TP_fast_assign(
291db53a302SChris Wilson 			   __entry->dev = ring->dev->primary->index;
292db53a302SChris Wilson 			   __entry->ring = ring->id;
293db53a302SChris Wilson 			   __entry->seqno = seqno;
294d7d4eeddSChris Wilson 			   __entry->flags = flags;
295db53a302SChris Wilson 			   i915_trace_irq_get(ring, seqno);
296db53a302SChris Wilson 			   ),
297db53a302SChris Wilson 
298d7d4eeddSChris Wilson 	    TP_printk("dev=%u, ring=%u, seqno=%u, flags=%x",
299d7d4eeddSChris Wilson 		      __entry->dev, __entry->ring, __entry->seqno, __entry->flags)
300db53a302SChris Wilson );
301db53a302SChris Wilson 
302db53a302SChris Wilson TRACE_EVENT(i915_gem_ring_flush,
303db53a302SChris Wilson 	    TP_PROTO(struct intel_ring_buffer *ring, u32 invalidate, u32 flush),
304db53a302SChris Wilson 	    TP_ARGS(ring, invalidate, flush),
305db53a302SChris Wilson 
306db53a302SChris Wilson 	    TP_STRUCT__entry(
307db53a302SChris Wilson 			     __field(u32, dev)
308db53a302SChris Wilson 			     __field(u32, ring)
309db53a302SChris Wilson 			     __field(u32, invalidate)
310db53a302SChris Wilson 			     __field(u32, flush)
311db53a302SChris Wilson 			     ),
312db53a302SChris Wilson 
313db53a302SChris Wilson 	    TP_fast_assign(
314db53a302SChris Wilson 			   __entry->dev = ring->dev->primary->index;
315db53a302SChris Wilson 			   __entry->ring = ring->id;
316db53a302SChris Wilson 			   __entry->invalidate = invalidate;
317db53a302SChris Wilson 			   __entry->flush = flush;
318db53a302SChris Wilson 			   ),
319db53a302SChris Wilson 
320db53a302SChris Wilson 	    TP_printk("dev=%u, ring=%x, invalidate=%04x, flush=%04x",
321db53a302SChris Wilson 		      __entry->dev, __entry->ring,
322db53a302SChris Wilson 		      __entry->invalidate, __entry->flush)
3231c5d22f7SChris Wilson );
3241c5d22f7SChris Wilson 
325903cf20cSLi Zefan DECLARE_EVENT_CLASS(i915_gem_request,
326db53a302SChris Wilson 	    TP_PROTO(struct intel_ring_buffer *ring, u32 seqno),
327db53a302SChris Wilson 	    TP_ARGS(ring, seqno),
3281c5d22f7SChris Wilson 
3291c5d22f7SChris Wilson 	    TP_STRUCT__entry(
3304f49be54SChris Wilson 			     __field(u32, dev)
331db53a302SChris Wilson 			     __field(u32, ring)
3321c5d22f7SChris Wilson 			     __field(u32, seqno)
3331c5d22f7SChris Wilson 			     ),
3341c5d22f7SChris Wilson 
3351c5d22f7SChris Wilson 	    TP_fast_assign(
336db53a302SChris Wilson 			   __entry->dev = ring->dev->primary->index;
337db53a302SChris Wilson 			   __entry->ring = ring->id;
3381c5d22f7SChris Wilson 			   __entry->seqno = seqno;
3391c5d22f7SChris Wilson 			   ),
3401c5d22f7SChris Wilson 
341db53a302SChris Wilson 	    TP_printk("dev=%u, ring=%u, seqno=%u",
342db53a302SChris Wilson 		      __entry->dev, __entry->ring, __entry->seqno)
343db53a302SChris Wilson );
344db53a302SChris Wilson 
345db53a302SChris Wilson DEFINE_EVENT(i915_gem_request, i915_gem_request_add,
346db53a302SChris Wilson 	    TP_PROTO(struct intel_ring_buffer *ring, u32 seqno),
347db53a302SChris Wilson 	    TP_ARGS(ring, seqno)
3481c5d22f7SChris Wilson );
3491c5d22f7SChris Wilson 
350814e9b57SChris Wilson TRACE_EVENT(i915_gem_request_complete,
351814e9b57SChris Wilson 	    TP_PROTO(struct intel_ring_buffer *ring),
352814e9b57SChris Wilson 	    TP_ARGS(ring),
353814e9b57SChris Wilson 
354814e9b57SChris Wilson 	    TP_STRUCT__entry(
355814e9b57SChris Wilson 			     __field(u32, dev)
356814e9b57SChris Wilson 			     __field(u32, ring)
357814e9b57SChris Wilson 			     __field(u32, seqno)
358814e9b57SChris Wilson 			     ),
359814e9b57SChris Wilson 
360814e9b57SChris Wilson 	    TP_fast_assign(
361814e9b57SChris Wilson 			   __entry->dev = ring->dev->primary->index;
362814e9b57SChris Wilson 			   __entry->ring = ring->id;
363814e9b57SChris Wilson 			   __entry->seqno = ring->get_seqno(ring, false);
364814e9b57SChris Wilson 			   ),
365814e9b57SChris Wilson 
366814e9b57SChris Wilson 	    TP_printk("dev=%u, ring=%u, seqno=%u",
367814e9b57SChris Wilson 		      __entry->dev, __entry->ring, __entry->seqno)
3681c5d22f7SChris Wilson );
3691c5d22f7SChris Wilson 
370903cf20cSLi Zefan DEFINE_EVENT(i915_gem_request, i915_gem_request_retire,
371db53a302SChris Wilson 	    TP_PROTO(struct intel_ring_buffer *ring, u32 seqno),
372db53a302SChris Wilson 	    TP_ARGS(ring, seqno)
3731c5d22f7SChris Wilson );
3741c5d22f7SChris Wilson 
375f3fd3768SBen Widawsky TRACE_EVENT(i915_gem_request_wait_begin,
376db53a302SChris Wilson 	    TP_PROTO(struct intel_ring_buffer *ring, u32 seqno),
377f3fd3768SBen Widawsky 	    TP_ARGS(ring, seqno),
378f3fd3768SBen Widawsky 
379f3fd3768SBen Widawsky 	    TP_STRUCT__entry(
380f3fd3768SBen Widawsky 			     __field(u32, dev)
381f3fd3768SBen Widawsky 			     __field(u32, ring)
382f3fd3768SBen Widawsky 			     __field(u32, seqno)
383f3fd3768SBen Widawsky 			     __field(bool, blocking)
384f3fd3768SBen Widawsky 			     ),
385f3fd3768SBen Widawsky 
386f3fd3768SBen Widawsky 	    /* NB: the blocking information is racy since mutex_is_locked
387f3fd3768SBen Widawsky 	     * doesn't check that the current thread holds the lock. The only
388f3fd3768SBen Widawsky 	     * other option would be to pass the boolean information of whether
389f3fd3768SBen Widawsky 	     * or not the class was blocking down through the stack which is
390f3fd3768SBen Widawsky 	     * less desirable.
391f3fd3768SBen Widawsky 	     */
392f3fd3768SBen Widawsky 	    TP_fast_assign(
393f3fd3768SBen Widawsky 			   __entry->dev = ring->dev->primary->index;
394f3fd3768SBen Widawsky 			   __entry->ring = ring->id;
395f3fd3768SBen Widawsky 			   __entry->seqno = seqno;
396f3fd3768SBen Widawsky 			   __entry->blocking = mutex_is_locked(&ring->dev->struct_mutex);
397f3fd3768SBen Widawsky 			   ),
398f3fd3768SBen Widawsky 
399f3fd3768SBen Widawsky 	    TP_printk("dev=%u, ring=%u, seqno=%u, blocking=%s",
400f3fd3768SBen Widawsky 		      __entry->dev, __entry->ring, __entry->seqno,
401f3fd3768SBen Widawsky 		      __entry->blocking ?  "yes (NB)" : "no")
4021c5d22f7SChris Wilson );
4031c5d22f7SChris Wilson 
404903cf20cSLi Zefan DEFINE_EVENT(i915_gem_request, i915_gem_request_wait_end,
405db53a302SChris Wilson 	    TP_PROTO(struct intel_ring_buffer *ring, u32 seqno),
406db53a302SChris Wilson 	    TP_ARGS(ring, seqno)
407903cf20cSLi Zefan );
408903cf20cSLi Zefan 
409903cf20cSLi Zefan DECLARE_EVENT_CLASS(i915_ring,
410db53a302SChris Wilson 	    TP_PROTO(struct intel_ring_buffer *ring),
411db53a302SChris Wilson 	    TP_ARGS(ring),
4121c5d22f7SChris Wilson 
4131c5d22f7SChris Wilson 	    TP_STRUCT__entry(
4144f49be54SChris Wilson 			     __field(u32, dev)
415db53a302SChris Wilson 			     __field(u32, ring)
4161c5d22f7SChris Wilson 			     ),
4171c5d22f7SChris Wilson 
4181c5d22f7SChris Wilson 	    TP_fast_assign(
419db53a302SChris Wilson 			   __entry->dev = ring->dev->primary->index;
420db53a302SChris Wilson 			   __entry->ring = ring->id;
4211c5d22f7SChris Wilson 			   ),
4221c5d22f7SChris Wilson 
423db53a302SChris Wilson 	    TP_printk("dev=%u, ring=%u", __entry->dev, __entry->ring)
4241c5d22f7SChris Wilson );
4251c5d22f7SChris Wilson 
426903cf20cSLi Zefan DEFINE_EVENT(i915_ring, i915_ring_wait_begin,
427db53a302SChris Wilson 	    TP_PROTO(struct intel_ring_buffer *ring),
428db53a302SChris Wilson 	    TP_ARGS(ring)
429903cf20cSLi Zefan );
4301c5d22f7SChris Wilson 
431903cf20cSLi Zefan DEFINE_EVENT(i915_ring, i915_ring_wait_end,
432db53a302SChris Wilson 	    TP_PROTO(struct intel_ring_buffer *ring),
433db53a302SChris Wilson 	    TP_ARGS(ring)
4341c5d22f7SChris Wilson );
4351c5d22f7SChris Wilson 
436e5510facSJesse Barnes TRACE_EVENT(i915_flip_request,
43705394f39SChris Wilson 	    TP_PROTO(int plane, struct drm_i915_gem_object *obj),
438e5510facSJesse Barnes 
439e5510facSJesse Barnes 	    TP_ARGS(plane, obj),
440e5510facSJesse Barnes 
441e5510facSJesse Barnes 	    TP_STRUCT__entry(
442e5510facSJesse Barnes 		    __field(int, plane)
44305394f39SChris Wilson 		    __field(struct drm_i915_gem_object *, obj)
444e5510facSJesse Barnes 		    ),
445e5510facSJesse Barnes 
446e5510facSJesse Barnes 	    TP_fast_assign(
447e5510facSJesse Barnes 		    __entry->plane = plane;
448e5510facSJesse Barnes 		    __entry->obj = obj;
449e5510facSJesse Barnes 		    ),
450e5510facSJesse Barnes 
451e5510facSJesse Barnes 	    TP_printk("plane=%d, obj=%p", __entry->plane, __entry->obj)
452e5510facSJesse Barnes );
453e5510facSJesse Barnes 
454e5510facSJesse Barnes TRACE_EVENT(i915_flip_complete,
45505394f39SChris Wilson 	    TP_PROTO(int plane, struct drm_i915_gem_object *obj),
456e5510facSJesse Barnes 
457e5510facSJesse Barnes 	    TP_ARGS(plane, obj),
458e5510facSJesse Barnes 
459e5510facSJesse Barnes 	    TP_STRUCT__entry(
460e5510facSJesse Barnes 		    __field(int, plane)
46105394f39SChris Wilson 		    __field(struct drm_i915_gem_object *, obj)
462e5510facSJesse Barnes 		    ),
463e5510facSJesse Barnes 
464e5510facSJesse Barnes 	    TP_fast_assign(
465e5510facSJesse Barnes 		    __entry->plane = plane;
466e5510facSJesse Barnes 		    __entry->obj = obj;
467e5510facSJesse Barnes 		    ),
468e5510facSJesse Barnes 
469e5510facSJesse Barnes 	    TP_printk("plane=%d, obj=%p", __entry->plane, __entry->obj)
470e5510facSJesse Barnes );
471e5510facSJesse Barnes 
472ed71f1b4SChris Wilson TRACE_EVENT_CONDITION(i915_reg_rw,
473ed71f1b4SChris Wilson 	TP_PROTO(bool write, u32 reg, u64 val, int len, bool trace),
474ba4f01a3SYuanhan Liu 
475ed71f1b4SChris Wilson 	TP_ARGS(write, reg, val, len, trace),
476ed71f1b4SChris Wilson 
477ed71f1b4SChris Wilson 	TP_CONDITION(trace),
478ba4f01a3SYuanhan Liu 
479ba4f01a3SYuanhan Liu 	TP_STRUCT__entry(
480db53a302SChris Wilson 		__field(u64, val)
481db53a302SChris Wilson 		__field(u32, reg)
482db53a302SChris Wilson 		__field(u16, write)
483db53a302SChris Wilson 		__field(u16, len)
484ba4f01a3SYuanhan Liu 		),
485ba4f01a3SYuanhan Liu 
486ba4f01a3SYuanhan Liu 	TP_fast_assign(
487db53a302SChris Wilson 		__entry->val = (u64)val;
488ba4f01a3SYuanhan Liu 		__entry->reg = reg;
489db53a302SChris Wilson 		__entry->write = write;
490ba4f01a3SYuanhan Liu 		__entry->len = len;
491ba4f01a3SYuanhan Liu 		),
492ba4f01a3SYuanhan Liu 
493db53a302SChris Wilson 	TP_printk("%s reg=0x%x, len=%d, val=(0x%x, 0x%x)",
494db53a302SChris Wilson 		__entry->write ? "write" : "read",
495db53a302SChris Wilson 		__entry->reg, __entry->len,
496db53a302SChris Wilson 		(u32)(__entry->val & 0xffffffff),
497db53a302SChris Wilson 		(u32)(__entry->val >> 32))
498ba4f01a3SYuanhan Liu );
499ba4f01a3SYuanhan Liu 
500be2cde9aSDaniel Vetter TRACE_EVENT(intel_gpu_freq_change,
501be2cde9aSDaniel Vetter 	    TP_PROTO(u32 freq),
502be2cde9aSDaniel Vetter 	    TP_ARGS(freq),
503be2cde9aSDaniel Vetter 
504be2cde9aSDaniel Vetter 	    TP_STRUCT__entry(
505be2cde9aSDaniel Vetter 			     __field(u32, freq)
506be2cde9aSDaniel Vetter 			     ),
507be2cde9aSDaniel Vetter 
508be2cde9aSDaniel Vetter 	    TP_fast_assign(
509be2cde9aSDaniel Vetter 			   __entry->freq = freq;
510be2cde9aSDaniel Vetter 			   ),
511be2cde9aSDaniel Vetter 
512be2cde9aSDaniel Vetter 	    TP_printk("new_freq=%u", __entry->freq)
513be2cde9aSDaniel Vetter );
514be2cde9aSDaniel Vetter 
5151c5d22f7SChris Wilson #endif /* _I915_TRACE_H_ */
5161c5d22f7SChris Wilson 
5171c5d22f7SChris Wilson /* This part must be outside protection */
5181c5d22f7SChris Wilson #undef TRACE_INCLUDE_PATH
519a7c54278SPeter Clifton #define TRACE_INCLUDE_PATH .
5201c5d22f7SChris Wilson #include <trace/define_trace.h>
521