xref: /openbmc/linux/drivers/gpu/drm/i915/i915_trace.h (revision ed71f1b4)
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 
361c5d22f7SChris Wilson TRACE_EVENT(i915_gem_object_bind,
37db53a302SChris Wilson 	    TP_PROTO(struct drm_i915_gem_object *obj, bool mappable),
38db53a302SChris Wilson 	    TP_ARGS(obj, mappable),
391c5d22f7SChris Wilson 
401c5d22f7SChris Wilson 	    TP_STRUCT__entry(
4105394f39SChris Wilson 			     __field(struct drm_i915_gem_object *, obj)
42db53a302SChris Wilson 			     __field(u32, offset)
43db53a302SChris Wilson 			     __field(u32, size)
44ec57d260SDaniel Vetter 			     __field(bool, mappable)
451c5d22f7SChris Wilson 			     ),
461c5d22f7SChris Wilson 
471c5d22f7SChris Wilson 	    TP_fast_assign(
481c5d22f7SChris Wilson 			   __entry->obj = obj;
49f343c5f6SBen Widawsky 			   __entry->offset = i915_gem_obj_ggtt_offset(obj);
50f343c5f6SBen Widawsky 			   __entry->size = i915_gem_obj_ggtt_size(obj);
51ec57d260SDaniel Vetter 			   __entry->mappable = mappable;
521c5d22f7SChris Wilson 			   ),
531c5d22f7SChris Wilson 
54db53a302SChris Wilson 	    TP_printk("obj=%p, offset=%08x size=%x%s",
55db53a302SChris Wilson 		      __entry->obj, __entry->offset, __entry->size,
56ec57d260SDaniel Vetter 		      __entry->mappable ? ", mappable" : "")
571c5d22f7SChris Wilson );
581c5d22f7SChris Wilson 
59db53a302SChris Wilson TRACE_EVENT(i915_gem_object_unbind,
60db53a302SChris Wilson 	    TP_PROTO(struct drm_i915_gem_object *obj),
61db53a302SChris Wilson 	    TP_ARGS(obj),
62db53a302SChris Wilson 
63db53a302SChris Wilson 	    TP_STRUCT__entry(
64db53a302SChris Wilson 			     __field(struct drm_i915_gem_object *, obj)
65db53a302SChris Wilson 			     __field(u32, offset)
66db53a302SChris Wilson 			     __field(u32, size)
67db53a302SChris Wilson 			     ),
68db53a302SChris Wilson 
69db53a302SChris Wilson 	    TP_fast_assign(
70db53a302SChris Wilson 			   __entry->obj = obj;
71f343c5f6SBen Widawsky 			   __entry->offset = i915_gem_obj_ggtt_offset(obj);
72f343c5f6SBen Widawsky 			   __entry->size = i915_gem_obj_ggtt_size(obj);
73db53a302SChris Wilson 			   ),
74db53a302SChris Wilson 
75db53a302SChris Wilson 	    TP_printk("obj=%p, offset=%08x size=%x",
76db53a302SChris Wilson 		      __entry->obj, __entry->offset, __entry->size)
77db53a302SChris Wilson );
78db53a302SChris Wilson 
791c5d22f7SChris Wilson TRACE_EVENT(i915_gem_object_change_domain,
80db53a302SChris Wilson 	    TP_PROTO(struct drm_i915_gem_object *obj, u32 old_read, u32 old_write),
81db53a302SChris Wilson 	    TP_ARGS(obj, old_read, old_write),
821c5d22f7SChris Wilson 
831c5d22f7SChris Wilson 	    TP_STRUCT__entry(
8405394f39SChris Wilson 			     __field(struct drm_i915_gem_object *, obj)
851c5d22f7SChris Wilson 			     __field(u32, read_domains)
861c5d22f7SChris Wilson 			     __field(u32, write_domain)
871c5d22f7SChris Wilson 			     ),
881c5d22f7SChris Wilson 
891c5d22f7SChris Wilson 	    TP_fast_assign(
901c5d22f7SChris Wilson 			   __entry->obj = obj;
91db53a302SChris Wilson 			   __entry->read_domains = obj->base.read_domains | (old_read << 16);
92db53a302SChris Wilson 			   __entry->write_domain = obj->base.write_domain | (old_write << 16);
931c5d22f7SChris Wilson 			   ),
941c5d22f7SChris Wilson 
95db53a302SChris Wilson 	    TP_printk("obj=%p, read=%02x=>%02x, write=%02x=>%02x",
961c5d22f7SChris Wilson 		      __entry->obj,
97db53a302SChris Wilson 		      __entry->read_domains >> 16,
98db53a302SChris Wilson 		      __entry->read_domains & 0xffff,
99db53a302SChris Wilson 		      __entry->write_domain >> 16,
100db53a302SChris Wilson 		      __entry->write_domain & 0xffff)
101db53a302SChris Wilson );
102db53a302SChris Wilson 
103db53a302SChris Wilson TRACE_EVENT(i915_gem_object_pwrite,
104db53a302SChris Wilson 	    TP_PROTO(struct drm_i915_gem_object *obj, u32 offset, u32 len),
105db53a302SChris Wilson 	    TP_ARGS(obj, offset, len),
106db53a302SChris Wilson 
107db53a302SChris Wilson 	    TP_STRUCT__entry(
108db53a302SChris Wilson 			     __field(struct drm_i915_gem_object *, obj)
109db53a302SChris Wilson 			     __field(u32, offset)
110db53a302SChris Wilson 			     __field(u32, len)
111db53a302SChris Wilson 			     ),
112db53a302SChris Wilson 
113db53a302SChris Wilson 	    TP_fast_assign(
114db53a302SChris Wilson 			   __entry->obj = obj;
115db53a302SChris Wilson 			   __entry->offset = offset;
116db53a302SChris Wilson 			   __entry->len = len;
117db53a302SChris Wilson 			   ),
118db53a302SChris Wilson 
119db53a302SChris Wilson 	    TP_printk("obj=%p, offset=%u, len=%u",
120db53a302SChris Wilson 		      __entry->obj, __entry->offset, __entry->len)
121db53a302SChris Wilson );
122db53a302SChris Wilson 
123db53a302SChris Wilson TRACE_EVENT(i915_gem_object_pread,
124db53a302SChris Wilson 	    TP_PROTO(struct drm_i915_gem_object *obj, u32 offset, u32 len),
125db53a302SChris Wilson 	    TP_ARGS(obj, offset, len),
126db53a302SChris Wilson 
127db53a302SChris Wilson 	    TP_STRUCT__entry(
128db53a302SChris Wilson 			     __field(struct drm_i915_gem_object *, obj)
129db53a302SChris Wilson 			     __field(u32, offset)
130db53a302SChris Wilson 			     __field(u32, len)
131db53a302SChris Wilson 			     ),
132db53a302SChris Wilson 
133db53a302SChris Wilson 	    TP_fast_assign(
134db53a302SChris Wilson 			   __entry->obj = obj;
135db53a302SChris Wilson 			   __entry->offset = offset;
136db53a302SChris Wilson 			   __entry->len = len;
137db53a302SChris Wilson 			   ),
138db53a302SChris Wilson 
139db53a302SChris Wilson 	    TP_printk("obj=%p, offset=%u, len=%u",
140db53a302SChris Wilson 		      __entry->obj, __entry->offset, __entry->len)
141db53a302SChris Wilson );
142db53a302SChris Wilson 
143db53a302SChris Wilson TRACE_EVENT(i915_gem_object_fault,
144db53a302SChris Wilson 	    TP_PROTO(struct drm_i915_gem_object *obj, u32 index, bool gtt, bool write),
145db53a302SChris Wilson 	    TP_ARGS(obj, index, gtt, write),
146db53a302SChris Wilson 
147db53a302SChris Wilson 	    TP_STRUCT__entry(
148db53a302SChris Wilson 			     __field(struct drm_i915_gem_object *, obj)
149db53a302SChris Wilson 			     __field(u32, index)
150db53a302SChris Wilson 			     __field(bool, gtt)
151db53a302SChris Wilson 			     __field(bool, write)
152db53a302SChris Wilson 			     ),
153db53a302SChris Wilson 
154db53a302SChris Wilson 	    TP_fast_assign(
155db53a302SChris Wilson 			   __entry->obj = obj;
156db53a302SChris Wilson 			   __entry->index = index;
157db53a302SChris Wilson 			   __entry->gtt = gtt;
158db53a302SChris Wilson 			   __entry->write = write;
159db53a302SChris Wilson 			   ),
160db53a302SChris Wilson 
161db53a302SChris Wilson 	    TP_printk("obj=%p, %s index=%u %s",
162db53a302SChris Wilson 		      __entry->obj,
163db53a302SChris Wilson 		      __entry->gtt ? "GTT" : "CPU",
164db53a302SChris Wilson 		      __entry->index,
165db53a302SChris Wilson 		      __entry->write ? ", writable" : "")
1661c5d22f7SChris Wilson );
1671c5d22f7SChris Wilson 
168903cf20cSLi Zefan DECLARE_EVENT_CLASS(i915_gem_object,
16905394f39SChris Wilson 	    TP_PROTO(struct drm_i915_gem_object *obj),
1701c5d22f7SChris Wilson 	    TP_ARGS(obj),
1711c5d22f7SChris Wilson 
1721c5d22f7SChris Wilson 	    TP_STRUCT__entry(
17305394f39SChris Wilson 			     __field(struct drm_i915_gem_object *, obj)
1741c5d22f7SChris Wilson 			     ),
1751c5d22f7SChris Wilson 
1761c5d22f7SChris Wilson 	    TP_fast_assign(
1771c5d22f7SChris Wilson 			   __entry->obj = obj;
1781c5d22f7SChris Wilson 			   ),
1791c5d22f7SChris Wilson 
1801c5d22f7SChris Wilson 	    TP_printk("obj=%p", __entry->obj)
1811c5d22f7SChris Wilson );
1821c5d22f7SChris Wilson 
183f41275e8SLi Zefan DEFINE_EVENT(i915_gem_object, i915_gem_object_clflush,
18405394f39SChris Wilson 	     TP_PROTO(struct drm_i915_gem_object *obj),
185903cf20cSLi Zefan 	     TP_ARGS(obj)
186903cf20cSLi Zefan );
1871c5d22f7SChris Wilson 
188903cf20cSLi Zefan DEFINE_EVENT(i915_gem_object, i915_gem_object_destroy,
18905394f39SChris Wilson 	    TP_PROTO(struct drm_i915_gem_object *obj),
190903cf20cSLi Zefan 	    TP_ARGS(obj)
1911c5d22f7SChris Wilson );
1921c5d22f7SChris Wilson 
193db53a302SChris Wilson TRACE_EVENT(i915_gem_evict,
194db53a302SChris Wilson 	    TP_PROTO(struct drm_device *dev, u32 size, u32 align, bool mappable),
195db53a302SChris Wilson 	    TP_ARGS(dev, size, align, mappable),
1961c5d22f7SChris Wilson 
1971c5d22f7SChris Wilson 	    TP_STRUCT__entry(
1984f49be54SChris Wilson 			     __field(u32, dev)
199db53a302SChris Wilson 			     __field(u32, size)
200db53a302SChris Wilson 			     __field(u32, align)
201db53a302SChris Wilson 			     __field(bool, mappable)
2021c5d22f7SChris Wilson 			    ),
2031c5d22f7SChris Wilson 
2041c5d22f7SChris Wilson 	    TP_fast_assign(
2054f49be54SChris Wilson 			   __entry->dev = dev->primary->index;
206db53a302SChris Wilson 			   __entry->size = size;
207db53a302SChris Wilson 			   __entry->align = align;
208db53a302SChris Wilson 			   __entry->mappable = mappable;
2091c5d22f7SChris Wilson 			  ),
2101c5d22f7SChris Wilson 
211db53a302SChris Wilson 	    TP_printk("dev=%d, size=%d, align=%d %s",
212db53a302SChris Wilson 		      __entry->dev, __entry->size, __entry->align,
213db53a302SChris Wilson 		      __entry->mappable ? ", mappable" : "")
2141c5d22f7SChris Wilson );
2151c5d22f7SChris Wilson 
216db53a302SChris Wilson TRACE_EVENT(i915_gem_evict_everything,
2176c085a72SChris Wilson 	    TP_PROTO(struct drm_device *dev),
2186c085a72SChris Wilson 	    TP_ARGS(dev),
2191c5d22f7SChris Wilson 
2201c5d22f7SChris Wilson 	    TP_STRUCT__entry(
2214f49be54SChris Wilson 			     __field(u32, dev)
2221c5d22f7SChris Wilson 			    ),
2231c5d22f7SChris Wilson 
2241c5d22f7SChris Wilson 	    TP_fast_assign(
2254f49be54SChris Wilson 			   __entry->dev = dev->primary->index;
2261c5d22f7SChris Wilson 			  ),
2271c5d22f7SChris Wilson 
2286c085a72SChris Wilson 	    TP_printk("dev=%d", __entry->dev)
229db53a302SChris Wilson );
230db53a302SChris Wilson 
231db53a302SChris Wilson TRACE_EVENT(i915_gem_ring_dispatch,
232d7d4eeddSChris Wilson 	    TP_PROTO(struct intel_ring_buffer *ring, u32 seqno, u32 flags),
233d7d4eeddSChris Wilson 	    TP_ARGS(ring, seqno, flags),
234db53a302SChris Wilson 
235db53a302SChris Wilson 	    TP_STRUCT__entry(
236db53a302SChris Wilson 			     __field(u32, dev)
237db53a302SChris Wilson 			     __field(u32, ring)
238db53a302SChris Wilson 			     __field(u32, seqno)
239d7d4eeddSChris Wilson 			     __field(u32, flags)
240db53a302SChris Wilson 			     ),
241db53a302SChris Wilson 
242db53a302SChris Wilson 	    TP_fast_assign(
243db53a302SChris Wilson 			   __entry->dev = ring->dev->primary->index;
244db53a302SChris Wilson 			   __entry->ring = ring->id;
245db53a302SChris Wilson 			   __entry->seqno = seqno;
246d7d4eeddSChris Wilson 			   __entry->flags = flags;
247db53a302SChris Wilson 			   i915_trace_irq_get(ring, seqno);
248db53a302SChris Wilson 			   ),
249db53a302SChris Wilson 
250d7d4eeddSChris Wilson 	    TP_printk("dev=%u, ring=%u, seqno=%u, flags=%x",
251d7d4eeddSChris Wilson 		      __entry->dev, __entry->ring, __entry->seqno, __entry->flags)
252db53a302SChris Wilson );
253db53a302SChris Wilson 
254db53a302SChris Wilson TRACE_EVENT(i915_gem_ring_flush,
255db53a302SChris Wilson 	    TP_PROTO(struct intel_ring_buffer *ring, u32 invalidate, u32 flush),
256db53a302SChris Wilson 	    TP_ARGS(ring, invalidate, flush),
257db53a302SChris Wilson 
258db53a302SChris Wilson 	    TP_STRUCT__entry(
259db53a302SChris Wilson 			     __field(u32, dev)
260db53a302SChris Wilson 			     __field(u32, ring)
261db53a302SChris Wilson 			     __field(u32, invalidate)
262db53a302SChris Wilson 			     __field(u32, flush)
263db53a302SChris Wilson 			     ),
264db53a302SChris Wilson 
265db53a302SChris Wilson 	    TP_fast_assign(
266db53a302SChris Wilson 			   __entry->dev = ring->dev->primary->index;
267db53a302SChris Wilson 			   __entry->ring = ring->id;
268db53a302SChris Wilson 			   __entry->invalidate = invalidate;
269db53a302SChris Wilson 			   __entry->flush = flush;
270db53a302SChris Wilson 			   ),
271db53a302SChris Wilson 
272db53a302SChris Wilson 	    TP_printk("dev=%u, ring=%x, invalidate=%04x, flush=%04x",
273db53a302SChris Wilson 		      __entry->dev, __entry->ring,
274db53a302SChris Wilson 		      __entry->invalidate, __entry->flush)
2751c5d22f7SChris Wilson );
2761c5d22f7SChris Wilson 
277903cf20cSLi Zefan DECLARE_EVENT_CLASS(i915_gem_request,
278db53a302SChris Wilson 	    TP_PROTO(struct intel_ring_buffer *ring, u32 seqno),
279db53a302SChris Wilson 	    TP_ARGS(ring, seqno),
2801c5d22f7SChris Wilson 
2811c5d22f7SChris Wilson 	    TP_STRUCT__entry(
2824f49be54SChris Wilson 			     __field(u32, dev)
283db53a302SChris Wilson 			     __field(u32, ring)
2841c5d22f7SChris Wilson 			     __field(u32, seqno)
2851c5d22f7SChris Wilson 			     ),
2861c5d22f7SChris Wilson 
2871c5d22f7SChris Wilson 	    TP_fast_assign(
288db53a302SChris Wilson 			   __entry->dev = ring->dev->primary->index;
289db53a302SChris Wilson 			   __entry->ring = ring->id;
2901c5d22f7SChris Wilson 			   __entry->seqno = seqno;
2911c5d22f7SChris Wilson 			   ),
2921c5d22f7SChris Wilson 
293db53a302SChris Wilson 	    TP_printk("dev=%u, ring=%u, seqno=%u",
294db53a302SChris Wilson 		      __entry->dev, __entry->ring, __entry->seqno)
295db53a302SChris Wilson );
296db53a302SChris Wilson 
297db53a302SChris Wilson DEFINE_EVENT(i915_gem_request, i915_gem_request_add,
298db53a302SChris Wilson 	    TP_PROTO(struct intel_ring_buffer *ring, u32 seqno),
299db53a302SChris Wilson 	    TP_ARGS(ring, seqno)
3001c5d22f7SChris Wilson );
3011c5d22f7SChris Wilson 
302903cf20cSLi Zefan DEFINE_EVENT(i915_gem_request, i915_gem_request_complete,
303db53a302SChris Wilson 	    TP_PROTO(struct intel_ring_buffer *ring, u32 seqno),
304db53a302SChris Wilson 	    TP_ARGS(ring, seqno)
3051c5d22f7SChris Wilson );
3061c5d22f7SChris Wilson 
307903cf20cSLi Zefan DEFINE_EVENT(i915_gem_request, i915_gem_request_retire,
308db53a302SChris Wilson 	    TP_PROTO(struct intel_ring_buffer *ring, u32 seqno),
309db53a302SChris Wilson 	    TP_ARGS(ring, seqno)
3101c5d22f7SChris Wilson );
3111c5d22f7SChris Wilson 
312f3fd3768SBen Widawsky TRACE_EVENT(i915_gem_request_wait_begin,
313db53a302SChris Wilson 	    TP_PROTO(struct intel_ring_buffer *ring, u32 seqno),
314f3fd3768SBen Widawsky 	    TP_ARGS(ring, seqno),
315f3fd3768SBen Widawsky 
316f3fd3768SBen Widawsky 	    TP_STRUCT__entry(
317f3fd3768SBen Widawsky 			     __field(u32, dev)
318f3fd3768SBen Widawsky 			     __field(u32, ring)
319f3fd3768SBen Widawsky 			     __field(u32, seqno)
320f3fd3768SBen Widawsky 			     __field(bool, blocking)
321f3fd3768SBen Widawsky 			     ),
322f3fd3768SBen Widawsky 
323f3fd3768SBen Widawsky 	    /* NB: the blocking information is racy since mutex_is_locked
324f3fd3768SBen Widawsky 	     * doesn't check that the current thread holds the lock. The only
325f3fd3768SBen Widawsky 	     * other option would be to pass the boolean information of whether
326f3fd3768SBen Widawsky 	     * or not the class was blocking down through the stack which is
327f3fd3768SBen Widawsky 	     * less desirable.
328f3fd3768SBen Widawsky 	     */
329f3fd3768SBen Widawsky 	    TP_fast_assign(
330f3fd3768SBen Widawsky 			   __entry->dev = ring->dev->primary->index;
331f3fd3768SBen Widawsky 			   __entry->ring = ring->id;
332f3fd3768SBen Widawsky 			   __entry->seqno = seqno;
333f3fd3768SBen Widawsky 			   __entry->blocking = mutex_is_locked(&ring->dev->struct_mutex);
334f3fd3768SBen Widawsky 			   ),
335f3fd3768SBen Widawsky 
336f3fd3768SBen Widawsky 	    TP_printk("dev=%u, ring=%u, seqno=%u, blocking=%s",
337f3fd3768SBen Widawsky 		      __entry->dev, __entry->ring, __entry->seqno,
338f3fd3768SBen Widawsky 		      __entry->blocking ?  "yes (NB)" : "no")
3391c5d22f7SChris Wilson );
3401c5d22f7SChris Wilson 
341903cf20cSLi Zefan DEFINE_EVENT(i915_gem_request, i915_gem_request_wait_end,
342db53a302SChris Wilson 	    TP_PROTO(struct intel_ring_buffer *ring, u32 seqno),
343db53a302SChris Wilson 	    TP_ARGS(ring, seqno)
344903cf20cSLi Zefan );
345903cf20cSLi Zefan 
346903cf20cSLi Zefan DECLARE_EVENT_CLASS(i915_ring,
347db53a302SChris Wilson 	    TP_PROTO(struct intel_ring_buffer *ring),
348db53a302SChris Wilson 	    TP_ARGS(ring),
3491c5d22f7SChris Wilson 
3501c5d22f7SChris Wilson 	    TP_STRUCT__entry(
3514f49be54SChris Wilson 			     __field(u32, dev)
352db53a302SChris Wilson 			     __field(u32, ring)
3531c5d22f7SChris Wilson 			     ),
3541c5d22f7SChris Wilson 
3551c5d22f7SChris Wilson 	    TP_fast_assign(
356db53a302SChris Wilson 			   __entry->dev = ring->dev->primary->index;
357db53a302SChris Wilson 			   __entry->ring = ring->id;
3581c5d22f7SChris Wilson 			   ),
3591c5d22f7SChris Wilson 
360db53a302SChris Wilson 	    TP_printk("dev=%u, ring=%u", __entry->dev, __entry->ring)
3611c5d22f7SChris Wilson );
3621c5d22f7SChris Wilson 
363903cf20cSLi Zefan DEFINE_EVENT(i915_ring, i915_ring_wait_begin,
364db53a302SChris Wilson 	    TP_PROTO(struct intel_ring_buffer *ring),
365db53a302SChris Wilson 	    TP_ARGS(ring)
366903cf20cSLi Zefan );
3671c5d22f7SChris Wilson 
368903cf20cSLi Zefan DEFINE_EVENT(i915_ring, i915_ring_wait_end,
369db53a302SChris Wilson 	    TP_PROTO(struct intel_ring_buffer *ring),
370db53a302SChris Wilson 	    TP_ARGS(ring)
3711c5d22f7SChris Wilson );
3721c5d22f7SChris Wilson 
373e5510facSJesse Barnes TRACE_EVENT(i915_flip_request,
37405394f39SChris Wilson 	    TP_PROTO(int plane, struct drm_i915_gem_object *obj),
375e5510facSJesse Barnes 
376e5510facSJesse Barnes 	    TP_ARGS(plane, obj),
377e5510facSJesse Barnes 
378e5510facSJesse Barnes 	    TP_STRUCT__entry(
379e5510facSJesse Barnes 		    __field(int, plane)
38005394f39SChris Wilson 		    __field(struct drm_i915_gem_object *, obj)
381e5510facSJesse Barnes 		    ),
382e5510facSJesse Barnes 
383e5510facSJesse Barnes 	    TP_fast_assign(
384e5510facSJesse Barnes 		    __entry->plane = plane;
385e5510facSJesse Barnes 		    __entry->obj = obj;
386e5510facSJesse Barnes 		    ),
387e5510facSJesse Barnes 
388e5510facSJesse Barnes 	    TP_printk("plane=%d, obj=%p", __entry->plane, __entry->obj)
389e5510facSJesse Barnes );
390e5510facSJesse Barnes 
391e5510facSJesse Barnes TRACE_EVENT(i915_flip_complete,
39205394f39SChris Wilson 	    TP_PROTO(int plane, struct drm_i915_gem_object *obj),
393e5510facSJesse Barnes 
394e5510facSJesse Barnes 	    TP_ARGS(plane, obj),
395e5510facSJesse Barnes 
396e5510facSJesse Barnes 	    TP_STRUCT__entry(
397e5510facSJesse Barnes 		    __field(int, plane)
39805394f39SChris Wilson 		    __field(struct drm_i915_gem_object *, obj)
399e5510facSJesse Barnes 		    ),
400e5510facSJesse Barnes 
401e5510facSJesse Barnes 	    TP_fast_assign(
402e5510facSJesse Barnes 		    __entry->plane = plane;
403e5510facSJesse Barnes 		    __entry->obj = obj;
404e5510facSJesse Barnes 		    ),
405e5510facSJesse Barnes 
406e5510facSJesse Barnes 	    TP_printk("plane=%d, obj=%p", __entry->plane, __entry->obj)
407e5510facSJesse Barnes );
408e5510facSJesse Barnes 
409ed71f1b4SChris Wilson TRACE_EVENT_CONDITION(i915_reg_rw,
410ed71f1b4SChris Wilson 	TP_PROTO(bool write, u32 reg, u64 val, int len, bool trace),
411ba4f01a3SYuanhan Liu 
412ed71f1b4SChris Wilson 	TP_ARGS(write, reg, val, len, trace),
413ed71f1b4SChris Wilson 
414ed71f1b4SChris Wilson 	TP_CONDITION(trace),
415ba4f01a3SYuanhan Liu 
416ba4f01a3SYuanhan Liu 	TP_STRUCT__entry(
417db53a302SChris Wilson 		__field(u64, val)
418db53a302SChris Wilson 		__field(u32, reg)
419db53a302SChris Wilson 		__field(u16, write)
420db53a302SChris Wilson 		__field(u16, len)
421ba4f01a3SYuanhan Liu 		),
422ba4f01a3SYuanhan Liu 
423ba4f01a3SYuanhan Liu 	TP_fast_assign(
424db53a302SChris Wilson 		__entry->val = (u64)val;
425ba4f01a3SYuanhan Liu 		__entry->reg = reg;
426db53a302SChris Wilson 		__entry->write = write;
427ba4f01a3SYuanhan Liu 		__entry->len = len;
428ba4f01a3SYuanhan Liu 		),
429ba4f01a3SYuanhan Liu 
430db53a302SChris Wilson 	TP_printk("%s reg=0x%x, len=%d, val=(0x%x, 0x%x)",
431db53a302SChris Wilson 		__entry->write ? "write" : "read",
432db53a302SChris Wilson 		__entry->reg, __entry->len,
433db53a302SChris Wilson 		(u32)(__entry->val & 0xffffffff),
434db53a302SChris Wilson 		(u32)(__entry->val >> 32))
435ba4f01a3SYuanhan Liu );
436ba4f01a3SYuanhan Liu 
437be2cde9aSDaniel Vetter TRACE_EVENT(intel_gpu_freq_change,
438be2cde9aSDaniel Vetter 	    TP_PROTO(u32 freq),
439be2cde9aSDaniel Vetter 	    TP_ARGS(freq),
440be2cde9aSDaniel Vetter 
441be2cde9aSDaniel Vetter 	    TP_STRUCT__entry(
442be2cde9aSDaniel Vetter 			     __field(u32, freq)
443be2cde9aSDaniel Vetter 			     ),
444be2cde9aSDaniel Vetter 
445be2cde9aSDaniel Vetter 	    TP_fast_assign(
446be2cde9aSDaniel Vetter 			   __entry->freq = freq;
447be2cde9aSDaniel Vetter 			   ),
448be2cde9aSDaniel Vetter 
449be2cde9aSDaniel Vetter 	    TP_printk("new_freq=%u", __entry->freq)
450be2cde9aSDaniel Vetter );
451be2cde9aSDaniel Vetter 
4521c5d22f7SChris Wilson #endif /* _I915_TRACE_H_ */
4531c5d22f7SChris Wilson 
4541c5d22f7SChris Wilson /* This part must be outside protection */
4551c5d22f7SChris Wilson #undef TRACE_INCLUDE_PATH
456a7c54278SPeter Clifton #define TRACE_INCLUDE_PATH .
4571c5d22f7SChris Wilson #include <trace/define_trace.h>
458