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 3607fe0b12SBen Widawsky TRACE_EVENT(i915_vma_bind, 371ec9e26dSDaniel Vetter TP_PROTO(struct i915_vma *vma, unsigned flags), 381ec9e26dSDaniel Vetter TP_ARGS(vma, flags), 391c5d22f7SChris Wilson 401c5d22f7SChris Wilson TP_STRUCT__entry( 4105394f39SChris Wilson __field(struct drm_i915_gem_object *, obj) 4207fe0b12SBen Widawsky __field(struct i915_address_space *, vm) 43db53a302SChris Wilson __field(u32, offset) 44db53a302SChris Wilson __field(u32, size) 451ec9e26dSDaniel Vetter __field(unsigned, flags) 461c5d22f7SChris Wilson ), 471c5d22f7SChris Wilson 481c5d22f7SChris Wilson TP_fast_assign( 4907fe0b12SBen Widawsky __entry->obj = vma->obj; 5007fe0b12SBen Widawsky __entry->vm = vma->vm; 5107fe0b12SBen Widawsky __entry->offset = vma->node.start; 5207fe0b12SBen Widawsky __entry->size = vma->node.size; 531ec9e26dSDaniel Vetter __entry->flags = flags; 541c5d22f7SChris Wilson ), 551c5d22f7SChris Wilson 5607fe0b12SBen Widawsky TP_printk("obj=%p, offset=%08x size=%x%s vm=%p", 57db53a302SChris Wilson __entry->obj, __entry->offset, __entry->size, 581ec9e26dSDaniel Vetter __entry->flags & PIN_MAPPABLE ? ", mappable" : "", 5907fe0b12SBen Widawsky __entry->vm) 601c5d22f7SChris Wilson ); 611c5d22f7SChris Wilson 6207fe0b12SBen Widawsky TRACE_EVENT(i915_vma_unbind, 6307fe0b12SBen Widawsky TP_PROTO(struct i915_vma *vma), 6407fe0b12SBen Widawsky TP_ARGS(vma), 65db53a302SChris Wilson 66db53a302SChris Wilson TP_STRUCT__entry( 67db53a302SChris Wilson __field(struct drm_i915_gem_object *, obj) 6807fe0b12SBen Widawsky __field(struct i915_address_space *, vm) 69db53a302SChris Wilson __field(u32, offset) 70db53a302SChris Wilson __field(u32, size) 71db53a302SChris Wilson ), 72db53a302SChris Wilson 73db53a302SChris Wilson TP_fast_assign( 7407fe0b12SBen Widawsky __entry->obj = vma->obj; 7507fe0b12SBen Widawsky __entry->vm = vma->vm; 7607fe0b12SBen Widawsky __entry->offset = vma->node.start; 7707fe0b12SBen Widawsky __entry->size = vma->node.size; 78db53a302SChris Wilson ), 79db53a302SChris Wilson 8007fe0b12SBen Widawsky TP_printk("obj=%p, offset=%08x size=%x vm=%p", 8107fe0b12SBen Widawsky __entry->obj, __entry->offset, __entry->size, __entry->vm) 82db53a302SChris Wilson ); 83db53a302SChris Wilson 841c5d22f7SChris Wilson TRACE_EVENT(i915_gem_object_change_domain, 85db53a302SChris Wilson TP_PROTO(struct drm_i915_gem_object *obj, u32 old_read, u32 old_write), 86db53a302SChris Wilson TP_ARGS(obj, old_read, old_write), 871c5d22f7SChris Wilson 881c5d22f7SChris Wilson TP_STRUCT__entry( 8905394f39SChris Wilson __field(struct drm_i915_gem_object *, obj) 901c5d22f7SChris Wilson __field(u32, read_domains) 911c5d22f7SChris Wilson __field(u32, write_domain) 921c5d22f7SChris Wilson ), 931c5d22f7SChris Wilson 941c5d22f7SChris Wilson TP_fast_assign( 951c5d22f7SChris Wilson __entry->obj = obj; 96db53a302SChris Wilson __entry->read_domains = obj->base.read_domains | (old_read << 16); 97db53a302SChris Wilson __entry->write_domain = obj->base.write_domain | (old_write << 16); 981c5d22f7SChris Wilson ), 991c5d22f7SChris Wilson 100db53a302SChris Wilson TP_printk("obj=%p, read=%02x=>%02x, write=%02x=>%02x", 1011c5d22f7SChris Wilson __entry->obj, 102db53a302SChris Wilson __entry->read_domains >> 16, 103db53a302SChris Wilson __entry->read_domains & 0xffff, 104db53a302SChris Wilson __entry->write_domain >> 16, 105db53a302SChris Wilson __entry->write_domain & 0xffff) 106db53a302SChris Wilson ); 107db53a302SChris Wilson 108db53a302SChris Wilson TRACE_EVENT(i915_gem_object_pwrite, 109db53a302SChris Wilson TP_PROTO(struct drm_i915_gem_object *obj, u32 offset, u32 len), 110db53a302SChris Wilson TP_ARGS(obj, offset, len), 111db53a302SChris Wilson 112db53a302SChris Wilson TP_STRUCT__entry( 113db53a302SChris Wilson __field(struct drm_i915_gem_object *, obj) 114db53a302SChris Wilson __field(u32, offset) 115db53a302SChris Wilson __field(u32, len) 116db53a302SChris Wilson ), 117db53a302SChris Wilson 118db53a302SChris Wilson TP_fast_assign( 119db53a302SChris Wilson __entry->obj = obj; 120db53a302SChris Wilson __entry->offset = offset; 121db53a302SChris Wilson __entry->len = len; 122db53a302SChris Wilson ), 123db53a302SChris Wilson 124db53a302SChris Wilson TP_printk("obj=%p, offset=%u, len=%u", 125db53a302SChris Wilson __entry->obj, __entry->offset, __entry->len) 126db53a302SChris Wilson ); 127db53a302SChris Wilson 128db53a302SChris Wilson TRACE_EVENT(i915_gem_object_pread, 129db53a302SChris Wilson TP_PROTO(struct drm_i915_gem_object *obj, u32 offset, u32 len), 130db53a302SChris Wilson TP_ARGS(obj, offset, len), 131db53a302SChris Wilson 132db53a302SChris Wilson TP_STRUCT__entry( 133db53a302SChris Wilson __field(struct drm_i915_gem_object *, obj) 134db53a302SChris Wilson __field(u32, offset) 135db53a302SChris Wilson __field(u32, len) 136db53a302SChris Wilson ), 137db53a302SChris Wilson 138db53a302SChris Wilson TP_fast_assign( 139db53a302SChris Wilson __entry->obj = obj; 140db53a302SChris Wilson __entry->offset = offset; 141db53a302SChris Wilson __entry->len = len; 142db53a302SChris Wilson ), 143db53a302SChris Wilson 144db53a302SChris Wilson TP_printk("obj=%p, offset=%u, len=%u", 145db53a302SChris Wilson __entry->obj, __entry->offset, __entry->len) 146db53a302SChris Wilson ); 147db53a302SChris Wilson 148db53a302SChris Wilson TRACE_EVENT(i915_gem_object_fault, 149db53a302SChris Wilson TP_PROTO(struct drm_i915_gem_object *obj, u32 index, bool gtt, bool write), 150db53a302SChris Wilson TP_ARGS(obj, index, gtt, write), 151db53a302SChris Wilson 152db53a302SChris Wilson TP_STRUCT__entry( 153db53a302SChris Wilson __field(struct drm_i915_gem_object *, obj) 154db53a302SChris Wilson __field(u32, index) 155db53a302SChris Wilson __field(bool, gtt) 156db53a302SChris Wilson __field(bool, write) 157db53a302SChris Wilson ), 158db53a302SChris Wilson 159db53a302SChris Wilson TP_fast_assign( 160db53a302SChris Wilson __entry->obj = obj; 161db53a302SChris Wilson __entry->index = index; 162db53a302SChris Wilson __entry->gtt = gtt; 163db53a302SChris Wilson __entry->write = write; 164db53a302SChris Wilson ), 165db53a302SChris Wilson 166db53a302SChris Wilson TP_printk("obj=%p, %s index=%u %s", 167db53a302SChris Wilson __entry->obj, 168db53a302SChris Wilson __entry->gtt ? "GTT" : "CPU", 169db53a302SChris Wilson __entry->index, 170db53a302SChris Wilson __entry->write ? ", writable" : "") 1711c5d22f7SChris Wilson ); 1721c5d22f7SChris Wilson 173903cf20cSLi Zefan DECLARE_EVENT_CLASS(i915_gem_object, 17405394f39SChris Wilson TP_PROTO(struct drm_i915_gem_object *obj), 1751c5d22f7SChris Wilson TP_ARGS(obj), 1761c5d22f7SChris Wilson 1771c5d22f7SChris Wilson TP_STRUCT__entry( 17805394f39SChris Wilson __field(struct drm_i915_gem_object *, obj) 1791c5d22f7SChris Wilson ), 1801c5d22f7SChris Wilson 1811c5d22f7SChris Wilson TP_fast_assign( 1821c5d22f7SChris Wilson __entry->obj = obj; 1831c5d22f7SChris Wilson ), 1841c5d22f7SChris Wilson 1851c5d22f7SChris Wilson TP_printk("obj=%p", __entry->obj) 1861c5d22f7SChris Wilson ); 1871c5d22f7SChris Wilson 188f41275e8SLi Zefan DEFINE_EVENT(i915_gem_object, i915_gem_object_clflush, 18905394f39SChris Wilson TP_PROTO(struct drm_i915_gem_object *obj), 190903cf20cSLi Zefan TP_ARGS(obj) 191903cf20cSLi Zefan ); 1921c5d22f7SChris Wilson 193903cf20cSLi Zefan DEFINE_EVENT(i915_gem_object, i915_gem_object_destroy, 19405394f39SChris Wilson TP_PROTO(struct drm_i915_gem_object *obj), 195903cf20cSLi Zefan TP_ARGS(obj) 1961c5d22f7SChris Wilson ); 1971c5d22f7SChris Wilson 198db53a302SChris Wilson TRACE_EVENT(i915_gem_evict, 1991ec9e26dSDaniel Vetter TP_PROTO(struct drm_device *dev, u32 size, u32 align, unsigned flags), 2001ec9e26dSDaniel Vetter TP_ARGS(dev, size, align, flags), 2011c5d22f7SChris Wilson 2021c5d22f7SChris Wilson TP_STRUCT__entry( 2034f49be54SChris Wilson __field(u32, dev) 204db53a302SChris Wilson __field(u32, size) 205db53a302SChris Wilson __field(u32, align) 2061ec9e26dSDaniel Vetter __field(unsigned, flags) 2071c5d22f7SChris Wilson ), 2081c5d22f7SChris Wilson 2091c5d22f7SChris Wilson TP_fast_assign( 2104f49be54SChris Wilson __entry->dev = dev->primary->index; 211db53a302SChris Wilson __entry->size = size; 212db53a302SChris Wilson __entry->align = align; 2131ec9e26dSDaniel Vetter __entry->flags = flags; 2141c5d22f7SChris Wilson ), 2151c5d22f7SChris Wilson 216db53a302SChris Wilson TP_printk("dev=%d, size=%d, align=%d %s", 217db53a302SChris Wilson __entry->dev, __entry->size, __entry->align, 2181ec9e26dSDaniel Vetter __entry->flags & PIN_MAPPABLE ? ", mappable" : "") 2191c5d22f7SChris Wilson ); 2201c5d22f7SChris Wilson 221db53a302SChris Wilson TRACE_EVENT(i915_gem_evict_everything, 2226c085a72SChris Wilson TP_PROTO(struct drm_device *dev), 2236c085a72SChris Wilson TP_ARGS(dev), 2241c5d22f7SChris Wilson 2251c5d22f7SChris Wilson TP_STRUCT__entry( 2264f49be54SChris Wilson __field(u32, dev) 2271c5d22f7SChris Wilson ), 2281c5d22f7SChris Wilson 2291c5d22f7SChris Wilson TP_fast_assign( 2304f49be54SChris Wilson __entry->dev = dev->primary->index; 2311c5d22f7SChris Wilson ), 2321c5d22f7SChris Wilson 2336c085a72SChris Wilson TP_printk("dev=%d", __entry->dev) 234db53a302SChris Wilson ); 235db53a302SChris Wilson 236bcccff84SBen Widawsky TRACE_EVENT(i915_gem_evict_vm, 237bcccff84SBen Widawsky TP_PROTO(struct i915_address_space *vm), 238bcccff84SBen Widawsky TP_ARGS(vm), 239bcccff84SBen Widawsky 240bcccff84SBen Widawsky TP_STRUCT__entry( 2419297ebf2SSteven Rostedt __field(u32, dev) 242bcccff84SBen Widawsky __field(struct i915_address_space *, vm) 243bcccff84SBen Widawsky ), 244bcccff84SBen Widawsky 245bcccff84SBen Widawsky TP_fast_assign( 2469297ebf2SSteven Rostedt __entry->dev = vm->dev->primary->index; 247bcccff84SBen Widawsky __entry->vm = vm; 248bcccff84SBen Widawsky ), 249bcccff84SBen Widawsky 2509297ebf2SSteven Rostedt TP_printk("dev=%d, vm=%p", __entry->dev, __entry->vm) 251bcccff84SBen Widawsky ); 252bcccff84SBen Widawsky 253b52b89daSChris Wilson TRACE_EVENT(i915_gem_ring_sync_to, 254b52b89daSChris Wilson TP_PROTO(struct intel_ring_buffer *from, 255b52b89daSChris Wilson struct intel_ring_buffer *to, 256b52b89daSChris Wilson u32 seqno), 257b52b89daSChris Wilson TP_ARGS(from, to, seqno), 258b52b89daSChris Wilson 259b52b89daSChris Wilson TP_STRUCT__entry( 260b52b89daSChris Wilson __field(u32, dev) 261b52b89daSChris Wilson __field(u32, sync_from) 262b52b89daSChris Wilson __field(u32, sync_to) 263b52b89daSChris Wilson __field(u32, seqno) 264b52b89daSChris Wilson ), 265b52b89daSChris Wilson 266b52b89daSChris Wilson TP_fast_assign( 267b52b89daSChris Wilson __entry->dev = from->dev->primary->index; 268b52b89daSChris Wilson __entry->sync_from = from->id; 269b52b89daSChris Wilson __entry->sync_to = to->id; 270b52b89daSChris Wilson __entry->seqno = seqno; 271b52b89daSChris Wilson ), 272b52b89daSChris Wilson 273b52b89daSChris Wilson TP_printk("dev=%u, sync-from=%u, sync-to=%u, seqno=%u", 274b52b89daSChris Wilson __entry->dev, 275b52b89daSChris Wilson __entry->sync_from, __entry->sync_to, 276b52b89daSChris Wilson __entry->seqno) 277b52b89daSChris Wilson ); 278b52b89daSChris Wilson 279db53a302SChris Wilson TRACE_EVENT(i915_gem_ring_dispatch, 280d7d4eeddSChris Wilson TP_PROTO(struct intel_ring_buffer *ring, u32 seqno, u32 flags), 281d7d4eeddSChris Wilson TP_ARGS(ring, seqno, flags), 282db53a302SChris Wilson 283db53a302SChris Wilson TP_STRUCT__entry( 284db53a302SChris Wilson __field(u32, dev) 285db53a302SChris Wilson __field(u32, ring) 286db53a302SChris Wilson __field(u32, seqno) 287d7d4eeddSChris Wilson __field(u32, flags) 288db53a302SChris Wilson ), 289db53a302SChris Wilson 290db53a302SChris Wilson TP_fast_assign( 291db53a302SChris Wilson __entry->dev = ring->dev->primary->index; 292db53a302SChris Wilson __entry->ring = ring->id; 293db53a302SChris Wilson __entry->seqno = seqno; 294d7d4eeddSChris Wilson __entry->flags = flags; 295db53a302SChris Wilson i915_trace_irq_get(ring, seqno); 296db53a302SChris Wilson ), 297db53a302SChris Wilson 298d7d4eeddSChris Wilson TP_printk("dev=%u, ring=%u, seqno=%u, flags=%x", 299d7d4eeddSChris Wilson __entry->dev, __entry->ring, __entry->seqno, __entry->flags) 300db53a302SChris Wilson ); 301db53a302SChris Wilson 302db53a302SChris Wilson TRACE_EVENT(i915_gem_ring_flush, 303db53a302SChris Wilson TP_PROTO(struct intel_ring_buffer *ring, u32 invalidate, u32 flush), 304db53a302SChris Wilson TP_ARGS(ring, invalidate, flush), 305db53a302SChris Wilson 306db53a302SChris Wilson TP_STRUCT__entry( 307db53a302SChris Wilson __field(u32, dev) 308db53a302SChris Wilson __field(u32, ring) 309db53a302SChris Wilson __field(u32, invalidate) 310db53a302SChris Wilson __field(u32, flush) 311db53a302SChris Wilson ), 312db53a302SChris Wilson 313db53a302SChris Wilson TP_fast_assign( 314db53a302SChris Wilson __entry->dev = ring->dev->primary->index; 315db53a302SChris Wilson __entry->ring = ring->id; 316db53a302SChris Wilson __entry->invalidate = invalidate; 317db53a302SChris Wilson __entry->flush = flush; 318db53a302SChris Wilson ), 319db53a302SChris Wilson 320db53a302SChris Wilson TP_printk("dev=%u, ring=%x, invalidate=%04x, flush=%04x", 321db53a302SChris Wilson __entry->dev, __entry->ring, 322db53a302SChris Wilson __entry->invalidate, __entry->flush) 3231c5d22f7SChris Wilson ); 3241c5d22f7SChris Wilson 325903cf20cSLi Zefan DECLARE_EVENT_CLASS(i915_gem_request, 326db53a302SChris Wilson TP_PROTO(struct intel_ring_buffer *ring, u32 seqno), 327db53a302SChris Wilson TP_ARGS(ring, seqno), 3281c5d22f7SChris Wilson 3291c5d22f7SChris Wilson TP_STRUCT__entry( 3304f49be54SChris Wilson __field(u32, dev) 331db53a302SChris Wilson __field(u32, ring) 3321c5d22f7SChris Wilson __field(u32, seqno) 3331c5d22f7SChris Wilson ), 3341c5d22f7SChris Wilson 3351c5d22f7SChris Wilson TP_fast_assign( 336db53a302SChris Wilson __entry->dev = ring->dev->primary->index; 337db53a302SChris Wilson __entry->ring = ring->id; 3381c5d22f7SChris Wilson __entry->seqno = seqno; 3391c5d22f7SChris Wilson ), 3401c5d22f7SChris Wilson 341db53a302SChris Wilson TP_printk("dev=%u, ring=%u, seqno=%u", 342db53a302SChris Wilson __entry->dev, __entry->ring, __entry->seqno) 343db53a302SChris Wilson ); 344db53a302SChris Wilson 345db53a302SChris Wilson DEFINE_EVENT(i915_gem_request, i915_gem_request_add, 346db53a302SChris Wilson TP_PROTO(struct intel_ring_buffer *ring, u32 seqno), 347db53a302SChris Wilson TP_ARGS(ring, seqno) 3481c5d22f7SChris Wilson ); 3491c5d22f7SChris Wilson 350814e9b57SChris Wilson TRACE_EVENT(i915_gem_request_complete, 351814e9b57SChris Wilson TP_PROTO(struct intel_ring_buffer *ring), 352814e9b57SChris Wilson TP_ARGS(ring), 353814e9b57SChris Wilson 354814e9b57SChris Wilson TP_STRUCT__entry( 355814e9b57SChris Wilson __field(u32, dev) 356814e9b57SChris Wilson __field(u32, ring) 357814e9b57SChris Wilson __field(u32, seqno) 358814e9b57SChris Wilson ), 359814e9b57SChris Wilson 360814e9b57SChris Wilson TP_fast_assign( 361814e9b57SChris Wilson __entry->dev = ring->dev->primary->index; 362814e9b57SChris Wilson __entry->ring = ring->id; 363814e9b57SChris Wilson __entry->seqno = ring->get_seqno(ring, false); 364814e9b57SChris Wilson ), 365814e9b57SChris Wilson 366814e9b57SChris Wilson TP_printk("dev=%u, ring=%u, seqno=%u", 367814e9b57SChris Wilson __entry->dev, __entry->ring, __entry->seqno) 3681c5d22f7SChris Wilson ); 3691c5d22f7SChris Wilson 370903cf20cSLi Zefan DEFINE_EVENT(i915_gem_request, i915_gem_request_retire, 371db53a302SChris Wilson TP_PROTO(struct intel_ring_buffer *ring, u32 seqno), 372db53a302SChris Wilson TP_ARGS(ring, seqno) 3731c5d22f7SChris Wilson ); 3741c5d22f7SChris Wilson 375f3fd3768SBen Widawsky TRACE_EVENT(i915_gem_request_wait_begin, 376db53a302SChris Wilson TP_PROTO(struct intel_ring_buffer *ring, u32 seqno), 377f3fd3768SBen Widawsky TP_ARGS(ring, seqno), 378f3fd3768SBen Widawsky 379f3fd3768SBen Widawsky TP_STRUCT__entry( 380f3fd3768SBen Widawsky __field(u32, dev) 381f3fd3768SBen Widawsky __field(u32, ring) 382f3fd3768SBen Widawsky __field(u32, seqno) 383f3fd3768SBen Widawsky __field(bool, blocking) 384f3fd3768SBen Widawsky ), 385f3fd3768SBen Widawsky 386f3fd3768SBen Widawsky /* NB: the blocking information is racy since mutex_is_locked 387f3fd3768SBen Widawsky * doesn't check that the current thread holds the lock. The only 388f3fd3768SBen Widawsky * other option would be to pass the boolean information of whether 389f3fd3768SBen Widawsky * or not the class was blocking down through the stack which is 390f3fd3768SBen Widawsky * less desirable. 391f3fd3768SBen Widawsky */ 392f3fd3768SBen Widawsky TP_fast_assign( 393f3fd3768SBen Widawsky __entry->dev = ring->dev->primary->index; 394f3fd3768SBen Widawsky __entry->ring = ring->id; 395f3fd3768SBen Widawsky __entry->seqno = seqno; 396f3fd3768SBen Widawsky __entry->blocking = mutex_is_locked(&ring->dev->struct_mutex); 397f3fd3768SBen Widawsky ), 398f3fd3768SBen Widawsky 399f3fd3768SBen Widawsky TP_printk("dev=%u, ring=%u, seqno=%u, blocking=%s", 400f3fd3768SBen Widawsky __entry->dev, __entry->ring, __entry->seqno, 401f3fd3768SBen Widawsky __entry->blocking ? "yes (NB)" : "no") 4021c5d22f7SChris Wilson ); 4031c5d22f7SChris Wilson 404903cf20cSLi Zefan DEFINE_EVENT(i915_gem_request, i915_gem_request_wait_end, 405db53a302SChris Wilson TP_PROTO(struct intel_ring_buffer *ring, u32 seqno), 406db53a302SChris Wilson TP_ARGS(ring, seqno) 407903cf20cSLi Zefan ); 408903cf20cSLi Zefan 409903cf20cSLi Zefan DECLARE_EVENT_CLASS(i915_ring, 410db53a302SChris Wilson TP_PROTO(struct intel_ring_buffer *ring), 411db53a302SChris Wilson TP_ARGS(ring), 4121c5d22f7SChris Wilson 4131c5d22f7SChris Wilson TP_STRUCT__entry( 4144f49be54SChris Wilson __field(u32, dev) 415db53a302SChris Wilson __field(u32, ring) 4161c5d22f7SChris Wilson ), 4171c5d22f7SChris Wilson 4181c5d22f7SChris Wilson TP_fast_assign( 419db53a302SChris Wilson __entry->dev = ring->dev->primary->index; 420db53a302SChris Wilson __entry->ring = ring->id; 4211c5d22f7SChris Wilson ), 4221c5d22f7SChris Wilson 423db53a302SChris Wilson TP_printk("dev=%u, ring=%u", __entry->dev, __entry->ring) 4241c5d22f7SChris Wilson ); 4251c5d22f7SChris Wilson 426903cf20cSLi Zefan DEFINE_EVENT(i915_ring, i915_ring_wait_begin, 427db53a302SChris Wilson TP_PROTO(struct intel_ring_buffer *ring), 428db53a302SChris Wilson TP_ARGS(ring) 429903cf20cSLi Zefan ); 4301c5d22f7SChris Wilson 431903cf20cSLi Zefan DEFINE_EVENT(i915_ring, i915_ring_wait_end, 432db53a302SChris Wilson TP_PROTO(struct intel_ring_buffer *ring), 433db53a302SChris Wilson TP_ARGS(ring) 4341c5d22f7SChris Wilson ); 4351c5d22f7SChris Wilson 436e5510facSJesse Barnes TRACE_EVENT(i915_flip_request, 43705394f39SChris Wilson TP_PROTO(int plane, struct drm_i915_gem_object *obj), 438e5510facSJesse Barnes 439e5510facSJesse Barnes TP_ARGS(plane, obj), 440e5510facSJesse Barnes 441e5510facSJesse Barnes TP_STRUCT__entry( 442e5510facSJesse Barnes __field(int, plane) 44305394f39SChris Wilson __field(struct drm_i915_gem_object *, obj) 444e5510facSJesse Barnes ), 445e5510facSJesse Barnes 446e5510facSJesse Barnes TP_fast_assign( 447e5510facSJesse Barnes __entry->plane = plane; 448e5510facSJesse Barnes __entry->obj = obj; 449e5510facSJesse Barnes ), 450e5510facSJesse Barnes 451e5510facSJesse Barnes TP_printk("plane=%d, obj=%p", __entry->plane, __entry->obj) 452e5510facSJesse Barnes ); 453e5510facSJesse Barnes 454e5510facSJesse Barnes TRACE_EVENT(i915_flip_complete, 45505394f39SChris Wilson TP_PROTO(int plane, struct drm_i915_gem_object *obj), 456e5510facSJesse Barnes 457e5510facSJesse Barnes TP_ARGS(plane, obj), 458e5510facSJesse Barnes 459e5510facSJesse Barnes TP_STRUCT__entry( 460e5510facSJesse Barnes __field(int, plane) 46105394f39SChris Wilson __field(struct drm_i915_gem_object *, obj) 462e5510facSJesse Barnes ), 463e5510facSJesse Barnes 464e5510facSJesse Barnes TP_fast_assign( 465e5510facSJesse Barnes __entry->plane = plane; 466e5510facSJesse Barnes __entry->obj = obj; 467e5510facSJesse Barnes ), 468e5510facSJesse Barnes 469e5510facSJesse Barnes TP_printk("plane=%d, obj=%p", __entry->plane, __entry->obj) 470e5510facSJesse Barnes ); 471e5510facSJesse Barnes 472ed71f1b4SChris Wilson TRACE_EVENT_CONDITION(i915_reg_rw, 473ed71f1b4SChris Wilson TP_PROTO(bool write, u32 reg, u64 val, int len, bool trace), 474ba4f01a3SYuanhan Liu 475ed71f1b4SChris Wilson TP_ARGS(write, reg, val, len, trace), 476ed71f1b4SChris Wilson 477ed71f1b4SChris Wilson TP_CONDITION(trace), 478ba4f01a3SYuanhan Liu 479ba4f01a3SYuanhan Liu TP_STRUCT__entry( 480db53a302SChris Wilson __field(u64, val) 481db53a302SChris Wilson __field(u32, reg) 482db53a302SChris Wilson __field(u16, write) 483db53a302SChris Wilson __field(u16, len) 484ba4f01a3SYuanhan Liu ), 485ba4f01a3SYuanhan Liu 486ba4f01a3SYuanhan Liu TP_fast_assign( 487db53a302SChris Wilson __entry->val = (u64)val; 488ba4f01a3SYuanhan Liu __entry->reg = reg; 489db53a302SChris Wilson __entry->write = write; 490ba4f01a3SYuanhan Liu __entry->len = len; 491ba4f01a3SYuanhan Liu ), 492ba4f01a3SYuanhan Liu 493db53a302SChris Wilson TP_printk("%s reg=0x%x, len=%d, val=(0x%x, 0x%x)", 494db53a302SChris Wilson __entry->write ? "write" : "read", 495db53a302SChris Wilson __entry->reg, __entry->len, 496db53a302SChris Wilson (u32)(__entry->val & 0xffffffff), 497db53a302SChris Wilson (u32)(__entry->val >> 32)) 498ba4f01a3SYuanhan Liu ); 499ba4f01a3SYuanhan Liu 500be2cde9aSDaniel Vetter TRACE_EVENT(intel_gpu_freq_change, 501be2cde9aSDaniel Vetter TP_PROTO(u32 freq), 502be2cde9aSDaniel Vetter TP_ARGS(freq), 503be2cde9aSDaniel Vetter 504be2cde9aSDaniel Vetter TP_STRUCT__entry( 505be2cde9aSDaniel Vetter __field(u32, freq) 506be2cde9aSDaniel Vetter ), 507be2cde9aSDaniel Vetter 508be2cde9aSDaniel Vetter TP_fast_assign( 509be2cde9aSDaniel Vetter __entry->freq = freq; 510be2cde9aSDaniel Vetter ), 511be2cde9aSDaniel Vetter 512be2cde9aSDaniel Vetter TP_printk("new_freq=%u", __entry->freq) 513be2cde9aSDaniel Vetter ); 514be2cde9aSDaniel Vetter 5151c5d22f7SChris Wilson #endif /* _I915_TRACE_H_ */ 5161c5d22f7SChris Wilson 5171c5d22f7SChris Wilson /* This part must be outside protection */ 5181c5d22f7SChris Wilson #undef TRACE_INCLUDE_PATH 519a7c54278SPeter Clifton #define TRACE_INCLUDE_PATH . 5201c5d22f7SChris Wilson #include <trace/define_trace.h> 521