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