xref: /openbmc/linux/drivers/gpu/drm/i915/i915_trace.h (revision ec57d260)
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 
38ec57d260SDaniel Vetter 	    TP_PROTO(struct drm_gem_object *obj, u32 gtt_offset, bool mappable),
391c5d22f7SChris Wilson 
40ec57d260SDaniel Vetter 	    TP_ARGS(obj, gtt_offset, mappable),
411c5d22f7SChris Wilson 
421c5d22f7SChris Wilson 	    TP_STRUCT__entry(
431c5d22f7SChris Wilson 			     __field(struct drm_gem_object *, obj)
441c5d22f7SChris Wilson 			     __field(u32, gtt_offset)
45ec57d260SDaniel Vetter 			     __field(bool, mappable)
461c5d22f7SChris Wilson 			     ),
471c5d22f7SChris Wilson 
481c5d22f7SChris Wilson 	    TP_fast_assign(
491c5d22f7SChris Wilson 			   __entry->obj = obj;
501c5d22f7SChris Wilson 			   __entry->gtt_offset = gtt_offset;
51ec57d260SDaniel Vetter 			   __entry->mappable = mappable;
521c5d22f7SChris Wilson 			   ),
531c5d22f7SChris Wilson 
54ec57d260SDaniel Vetter 	    TP_printk("obj=%p, gtt_offset=%08x%s",
55ec57d260SDaniel Vetter 		      __entry->obj, __entry->gtt_offset,
56ec57d260SDaniel Vetter 		      __entry->mappable ? ", mappable" : "")
571c5d22f7SChris Wilson );
581c5d22f7SChris Wilson 
591c5d22f7SChris Wilson TRACE_EVENT(i915_gem_object_change_domain,
601c5d22f7SChris Wilson 
611c5d22f7SChris Wilson 	    TP_PROTO(struct drm_gem_object *obj, uint32_t old_read_domains, uint32_t old_write_domain),
621c5d22f7SChris Wilson 
631c5d22f7SChris Wilson 	    TP_ARGS(obj, old_read_domains, old_write_domain),
641c5d22f7SChris Wilson 
651c5d22f7SChris Wilson 	    TP_STRUCT__entry(
661c5d22f7SChris Wilson 			     __field(struct drm_gem_object *, obj)
671c5d22f7SChris Wilson 			     __field(u32, read_domains)
681c5d22f7SChris Wilson 			     __field(u32, write_domain)
691c5d22f7SChris Wilson 			     ),
701c5d22f7SChris Wilson 
711c5d22f7SChris Wilson 	    TP_fast_assign(
721c5d22f7SChris Wilson 			   __entry->obj = obj;
731c5d22f7SChris Wilson 			   __entry->read_domains = obj->read_domains | (old_read_domains << 16);
741c5d22f7SChris Wilson 			   __entry->write_domain = obj->write_domain | (old_write_domain << 16);
751c5d22f7SChris Wilson 			   ),
761c5d22f7SChris Wilson 
771c5d22f7SChris Wilson 	    TP_printk("obj=%p, read=%04x, write=%04x",
781c5d22f7SChris Wilson 		      __entry->obj,
791c5d22f7SChris Wilson 		      __entry->read_domains, __entry->write_domain)
801c5d22f7SChris Wilson );
811c5d22f7SChris Wilson 
821c5d22f7SChris Wilson TRACE_EVENT(i915_gem_object_get_fence,
831c5d22f7SChris Wilson 
841c5d22f7SChris Wilson 	    TP_PROTO(struct drm_gem_object *obj, int fence, int tiling_mode),
851c5d22f7SChris Wilson 
861c5d22f7SChris Wilson 	    TP_ARGS(obj, fence, tiling_mode),
871c5d22f7SChris Wilson 
881c5d22f7SChris Wilson 	    TP_STRUCT__entry(
891c5d22f7SChris Wilson 			     __field(struct drm_gem_object *, obj)
901c5d22f7SChris Wilson 			     __field(int, fence)
911c5d22f7SChris Wilson 			     __field(int, tiling_mode)
921c5d22f7SChris Wilson 			     ),
931c5d22f7SChris Wilson 
941c5d22f7SChris Wilson 	    TP_fast_assign(
951c5d22f7SChris Wilson 			   __entry->obj = obj;
961c5d22f7SChris Wilson 			   __entry->fence = fence;
971c5d22f7SChris Wilson 			   __entry->tiling_mode = tiling_mode;
981c5d22f7SChris Wilson 			   ),
991c5d22f7SChris Wilson 
1001c5d22f7SChris Wilson 	    TP_printk("obj=%p, fence=%d, tiling=%d",
1011c5d22f7SChris Wilson 		      __entry->obj, __entry->fence, __entry->tiling_mode)
1021c5d22f7SChris Wilson );
1031c5d22f7SChris Wilson 
104903cf20cSLi Zefan DECLARE_EVENT_CLASS(i915_gem_object,
1051c5d22f7SChris Wilson 
1061c5d22f7SChris Wilson 	    TP_PROTO(struct drm_gem_object *obj),
1071c5d22f7SChris Wilson 
1081c5d22f7SChris Wilson 	    TP_ARGS(obj),
1091c5d22f7SChris Wilson 
1101c5d22f7SChris Wilson 	    TP_STRUCT__entry(
1111c5d22f7SChris Wilson 			     __field(struct drm_gem_object *, obj)
1121c5d22f7SChris Wilson 			     ),
1131c5d22f7SChris Wilson 
1141c5d22f7SChris Wilson 	    TP_fast_assign(
1151c5d22f7SChris Wilson 			   __entry->obj = obj;
1161c5d22f7SChris Wilson 			   ),
1171c5d22f7SChris Wilson 
1181c5d22f7SChris Wilson 	    TP_printk("obj=%p", __entry->obj)
1191c5d22f7SChris Wilson );
1201c5d22f7SChris Wilson 
121f41275e8SLi Zefan DEFINE_EVENT(i915_gem_object, i915_gem_object_clflush,
122f41275e8SLi Zefan 
123f41275e8SLi Zefan 	    TP_PROTO(struct drm_gem_object *obj),
124f41275e8SLi Zefan 
125f41275e8SLi Zefan 	    TP_ARGS(obj)
126f41275e8SLi Zefan );
127f41275e8SLi Zefan 
128903cf20cSLi Zefan DEFINE_EVENT(i915_gem_object, i915_gem_object_unbind,
1291c5d22f7SChris Wilson 
1301c5d22f7SChris Wilson 	    TP_PROTO(struct drm_gem_object *obj),
1311c5d22f7SChris Wilson 
132903cf20cSLi Zefan 	    TP_ARGS(obj)
133903cf20cSLi Zefan );
1341c5d22f7SChris Wilson 
135903cf20cSLi Zefan DEFINE_EVENT(i915_gem_object, i915_gem_object_destroy,
1361c5d22f7SChris Wilson 
137903cf20cSLi Zefan 	    TP_PROTO(struct drm_gem_object *obj),
1381c5d22f7SChris Wilson 
139903cf20cSLi Zefan 	    TP_ARGS(obj)
1401c5d22f7SChris Wilson );
1411c5d22f7SChris Wilson 
1421c5d22f7SChris Wilson /* batch tracing */
1431c5d22f7SChris Wilson 
1441c5d22f7SChris Wilson TRACE_EVENT(i915_gem_request_submit,
1451c5d22f7SChris Wilson 
1461c5d22f7SChris Wilson 	    TP_PROTO(struct drm_device *dev, u32 seqno),
1471c5d22f7SChris Wilson 
1481c5d22f7SChris Wilson 	    TP_ARGS(dev, seqno),
1491c5d22f7SChris Wilson 
1501c5d22f7SChris Wilson 	    TP_STRUCT__entry(
1514f49be54SChris Wilson 			     __field(u32, dev)
1521c5d22f7SChris Wilson 			     __field(u32, seqno)
1531c5d22f7SChris Wilson 			     ),
1541c5d22f7SChris Wilson 
1551c5d22f7SChris Wilson 	    TP_fast_assign(
1564f49be54SChris Wilson 			   __entry->dev = dev->primary->index;
1571c5d22f7SChris Wilson 			   __entry->seqno = seqno;
1589d34e5dbSChris Wilson 			   i915_trace_irq_get(dev, seqno);
1591c5d22f7SChris Wilson 			   ),
1601c5d22f7SChris Wilson 
1614f49be54SChris Wilson 	    TP_printk("dev=%u, seqno=%u", __entry->dev, __entry->seqno)
1621c5d22f7SChris Wilson );
1631c5d22f7SChris Wilson 
1641c5d22f7SChris Wilson TRACE_EVENT(i915_gem_request_flush,
1651c5d22f7SChris Wilson 
1661c5d22f7SChris Wilson 	    TP_PROTO(struct drm_device *dev, u32 seqno,
1671c5d22f7SChris Wilson 		     u32 flush_domains, u32 invalidate_domains),
1681c5d22f7SChris Wilson 
1691c5d22f7SChris Wilson 	    TP_ARGS(dev, seqno, flush_domains, invalidate_domains),
1701c5d22f7SChris Wilson 
1711c5d22f7SChris Wilson 	    TP_STRUCT__entry(
1724f49be54SChris Wilson 			     __field(u32, dev)
1731c5d22f7SChris Wilson 			     __field(u32, seqno)
1741c5d22f7SChris Wilson 			     __field(u32, flush_domains)
1751c5d22f7SChris Wilson 			     __field(u32, invalidate_domains)
1761c5d22f7SChris Wilson 			     ),
1771c5d22f7SChris Wilson 
1781c5d22f7SChris Wilson 	    TP_fast_assign(
1794f49be54SChris Wilson 			   __entry->dev = dev->primary->index;
1801c5d22f7SChris Wilson 			   __entry->seqno = seqno;
1811c5d22f7SChris Wilson 			   __entry->flush_domains = flush_domains;
1821c5d22f7SChris Wilson 			   __entry->invalidate_domains = invalidate_domains;
1831c5d22f7SChris Wilson 			   ),
1841c5d22f7SChris Wilson 
1854f49be54SChris Wilson 	    TP_printk("dev=%u, seqno=%u, flush=%04x, invalidate=%04x",
1861c5d22f7SChris Wilson 		      __entry->dev, __entry->seqno,
1871c5d22f7SChris Wilson 		      __entry->flush_domains, __entry->invalidate_domains)
1881c5d22f7SChris Wilson );
1891c5d22f7SChris Wilson 
190903cf20cSLi Zefan DECLARE_EVENT_CLASS(i915_gem_request,
1911c5d22f7SChris Wilson 
1921c5d22f7SChris Wilson 	    TP_PROTO(struct drm_device *dev, u32 seqno),
1931c5d22f7SChris Wilson 
1941c5d22f7SChris Wilson 	    TP_ARGS(dev, seqno),
1951c5d22f7SChris Wilson 
1961c5d22f7SChris Wilson 	    TP_STRUCT__entry(
1974f49be54SChris Wilson 			     __field(u32, dev)
1981c5d22f7SChris Wilson 			     __field(u32, seqno)
1991c5d22f7SChris Wilson 			     ),
2001c5d22f7SChris Wilson 
2011c5d22f7SChris Wilson 	    TP_fast_assign(
2024f49be54SChris Wilson 			   __entry->dev = dev->primary->index;
2031c5d22f7SChris Wilson 			   __entry->seqno = seqno;
2041c5d22f7SChris Wilson 			   ),
2051c5d22f7SChris Wilson 
2064f49be54SChris Wilson 	    TP_printk("dev=%u, seqno=%u", __entry->dev, __entry->seqno)
2071c5d22f7SChris Wilson );
2081c5d22f7SChris Wilson 
209903cf20cSLi Zefan DEFINE_EVENT(i915_gem_request, i915_gem_request_complete,
2101c5d22f7SChris Wilson 
2111c5d22f7SChris Wilson 	    TP_PROTO(struct drm_device *dev, u32 seqno),
2121c5d22f7SChris Wilson 
213903cf20cSLi Zefan 	    TP_ARGS(dev, seqno)
2141c5d22f7SChris Wilson );
2151c5d22f7SChris Wilson 
216903cf20cSLi Zefan DEFINE_EVENT(i915_gem_request, i915_gem_request_retire,
2171c5d22f7SChris Wilson 
2181c5d22f7SChris Wilson 	    TP_PROTO(struct drm_device *dev, u32 seqno),
2191c5d22f7SChris Wilson 
220903cf20cSLi Zefan 	    TP_ARGS(dev, seqno)
2211c5d22f7SChris Wilson );
2221c5d22f7SChris Wilson 
223903cf20cSLi Zefan DEFINE_EVENT(i915_gem_request, i915_gem_request_wait_begin,
2241c5d22f7SChris Wilson 
2251c5d22f7SChris Wilson 	    TP_PROTO(struct drm_device *dev, u32 seqno),
2261c5d22f7SChris Wilson 
227903cf20cSLi Zefan 	    TP_ARGS(dev, seqno)
2281c5d22f7SChris Wilson );
2291c5d22f7SChris Wilson 
230903cf20cSLi Zefan DEFINE_EVENT(i915_gem_request, i915_gem_request_wait_end,
231903cf20cSLi Zefan 
232903cf20cSLi Zefan 	    TP_PROTO(struct drm_device *dev, u32 seqno),
233903cf20cSLi Zefan 
234903cf20cSLi Zefan 	    TP_ARGS(dev, seqno)
235903cf20cSLi Zefan );
236903cf20cSLi Zefan 
237903cf20cSLi Zefan DECLARE_EVENT_CLASS(i915_ring,
2381c5d22f7SChris Wilson 
2391c5d22f7SChris Wilson 	    TP_PROTO(struct drm_device *dev),
2401c5d22f7SChris Wilson 
2411c5d22f7SChris Wilson 	    TP_ARGS(dev),
2421c5d22f7SChris Wilson 
2431c5d22f7SChris Wilson 	    TP_STRUCT__entry(
2444f49be54SChris Wilson 			     __field(u32, dev)
2451c5d22f7SChris Wilson 			     ),
2461c5d22f7SChris Wilson 
2471c5d22f7SChris Wilson 	    TP_fast_assign(
2484f49be54SChris Wilson 			   __entry->dev = dev->primary->index;
2491c5d22f7SChris Wilson 			   ),
2501c5d22f7SChris Wilson 
2514f49be54SChris Wilson 	    TP_printk("dev=%u", __entry->dev)
2521c5d22f7SChris Wilson );
2531c5d22f7SChris Wilson 
254903cf20cSLi Zefan DEFINE_EVENT(i915_ring, i915_ring_wait_begin,
2551c5d22f7SChris Wilson 
2561c5d22f7SChris Wilson 	    TP_PROTO(struct drm_device *dev),
2571c5d22f7SChris Wilson 
258903cf20cSLi Zefan 	    TP_ARGS(dev)
259903cf20cSLi Zefan );
2601c5d22f7SChris Wilson 
261903cf20cSLi Zefan DEFINE_EVENT(i915_ring, i915_ring_wait_end,
2621c5d22f7SChris Wilson 
263903cf20cSLi Zefan 	    TP_PROTO(struct drm_device *dev),
2641c5d22f7SChris Wilson 
265903cf20cSLi Zefan 	    TP_ARGS(dev)
2661c5d22f7SChris Wilson );
2671c5d22f7SChris Wilson 
268e5510facSJesse Barnes TRACE_EVENT(i915_flip_request,
269e5510facSJesse Barnes 	    TP_PROTO(int plane, struct drm_gem_object *obj),
270e5510facSJesse Barnes 
271e5510facSJesse Barnes 	    TP_ARGS(plane, obj),
272e5510facSJesse Barnes 
273e5510facSJesse Barnes 	    TP_STRUCT__entry(
274e5510facSJesse Barnes 		    __field(int, plane)
275e5510facSJesse Barnes 		    __field(struct drm_gem_object *, obj)
276e5510facSJesse Barnes 		    ),
277e5510facSJesse Barnes 
278e5510facSJesse Barnes 	    TP_fast_assign(
279e5510facSJesse Barnes 		    __entry->plane = plane;
280e5510facSJesse Barnes 		    __entry->obj = obj;
281e5510facSJesse Barnes 		    ),
282e5510facSJesse Barnes 
283e5510facSJesse Barnes 	    TP_printk("plane=%d, obj=%p", __entry->plane, __entry->obj)
284e5510facSJesse Barnes );
285e5510facSJesse Barnes 
286e5510facSJesse Barnes TRACE_EVENT(i915_flip_complete,
287e5510facSJesse Barnes 	    TP_PROTO(int plane, struct drm_gem_object *obj),
288e5510facSJesse Barnes 
289e5510facSJesse Barnes 	    TP_ARGS(plane, obj),
290e5510facSJesse Barnes 
291e5510facSJesse Barnes 	    TP_STRUCT__entry(
292e5510facSJesse Barnes 		    __field(int, plane)
293e5510facSJesse Barnes 		    __field(struct drm_gem_object *, obj)
294e5510facSJesse Barnes 		    ),
295e5510facSJesse Barnes 
296e5510facSJesse Barnes 	    TP_fast_assign(
297e5510facSJesse Barnes 		    __entry->plane = plane;
298e5510facSJesse Barnes 		    __entry->obj = obj;
299e5510facSJesse Barnes 		    ),
300e5510facSJesse Barnes 
301e5510facSJesse Barnes 	    TP_printk("plane=%d, obj=%p", __entry->plane, __entry->obj)
302e5510facSJesse Barnes );
303e5510facSJesse Barnes 
3041c5d22f7SChris Wilson #endif /* _I915_TRACE_H_ */
3051c5d22f7SChris Wilson 
3061c5d22f7SChris Wilson /* This part must be outside protection */
3071c5d22f7SChris Wilson #undef TRACE_INCLUDE_PATH
308a7c54278SPeter Clifton #define TRACE_INCLUDE_PATH .
3091c5d22f7SChris Wilson #include <trace/define_trace.h>
310