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