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