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, 3707fe0b12SBen Widawsky TP_PROTO(struct i915_vma *vma, bool mappable), 3807fe0b12SBen Widawsky TP_ARGS(vma, mappable), 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) 45ec57d260SDaniel Vetter __field(bool, mappable) 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; 53ec57d260SDaniel Vetter __entry->mappable = mappable; 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, 5807fe0b12SBen Widawsky __entry->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, 199db53a302SChris Wilson TP_PROTO(struct drm_device *dev, u32 size, u32 align, bool mappable), 200db53a302SChris Wilson TP_ARGS(dev, size, align, mappable), 2011c5d22f7SChris Wilson 2021c5d22f7SChris Wilson TP_STRUCT__entry( 2034f49be54SChris Wilson __field(u32, dev) 204db53a302SChris Wilson __field(u32, size) 205db53a302SChris Wilson __field(u32, align) 206db53a302SChris Wilson __field(bool, mappable) 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; 213db53a302SChris Wilson __entry->mappable = mappable; 2141c5d22f7SChris Wilson ), 2151c5d22f7SChris Wilson 216db53a302SChris Wilson TP_printk("dev=%d, size=%d, align=%d %s", 217db53a302SChris Wilson __entry->dev, __entry->size, __entry->align, 218db53a302SChris Wilson __entry->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( 241bcccff84SBen Widawsky __field(struct i915_address_space *, vm) 242bcccff84SBen Widawsky ), 243bcccff84SBen Widawsky 244bcccff84SBen Widawsky TP_fast_assign( 245bcccff84SBen Widawsky __entry->vm = vm; 246bcccff84SBen Widawsky ), 247bcccff84SBen Widawsky 248bcccff84SBen Widawsky TP_printk("dev=%d, vm=%p", __entry->vm->dev->primary->index, __entry->vm) 249bcccff84SBen Widawsky ); 250bcccff84SBen Widawsky 251db53a302SChris Wilson TRACE_EVENT(i915_gem_ring_dispatch, 252d7d4eeddSChris Wilson TP_PROTO(struct intel_ring_buffer *ring, u32 seqno, u32 flags), 253d7d4eeddSChris Wilson TP_ARGS(ring, seqno, flags), 254db53a302SChris Wilson 255db53a302SChris Wilson TP_STRUCT__entry( 256db53a302SChris Wilson __field(u32, dev) 257db53a302SChris Wilson __field(u32, ring) 258db53a302SChris Wilson __field(u32, seqno) 259d7d4eeddSChris Wilson __field(u32, flags) 260db53a302SChris Wilson ), 261db53a302SChris Wilson 262db53a302SChris Wilson TP_fast_assign( 263db53a302SChris Wilson __entry->dev = ring->dev->primary->index; 264db53a302SChris Wilson __entry->ring = ring->id; 265db53a302SChris Wilson __entry->seqno = seqno; 266d7d4eeddSChris Wilson __entry->flags = flags; 267db53a302SChris Wilson i915_trace_irq_get(ring, seqno); 268db53a302SChris Wilson ), 269db53a302SChris Wilson 270d7d4eeddSChris Wilson TP_printk("dev=%u, ring=%u, seqno=%u, flags=%x", 271d7d4eeddSChris Wilson __entry->dev, __entry->ring, __entry->seqno, __entry->flags) 272db53a302SChris Wilson ); 273db53a302SChris Wilson 274db53a302SChris Wilson TRACE_EVENT(i915_gem_ring_flush, 275db53a302SChris Wilson TP_PROTO(struct intel_ring_buffer *ring, u32 invalidate, u32 flush), 276db53a302SChris Wilson TP_ARGS(ring, invalidate, flush), 277db53a302SChris Wilson 278db53a302SChris Wilson TP_STRUCT__entry( 279db53a302SChris Wilson __field(u32, dev) 280db53a302SChris Wilson __field(u32, ring) 281db53a302SChris Wilson __field(u32, invalidate) 282db53a302SChris Wilson __field(u32, flush) 283db53a302SChris Wilson ), 284db53a302SChris Wilson 285db53a302SChris Wilson TP_fast_assign( 286db53a302SChris Wilson __entry->dev = ring->dev->primary->index; 287db53a302SChris Wilson __entry->ring = ring->id; 288db53a302SChris Wilson __entry->invalidate = invalidate; 289db53a302SChris Wilson __entry->flush = flush; 290db53a302SChris Wilson ), 291db53a302SChris Wilson 292db53a302SChris Wilson TP_printk("dev=%u, ring=%x, invalidate=%04x, flush=%04x", 293db53a302SChris Wilson __entry->dev, __entry->ring, 294db53a302SChris Wilson __entry->invalidate, __entry->flush) 2951c5d22f7SChris Wilson ); 2961c5d22f7SChris Wilson 297903cf20cSLi Zefan DECLARE_EVENT_CLASS(i915_gem_request, 298db53a302SChris Wilson TP_PROTO(struct intel_ring_buffer *ring, u32 seqno), 299db53a302SChris Wilson TP_ARGS(ring, seqno), 3001c5d22f7SChris Wilson 3011c5d22f7SChris Wilson TP_STRUCT__entry( 3024f49be54SChris Wilson __field(u32, dev) 303db53a302SChris Wilson __field(u32, ring) 3041c5d22f7SChris Wilson __field(u32, seqno) 3051c5d22f7SChris Wilson ), 3061c5d22f7SChris Wilson 3071c5d22f7SChris Wilson TP_fast_assign( 308db53a302SChris Wilson __entry->dev = ring->dev->primary->index; 309db53a302SChris Wilson __entry->ring = ring->id; 3101c5d22f7SChris Wilson __entry->seqno = seqno; 3111c5d22f7SChris Wilson ), 3121c5d22f7SChris Wilson 313db53a302SChris Wilson TP_printk("dev=%u, ring=%u, seqno=%u", 314db53a302SChris Wilson __entry->dev, __entry->ring, __entry->seqno) 315db53a302SChris Wilson ); 316db53a302SChris Wilson 317db53a302SChris Wilson DEFINE_EVENT(i915_gem_request, i915_gem_request_add, 318db53a302SChris Wilson TP_PROTO(struct intel_ring_buffer *ring, u32 seqno), 319db53a302SChris Wilson TP_ARGS(ring, seqno) 3201c5d22f7SChris Wilson ); 3211c5d22f7SChris Wilson 322814e9b57SChris Wilson TRACE_EVENT(i915_gem_request_complete, 323814e9b57SChris Wilson TP_PROTO(struct intel_ring_buffer *ring), 324814e9b57SChris Wilson TP_ARGS(ring), 325814e9b57SChris Wilson 326814e9b57SChris Wilson TP_STRUCT__entry( 327814e9b57SChris Wilson __field(u32, dev) 328814e9b57SChris Wilson __field(u32, ring) 329814e9b57SChris Wilson __field(u32, seqno) 330814e9b57SChris Wilson ), 331814e9b57SChris Wilson 332814e9b57SChris Wilson TP_fast_assign( 333814e9b57SChris Wilson __entry->dev = ring->dev->primary->index; 334814e9b57SChris Wilson __entry->ring = ring->id; 335814e9b57SChris Wilson __entry->seqno = ring->get_seqno(ring, false); 336814e9b57SChris Wilson ), 337814e9b57SChris Wilson 338814e9b57SChris Wilson TP_printk("dev=%u, ring=%u, seqno=%u", 339814e9b57SChris Wilson __entry->dev, __entry->ring, __entry->seqno) 3401c5d22f7SChris Wilson ); 3411c5d22f7SChris Wilson 342903cf20cSLi Zefan DEFINE_EVENT(i915_gem_request, i915_gem_request_retire, 343db53a302SChris Wilson TP_PROTO(struct intel_ring_buffer *ring, u32 seqno), 344db53a302SChris Wilson TP_ARGS(ring, seqno) 3451c5d22f7SChris Wilson ); 3461c5d22f7SChris Wilson 347f3fd3768SBen Widawsky TRACE_EVENT(i915_gem_request_wait_begin, 348db53a302SChris Wilson TP_PROTO(struct intel_ring_buffer *ring, u32 seqno), 349f3fd3768SBen Widawsky TP_ARGS(ring, seqno), 350f3fd3768SBen Widawsky 351f3fd3768SBen Widawsky TP_STRUCT__entry( 352f3fd3768SBen Widawsky __field(u32, dev) 353f3fd3768SBen Widawsky __field(u32, ring) 354f3fd3768SBen Widawsky __field(u32, seqno) 355f3fd3768SBen Widawsky __field(bool, blocking) 356f3fd3768SBen Widawsky ), 357f3fd3768SBen Widawsky 358f3fd3768SBen Widawsky /* NB: the blocking information is racy since mutex_is_locked 359f3fd3768SBen Widawsky * doesn't check that the current thread holds the lock. The only 360f3fd3768SBen Widawsky * other option would be to pass the boolean information of whether 361f3fd3768SBen Widawsky * or not the class was blocking down through the stack which is 362f3fd3768SBen Widawsky * less desirable. 363f3fd3768SBen Widawsky */ 364f3fd3768SBen Widawsky TP_fast_assign( 365f3fd3768SBen Widawsky __entry->dev = ring->dev->primary->index; 366f3fd3768SBen Widawsky __entry->ring = ring->id; 367f3fd3768SBen Widawsky __entry->seqno = seqno; 368f3fd3768SBen Widawsky __entry->blocking = mutex_is_locked(&ring->dev->struct_mutex); 369f3fd3768SBen Widawsky ), 370f3fd3768SBen Widawsky 371f3fd3768SBen Widawsky TP_printk("dev=%u, ring=%u, seqno=%u, blocking=%s", 372f3fd3768SBen Widawsky __entry->dev, __entry->ring, __entry->seqno, 373f3fd3768SBen Widawsky __entry->blocking ? "yes (NB)" : "no") 3741c5d22f7SChris Wilson ); 3751c5d22f7SChris Wilson 376903cf20cSLi Zefan DEFINE_EVENT(i915_gem_request, i915_gem_request_wait_end, 377db53a302SChris Wilson TP_PROTO(struct intel_ring_buffer *ring, u32 seqno), 378db53a302SChris Wilson TP_ARGS(ring, seqno) 379903cf20cSLi Zefan ); 380903cf20cSLi Zefan 381903cf20cSLi Zefan DECLARE_EVENT_CLASS(i915_ring, 382db53a302SChris Wilson TP_PROTO(struct intel_ring_buffer *ring), 383db53a302SChris Wilson TP_ARGS(ring), 3841c5d22f7SChris Wilson 3851c5d22f7SChris Wilson TP_STRUCT__entry( 3864f49be54SChris Wilson __field(u32, dev) 387db53a302SChris Wilson __field(u32, ring) 3881c5d22f7SChris Wilson ), 3891c5d22f7SChris Wilson 3901c5d22f7SChris Wilson TP_fast_assign( 391db53a302SChris Wilson __entry->dev = ring->dev->primary->index; 392db53a302SChris Wilson __entry->ring = ring->id; 3931c5d22f7SChris Wilson ), 3941c5d22f7SChris Wilson 395db53a302SChris Wilson TP_printk("dev=%u, ring=%u", __entry->dev, __entry->ring) 3961c5d22f7SChris Wilson ); 3971c5d22f7SChris Wilson 398903cf20cSLi Zefan DEFINE_EVENT(i915_ring, i915_ring_wait_begin, 399db53a302SChris Wilson TP_PROTO(struct intel_ring_buffer *ring), 400db53a302SChris Wilson TP_ARGS(ring) 401903cf20cSLi Zefan ); 4021c5d22f7SChris Wilson 403903cf20cSLi Zefan DEFINE_EVENT(i915_ring, i915_ring_wait_end, 404db53a302SChris Wilson TP_PROTO(struct intel_ring_buffer *ring), 405db53a302SChris Wilson TP_ARGS(ring) 4061c5d22f7SChris Wilson ); 4071c5d22f7SChris Wilson 408e5510facSJesse Barnes TRACE_EVENT(i915_flip_request, 40905394f39SChris Wilson TP_PROTO(int plane, struct drm_i915_gem_object *obj), 410e5510facSJesse Barnes 411e5510facSJesse Barnes TP_ARGS(plane, obj), 412e5510facSJesse Barnes 413e5510facSJesse Barnes TP_STRUCT__entry( 414e5510facSJesse Barnes __field(int, plane) 41505394f39SChris Wilson __field(struct drm_i915_gem_object *, obj) 416e5510facSJesse Barnes ), 417e5510facSJesse Barnes 418e5510facSJesse Barnes TP_fast_assign( 419e5510facSJesse Barnes __entry->plane = plane; 420e5510facSJesse Barnes __entry->obj = obj; 421e5510facSJesse Barnes ), 422e5510facSJesse Barnes 423e5510facSJesse Barnes TP_printk("plane=%d, obj=%p", __entry->plane, __entry->obj) 424e5510facSJesse Barnes ); 425e5510facSJesse Barnes 426e5510facSJesse Barnes TRACE_EVENT(i915_flip_complete, 42705394f39SChris Wilson TP_PROTO(int plane, struct drm_i915_gem_object *obj), 428e5510facSJesse Barnes 429e5510facSJesse Barnes TP_ARGS(plane, obj), 430e5510facSJesse Barnes 431e5510facSJesse Barnes TP_STRUCT__entry( 432e5510facSJesse Barnes __field(int, plane) 43305394f39SChris Wilson __field(struct drm_i915_gem_object *, obj) 434e5510facSJesse Barnes ), 435e5510facSJesse Barnes 436e5510facSJesse Barnes TP_fast_assign( 437e5510facSJesse Barnes __entry->plane = plane; 438e5510facSJesse Barnes __entry->obj = obj; 439e5510facSJesse Barnes ), 440e5510facSJesse Barnes 441e5510facSJesse Barnes TP_printk("plane=%d, obj=%p", __entry->plane, __entry->obj) 442e5510facSJesse Barnes ); 443e5510facSJesse Barnes 444ed71f1b4SChris Wilson TRACE_EVENT_CONDITION(i915_reg_rw, 445ed71f1b4SChris Wilson TP_PROTO(bool write, u32 reg, u64 val, int len, bool trace), 446ba4f01a3SYuanhan Liu 447ed71f1b4SChris Wilson TP_ARGS(write, reg, val, len, trace), 448ed71f1b4SChris Wilson 449ed71f1b4SChris Wilson TP_CONDITION(trace), 450ba4f01a3SYuanhan Liu 451ba4f01a3SYuanhan Liu TP_STRUCT__entry( 452db53a302SChris Wilson __field(u64, val) 453db53a302SChris Wilson __field(u32, reg) 454db53a302SChris Wilson __field(u16, write) 455db53a302SChris Wilson __field(u16, len) 456ba4f01a3SYuanhan Liu ), 457ba4f01a3SYuanhan Liu 458ba4f01a3SYuanhan Liu TP_fast_assign( 459db53a302SChris Wilson __entry->val = (u64)val; 460ba4f01a3SYuanhan Liu __entry->reg = reg; 461db53a302SChris Wilson __entry->write = write; 462ba4f01a3SYuanhan Liu __entry->len = len; 463ba4f01a3SYuanhan Liu ), 464ba4f01a3SYuanhan Liu 465db53a302SChris Wilson TP_printk("%s reg=0x%x, len=%d, val=(0x%x, 0x%x)", 466db53a302SChris Wilson __entry->write ? "write" : "read", 467db53a302SChris Wilson __entry->reg, __entry->len, 468db53a302SChris Wilson (u32)(__entry->val & 0xffffffff), 469db53a302SChris Wilson (u32)(__entry->val >> 32)) 470ba4f01a3SYuanhan Liu ); 471ba4f01a3SYuanhan Liu 472be2cde9aSDaniel Vetter TRACE_EVENT(intel_gpu_freq_change, 473be2cde9aSDaniel Vetter TP_PROTO(u32 freq), 474be2cde9aSDaniel Vetter TP_ARGS(freq), 475be2cde9aSDaniel Vetter 476be2cde9aSDaniel Vetter TP_STRUCT__entry( 477be2cde9aSDaniel Vetter __field(u32, freq) 478be2cde9aSDaniel Vetter ), 479be2cde9aSDaniel Vetter 480be2cde9aSDaniel Vetter TP_fast_assign( 481be2cde9aSDaniel Vetter __entry->freq = freq; 482be2cde9aSDaniel Vetter ), 483be2cde9aSDaniel Vetter 484be2cde9aSDaniel Vetter TP_printk("new_freq=%u", __entry->freq) 485be2cde9aSDaniel Vetter ); 486be2cde9aSDaniel Vetter 4871c5d22f7SChris Wilson #endif /* _I915_TRACE_H_ */ 4881c5d22f7SChris Wilson 4891c5d22f7SChris Wilson /* This part must be outside protection */ 4901c5d22f7SChris Wilson #undef TRACE_INCLUDE_PATH 491a7c54278SPeter Clifton #define TRACE_INCLUDE_PATH . 4921c5d22f7SChris Wilson #include <trace/define_trace.h> 493