xref: /openbmc/linux/drivers/gpu/drm/i915/i915_trace.h (revision e5510fac)
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>
91c5d22f7SChris Wilson 
101c5d22f7SChris Wilson #undef TRACE_SYSTEM
111c5d22f7SChris Wilson #define TRACE_SYSTEM i915
121c5d22f7SChris Wilson #define TRACE_SYSTEM_STRING __stringify(TRACE_SYSTEM)
131c5d22f7SChris Wilson #define TRACE_INCLUDE_FILE i915_trace
141c5d22f7SChris Wilson 
151c5d22f7SChris Wilson /* object tracking */
161c5d22f7SChris Wilson 
171c5d22f7SChris Wilson TRACE_EVENT(i915_gem_object_create,
181c5d22f7SChris Wilson 
191c5d22f7SChris Wilson 	    TP_PROTO(struct drm_gem_object *obj),
201c5d22f7SChris Wilson 
211c5d22f7SChris Wilson 	    TP_ARGS(obj),
221c5d22f7SChris Wilson 
231c5d22f7SChris Wilson 	    TP_STRUCT__entry(
241c5d22f7SChris Wilson 			     __field(struct drm_gem_object *, obj)
251c5d22f7SChris Wilson 			     __field(u32, size)
261c5d22f7SChris Wilson 			     ),
271c5d22f7SChris Wilson 
281c5d22f7SChris Wilson 	    TP_fast_assign(
291c5d22f7SChris Wilson 			   __entry->obj = obj;
301c5d22f7SChris Wilson 			   __entry->size = obj->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,
371c5d22f7SChris Wilson 
381c5d22f7SChris Wilson 	    TP_PROTO(struct drm_gem_object *obj, u32 gtt_offset),
391c5d22f7SChris Wilson 
401c5d22f7SChris Wilson 	    TP_ARGS(obj, gtt_offset),
411c5d22f7SChris Wilson 
421c5d22f7SChris Wilson 	    TP_STRUCT__entry(
431c5d22f7SChris Wilson 			     __field(struct drm_gem_object *, obj)
441c5d22f7SChris Wilson 			     __field(u32, gtt_offset)
451c5d22f7SChris Wilson 			     ),
461c5d22f7SChris Wilson 
471c5d22f7SChris Wilson 	    TP_fast_assign(
481c5d22f7SChris Wilson 			   __entry->obj = obj;
491c5d22f7SChris Wilson 			   __entry->gtt_offset = gtt_offset;
501c5d22f7SChris Wilson 			   ),
511c5d22f7SChris Wilson 
521c5d22f7SChris Wilson 	    TP_printk("obj=%p, gtt_offset=%08x",
531c5d22f7SChris Wilson 		      __entry->obj, __entry->gtt_offset)
541c5d22f7SChris Wilson );
551c5d22f7SChris Wilson 
561c5d22f7SChris Wilson TRACE_EVENT(i915_gem_object_change_domain,
571c5d22f7SChris Wilson 
581c5d22f7SChris Wilson 	    TP_PROTO(struct drm_gem_object *obj, uint32_t old_read_domains, uint32_t old_write_domain),
591c5d22f7SChris Wilson 
601c5d22f7SChris Wilson 	    TP_ARGS(obj, old_read_domains, old_write_domain),
611c5d22f7SChris Wilson 
621c5d22f7SChris Wilson 	    TP_STRUCT__entry(
631c5d22f7SChris Wilson 			     __field(struct drm_gem_object *, obj)
641c5d22f7SChris Wilson 			     __field(u32, read_domains)
651c5d22f7SChris Wilson 			     __field(u32, write_domain)
661c5d22f7SChris Wilson 			     ),
671c5d22f7SChris Wilson 
681c5d22f7SChris Wilson 	    TP_fast_assign(
691c5d22f7SChris Wilson 			   __entry->obj = obj;
701c5d22f7SChris Wilson 			   __entry->read_domains = obj->read_domains | (old_read_domains << 16);
711c5d22f7SChris Wilson 			   __entry->write_domain = obj->write_domain | (old_write_domain << 16);
721c5d22f7SChris Wilson 			   ),
731c5d22f7SChris Wilson 
741c5d22f7SChris Wilson 	    TP_printk("obj=%p, read=%04x, write=%04x",
751c5d22f7SChris Wilson 		      __entry->obj,
761c5d22f7SChris Wilson 		      __entry->read_domains, __entry->write_domain)
771c5d22f7SChris Wilson );
781c5d22f7SChris Wilson 
791c5d22f7SChris Wilson TRACE_EVENT(i915_gem_object_get_fence,
801c5d22f7SChris Wilson 
811c5d22f7SChris Wilson 	    TP_PROTO(struct drm_gem_object *obj, int fence, int tiling_mode),
821c5d22f7SChris Wilson 
831c5d22f7SChris Wilson 	    TP_ARGS(obj, fence, tiling_mode),
841c5d22f7SChris Wilson 
851c5d22f7SChris Wilson 	    TP_STRUCT__entry(
861c5d22f7SChris Wilson 			     __field(struct drm_gem_object *, obj)
871c5d22f7SChris Wilson 			     __field(int, fence)
881c5d22f7SChris Wilson 			     __field(int, tiling_mode)
891c5d22f7SChris Wilson 			     ),
901c5d22f7SChris Wilson 
911c5d22f7SChris Wilson 	    TP_fast_assign(
921c5d22f7SChris Wilson 			   __entry->obj = obj;
931c5d22f7SChris Wilson 			   __entry->fence = fence;
941c5d22f7SChris Wilson 			   __entry->tiling_mode = tiling_mode;
951c5d22f7SChris Wilson 			   ),
961c5d22f7SChris Wilson 
971c5d22f7SChris Wilson 	    TP_printk("obj=%p, fence=%d, tiling=%d",
981c5d22f7SChris Wilson 		      __entry->obj, __entry->fence, __entry->tiling_mode)
991c5d22f7SChris Wilson );
1001c5d22f7SChris Wilson 
101903cf20cSLi Zefan DECLARE_EVENT_CLASS(i915_gem_object,
1021c5d22f7SChris Wilson 
1031c5d22f7SChris Wilson 	    TP_PROTO(struct drm_gem_object *obj),
1041c5d22f7SChris Wilson 
1051c5d22f7SChris Wilson 	    TP_ARGS(obj),
1061c5d22f7SChris Wilson 
1071c5d22f7SChris Wilson 	    TP_STRUCT__entry(
1081c5d22f7SChris Wilson 			     __field(struct drm_gem_object *, obj)
1091c5d22f7SChris Wilson 			     ),
1101c5d22f7SChris Wilson 
1111c5d22f7SChris Wilson 	    TP_fast_assign(
1121c5d22f7SChris Wilson 			   __entry->obj = obj;
1131c5d22f7SChris Wilson 			   ),
1141c5d22f7SChris Wilson 
1151c5d22f7SChris Wilson 	    TP_printk("obj=%p", __entry->obj)
1161c5d22f7SChris Wilson );
1171c5d22f7SChris Wilson 
118f41275e8SLi Zefan DEFINE_EVENT(i915_gem_object, i915_gem_object_clflush,
119f41275e8SLi Zefan 
120f41275e8SLi Zefan 	    TP_PROTO(struct drm_gem_object *obj),
121f41275e8SLi Zefan 
122f41275e8SLi Zefan 	    TP_ARGS(obj)
123f41275e8SLi Zefan );
124f41275e8SLi Zefan 
125903cf20cSLi Zefan DEFINE_EVENT(i915_gem_object, i915_gem_object_unbind,
1261c5d22f7SChris Wilson 
1271c5d22f7SChris Wilson 	    TP_PROTO(struct drm_gem_object *obj),
1281c5d22f7SChris Wilson 
129903cf20cSLi Zefan 	    TP_ARGS(obj)
130903cf20cSLi Zefan );
1311c5d22f7SChris Wilson 
132903cf20cSLi Zefan DEFINE_EVENT(i915_gem_object, i915_gem_object_destroy,
1331c5d22f7SChris Wilson 
134903cf20cSLi Zefan 	    TP_PROTO(struct drm_gem_object *obj),
1351c5d22f7SChris Wilson 
136903cf20cSLi Zefan 	    TP_ARGS(obj)
1371c5d22f7SChris Wilson );
1381c5d22f7SChris Wilson 
1391c5d22f7SChris Wilson /* batch tracing */
1401c5d22f7SChris Wilson 
1411c5d22f7SChris Wilson TRACE_EVENT(i915_gem_request_submit,
1421c5d22f7SChris Wilson 
1431c5d22f7SChris Wilson 	    TP_PROTO(struct drm_device *dev, u32 seqno),
1441c5d22f7SChris Wilson 
1451c5d22f7SChris Wilson 	    TP_ARGS(dev, seqno),
1461c5d22f7SChris Wilson 
1471c5d22f7SChris Wilson 	    TP_STRUCT__entry(
1484f49be54SChris Wilson 			     __field(u32, dev)
1491c5d22f7SChris Wilson 			     __field(u32, seqno)
1501c5d22f7SChris Wilson 			     ),
1511c5d22f7SChris Wilson 
1521c5d22f7SChris Wilson 	    TP_fast_assign(
1534f49be54SChris Wilson 			   __entry->dev = dev->primary->index;
1541c5d22f7SChris Wilson 			   __entry->seqno = seqno;
1559d34e5dbSChris Wilson 			   i915_trace_irq_get(dev, seqno);
1561c5d22f7SChris Wilson 			   ),
1571c5d22f7SChris Wilson 
1584f49be54SChris Wilson 	    TP_printk("dev=%u, seqno=%u", __entry->dev, __entry->seqno)
1591c5d22f7SChris Wilson );
1601c5d22f7SChris Wilson 
1611c5d22f7SChris Wilson TRACE_EVENT(i915_gem_request_flush,
1621c5d22f7SChris Wilson 
1631c5d22f7SChris Wilson 	    TP_PROTO(struct drm_device *dev, u32 seqno,
1641c5d22f7SChris Wilson 		     u32 flush_domains, u32 invalidate_domains),
1651c5d22f7SChris Wilson 
1661c5d22f7SChris Wilson 	    TP_ARGS(dev, seqno, flush_domains, invalidate_domains),
1671c5d22f7SChris Wilson 
1681c5d22f7SChris Wilson 	    TP_STRUCT__entry(
1694f49be54SChris Wilson 			     __field(u32, dev)
1701c5d22f7SChris Wilson 			     __field(u32, seqno)
1711c5d22f7SChris Wilson 			     __field(u32, flush_domains)
1721c5d22f7SChris Wilson 			     __field(u32, invalidate_domains)
1731c5d22f7SChris Wilson 			     ),
1741c5d22f7SChris Wilson 
1751c5d22f7SChris Wilson 	    TP_fast_assign(
1764f49be54SChris Wilson 			   __entry->dev = dev->primary->index;
1771c5d22f7SChris Wilson 			   __entry->seqno = seqno;
1781c5d22f7SChris Wilson 			   __entry->flush_domains = flush_domains;
1791c5d22f7SChris Wilson 			   __entry->invalidate_domains = invalidate_domains;
1801c5d22f7SChris Wilson 			   ),
1811c5d22f7SChris Wilson 
1824f49be54SChris Wilson 	    TP_printk("dev=%u, seqno=%u, flush=%04x, invalidate=%04x",
1831c5d22f7SChris Wilson 		      __entry->dev, __entry->seqno,
1841c5d22f7SChris Wilson 		      __entry->flush_domains, __entry->invalidate_domains)
1851c5d22f7SChris Wilson );
1861c5d22f7SChris Wilson 
187903cf20cSLi Zefan DECLARE_EVENT_CLASS(i915_gem_request,
1881c5d22f7SChris Wilson 
1891c5d22f7SChris Wilson 	    TP_PROTO(struct drm_device *dev, u32 seqno),
1901c5d22f7SChris Wilson 
1911c5d22f7SChris Wilson 	    TP_ARGS(dev, seqno),
1921c5d22f7SChris Wilson 
1931c5d22f7SChris Wilson 	    TP_STRUCT__entry(
1944f49be54SChris Wilson 			     __field(u32, dev)
1951c5d22f7SChris Wilson 			     __field(u32, seqno)
1961c5d22f7SChris Wilson 			     ),
1971c5d22f7SChris Wilson 
1981c5d22f7SChris Wilson 	    TP_fast_assign(
1994f49be54SChris Wilson 			   __entry->dev = dev->primary->index;
2001c5d22f7SChris Wilson 			   __entry->seqno = seqno;
2011c5d22f7SChris Wilson 			   ),
2021c5d22f7SChris Wilson 
2034f49be54SChris Wilson 	    TP_printk("dev=%u, seqno=%u", __entry->dev, __entry->seqno)
2041c5d22f7SChris Wilson );
2051c5d22f7SChris Wilson 
206903cf20cSLi Zefan DEFINE_EVENT(i915_gem_request, i915_gem_request_complete,
2071c5d22f7SChris Wilson 
2081c5d22f7SChris Wilson 	    TP_PROTO(struct drm_device *dev, u32 seqno),
2091c5d22f7SChris Wilson 
210903cf20cSLi Zefan 	    TP_ARGS(dev, seqno)
2111c5d22f7SChris Wilson );
2121c5d22f7SChris Wilson 
213903cf20cSLi Zefan DEFINE_EVENT(i915_gem_request, i915_gem_request_retire,
2141c5d22f7SChris Wilson 
2151c5d22f7SChris Wilson 	    TP_PROTO(struct drm_device *dev, u32 seqno),
2161c5d22f7SChris Wilson 
217903cf20cSLi Zefan 	    TP_ARGS(dev, seqno)
2181c5d22f7SChris Wilson );
2191c5d22f7SChris Wilson 
220903cf20cSLi Zefan DEFINE_EVENT(i915_gem_request, i915_gem_request_wait_begin,
2211c5d22f7SChris Wilson 
2221c5d22f7SChris Wilson 	    TP_PROTO(struct drm_device *dev, u32 seqno),
2231c5d22f7SChris Wilson 
224903cf20cSLi Zefan 	    TP_ARGS(dev, seqno)
2251c5d22f7SChris Wilson );
2261c5d22f7SChris Wilson 
227903cf20cSLi Zefan DEFINE_EVENT(i915_gem_request, i915_gem_request_wait_end,
228903cf20cSLi Zefan 
229903cf20cSLi Zefan 	    TP_PROTO(struct drm_device *dev, u32 seqno),
230903cf20cSLi Zefan 
231903cf20cSLi Zefan 	    TP_ARGS(dev, seqno)
232903cf20cSLi Zefan );
233903cf20cSLi Zefan 
234903cf20cSLi Zefan DECLARE_EVENT_CLASS(i915_ring,
2351c5d22f7SChris Wilson 
2361c5d22f7SChris Wilson 	    TP_PROTO(struct drm_device *dev),
2371c5d22f7SChris Wilson 
2381c5d22f7SChris Wilson 	    TP_ARGS(dev),
2391c5d22f7SChris Wilson 
2401c5d22f7SChris Wilson 	    TP_STRUCT__entry(
2414f49be54SChris Wilson 			     __field(u32, dev)
2421c5d22f7SChris Wilson 			     ),
2431c5d22f7SChris Wilson 
2441c5d22f7SChris Wilson 	    TP_fast_assign(
2454f49be54SChris Wilson 			   __entry->dev = dev->primary->index;
2461c5d22f7SChris Wilson 			   ),
2471c5d22f7SChris Wilson 
2484f49be54SChris Wilson 	    TP_printk("dev=%u", __entry->dev)
2491c5d22f7SChris Wilson );
2501c5d22f7SChris Wilson 
251903cf20cSLi Zefan DEFINE_EVENT(i915_ring, i915_ring_wait_begin,
2521c5d22f7SChris Wilson 
2531c5d22f7SChris Wilson 	    TP_PROTO(struct drm_device *dev),
2541c5d22f7SChris Wilson 
255903cf20cSLi Zefan 	    TP_ARGS(dev)
256903cf20cSLi Zefan );
2571c5d22f7SChris Wilson 
258903cf20cSLi Zefan DEFINE_EVENT(i915_ring, i915_ring_wait_end,
2591c5d22f7SChris Wilson 
260903cf20cSLi Zefan 	    TP_PROTO(struct drm_device *dev),
2611c5d22f7SChris Wilson 
262903cf20cSLi Zefan 	    TP_ARGS(dev)
2631c5d22f7SChris Wilson );
2641c5d22f7SChris Wilson 
265e5510facSJesse Barnes TRACE_EVENT(i915_flip_request,
266e5510facSJesse Barnes 	    TP_PROTO(int plane, struct drm_gem_object *obj),
267e5510facSJesse Barnes 
268e5510facSJesse Barnes 	    TP_ARGS(plane, obj),
269e5510facSJesse Barnes 
270e5510facSJesse Barnes 	    TP_STRUCT__entry(
271e5510facSJesse Barnes 		    __field(int, plane)
272e5510facSJesse Barnes 		    __field(struct drm_gem_object *, obj)
273e5510facSJesse Barnes 		    ),
274e5510facSJesse Barnes 
275e5510facSJesse Barnes 	    TP_fast_assign(
276e5510facSJesse Barnes 		    __entry->plane = plane;
277e5510facSJesse Barnes 		    __entry->obj = obj;
278e5510facSJesse Barnes 		    ),
279e5510facSJesse Barnes 
280e5510facSJesse Barnes 	    TP_printk("plane=%d, obj=%p", __entry->plane, __entry->obj)
281e5510facSJesse Barnes );
282e5510facSJesse Barnes 
283e5510facSJesse Barnes TRACE_EVENT(i915_flip_complete,
284e5510facSJesse Barnes 	    TP_PROTO(int plane, struct drm_gem_object *obj),
285e5510facSJesse Barnes 
286e5510facSJesse Barnes 	    TP_ARGS(plane, obj),
287e5510facSJesse Barnes 
288e5510facSJesse Barnes 	    TP_STRUCT__entry(
289e5510facSJesse Barnes 		    __field(int, plane)
290e5510facSJesse Barnes 		    __field(struct drm_gem_object *, obj)
291e5510facSJesse Barnes 		    ),
292e5510facSJesse Barnes 
293e5510facSJesse Barnes 	    TP_fast_assign(
294e5510facSJesse Barnes 		    __entry->plane = plane;
295e5510facSJesse Barnes 		    __entry->obj = obj;
296e5510facSJesse Barnes 		    ),
297e5510facSJesse Barnes 
298e5510facSJesse Barnes 	    TP_printk("plane=%d, obj=%p", __entry->plane, __entry->obj)
299e5510facSJesse Barnes );
300e5510facSJesse Barnes 
3011c5d22f7SChris Wilson #endif /* _I915_TRACE_H_ */
3021c5d22f7SChris Wilson 
3031c5d22f7SChris Wilson /* This part must be outside protection */
3041c5d22f7SChris Wilson #undef TRACE_INCLUDE_PATH
305a7c54278SPeter Clifton #define TRACE_INCLUDE_PATH .
3061c5d22f7SChris Wilson #include <trace/define_trace.h>
307