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" 1025ef284aSVille Syrjälä #include "intel_drv.h" 11db53a302SChris Wilson #include "intel_ringbuffer.h" 121c5d22f7SChris Wilson 131c5d22f7SChris Wilson #undef TRACE_SYSTEM 141c5d22f7SChris Wilson #define TRACE_SYSTEM i915 151c5d22f7SChris Wilson #define TRACE_INCLUDE_FILE i915_trace 161c5d22f7SChris Wilson 17c137d660SVille Syrjälä /* watermark/fifo updates */ 18c137d660SVille Syrjälä 191489bba8SVille Syrjälä TRACE_EVENT(intel_memory_cxsr, 201489bba8SVille Syrjälä TP_PROTO(struct drm_i915_private *dev_priv, bool old, bool new), 211489bba8SVille Syrjälä TP_ARGS(dev_priv, old, new), 221489bba8SVille Syrjälä 231489bba8SVille Syrjälä TP_STRUCT__entry( 241489bba8SVille Syrjälä __array(u32, frame, 3) 251489bba8SVille Syrjälä __array(u32, scanline, 3) 261489bba8SVille Syrjälä __field(bool, old) 271489bba8SVille Syrjälä __field(bool, new) 281489bba8SVille Syrjälä ), 291489bba8SVille Syrjälä 301489bba8SVille Syrjälä TP_fast_assign( 311489bba8SVille Syrjälä enum pipe pipe; 321489bba8SVille Syrjälä for_each_pipe(dev_priv, pipe) { 331489bba8SVille Syrjälä __entry->frame[pipe] = 341489bba8SVille Syrjälä dev_priv->drm.driver->get_vblank_counter(&dev_priv->drm, pipe); 351489bba8SVille Syrjälä __entry->scanline[pipe] = 361489bba8SVille Syrjälä intel_get_crtc_scanline(intel_get_crtc_for_pipe(dev_priv, pipe)); 371489bba8SVille Syrjälä } 381489bba8SVille Syrjälä __entry->old = old; 391489bba8SVille Syrjälä __entry->new = new; 401489bba8SVille Syrjälä ), 411489bba8SVille Syrjälä 421489bba8SVille Syrjälä TP_printk("%s->%s, pipe A: frame=%u, scanline=%u, pipe B: frame=%u, scanline=%u, pipe C: frame=%u, scanline=%u", 431489bba8SVille Syrjälä onoff(__entry->old), onoff(__entry->new), 441489bba8SVille Syrjälä __entry->frame[PIPE_A], __entry->scanline[PIPE_A], 451489bba8SVille Syrjälä __entry->frame[PIPE_B], __entry->scanline[PIPE_B], 461489bba8SVille Syrjälä __entry->frame[PIPE_C], __entry->scanline[PIPE_C]) 471489bba8SVille Syrjälä ); 481489bba8SVille Syrjälä 49c137d660SVille Syrjälä TRACE_EVENT(vlv_wm, 50c137d660SVille Syrjälä TP_PROTO(struct intel_crtc *crtc, const struct vlv_wm_values *wm), 51c137d660SVille Syrjälä TP_ARGS(crtc, wm), 52c137d660SVille Syrjälä 53c137d660SVille Syrjälä TP_STRUCT__entry( 54c137d660SVille Syrjälä __field(enum pipe, pipe) 55c137d660SVille Syrjälä __field(u32, frame) 56c137d660SVille Syrjälä __field(u32, scanline) 57c137d660SVille Syrjälä __field(u32, level) 58c137d660SVille Syrjälä __field(u32, cxsr) 59c137d660SVille Syrjälä __field(u32, primary) 60c137d660SVille Syrjälä __field(u32, sprite0) 61c137d660SVille Syrjälä __field(u32, sprite1) 62c137d660SVille Syrjälä __field(u32, cursor) 63c137d660SVille Syrjälä __field(u32, sr_plane) 64c137d660SVille Syrjälä __field(u32, sr_cursor) 65c137d660SVille Syrjälä ), 66c137d660SVille Syrjälä 67c137d660SVille Syrjälä TP_fast_assign( 68c137d660SVille Syrjälä __entry->pipe = crtc->pipe; 69c137d660SVille Syrjälä __entry->frame = crtc->base.dev->driver->get_vblank_counter(crtc->base.dev, 70c137d660SVille Syrjälä crtc->pipe); 71c137d660SVille Syrjälä __entry->scanline = intel_get_crtc_scanline(crtc); 72c137d660SVille Syrjälä __entry->level = wm->level; 73c137d660SVille Syrjälä __entry->cxsr = wm->cxsr; 74c137d660SVille Syrjälä __entry->primary = wm->pipe[crtc->pipe].plane[PLANE_PRIMARY]; 75c137d660SVille Syrjälä __entry->sprite0 = wm->pipe[crtc->pipe].plane[PLANE_SPRITE0]; 76c137d660SVille Syrjälä __entry->sprite1 = wm->pipe[crtc->pipe].plane[PLANE_SPRITE1]; 77c137d660SVille Syrjälä __entry->cursor = wm->pipe[crtc->pipe].plane[PLANE_CURSOR]; 78c137d660SVille Syrjälä __entry->sr_plane = wm->sr.plane; 79c137d660SVille Syrjälä __entry->sr_cursor = wm->sr.cursor; 80c137d660SVille Syrjälä ), 81c137d660SVille Syrjälä 82c137d660SVille Syrjälä TP_printk("pipe %c, frame=%u, scanline=%u, level=%d, cxsr=%d, wm %d/%d/%d/%d, sr %d/%d", 83c137d660SVille Syrjälä pipe_name(__entry->pipe), __entry->frame, 84c137d660SVille Syrjälä __entry->scanline, __entry->level, __entry->cxsr, 85c137d660SVille Syrjälä __entry->primary, __entry->sprite0, __entry->sprite1, __entry->cursor, 86c137d660SVille Syrjälä __entry->sr_plane, __entry->sr_cursor) 87c137d660SVille Syrjälä ); 88c137d660SVille Syrjälä 89c137d660SVille Syrjälä TRACE_EVENT(vlv_fifo_size, 90c137d660SVille Syrjälä TP_PROTO(struct intel_crtc *crtc, u32 sprite0_start, u32 sprite1_start, u32 fifo_size), 91c137d660SVille Syrjälä TP_ARGS(crtc, sprite0_start, sprite1_start, fifo_size), 92c137d660SVille Syrjälä 93c137d660SVille Syrjälä TP_STRUCT__entry( 94c137d660SVille Syrjälä __field(enum pipe, pipe) 95c137d660SVille Syrjälä __field(u32, frame) 96c137d660SVille Syrjälä __field(u32, scanline) 97c137d660SVille Syrjälä __field(u32, sprite0_start) 98c137d660SVille Syrjälä __field(u32, sprite1_start) 99c137d660SVille Syrjälä __field(u32, fifo_size) 100c137d660SVille Syrjälä ), 101c137d660SVille Syrjälä 102c137d660SVille Syrjälä TP_fast_assign( 103c137d660SVille Syrjälä __entry->pipe = crtc->pipe; 104c137d660SVille Syrjälä __entry->frame = crtc->base.dev->driver->get_vblank_counter(crtc->base.dev, 105c137d660SVille Syrjälä crtc->pipe); 106c137d660SVille Syrjälä __entry->scanline = intel_get_crtc_scanline(crtc); 107c137d660SVille Syrjälä __entry->sprite0_start = sprite0_start; 108c137d660SVille Syrjälä __entry->sprite1_start = sprite1_start; 109c137d660SVille Syrjälä __entry->fifo_size = fifo_size; 110c137d660SVille Syrjälä ), 111c137d660SVille Syrjälä 112c137d660SVille Syrjälä TP_printk("pipe %c, frame=%u, scanline=%u, %d/%d/%d", 113c137d660SVille Syrjälä pipe_name(__entry->pipe), __entry->frame, 114c137d660SVille Syrjälä __entry->scanline, __entry->sprite0_start, 115c137d660SVille Syrjälä __entry->sprite1_start, __entry->fifo_size) 116c137d660SVille Syrjälä ); 117c137d660SVille Syrjälä 11872259536SVille Syrjälä /* plane updates */ 11972259536SVille Syrjälä 12072259536SVille Syrjälä TRACE_EVENT(intel_update_plane, 12172259536SVille Syrjälä TP_PROTO(struct drm_plane *plane, struct intel_crtc *crtc), 12272259536SVille Syrjälä TP_ARGS(plane, crtc), 12372259536SVille Syrjälä 12472259536SVille Syrjälä TP_STRUCT__entry( 12572259536SVille Syrjälä __field(enum pipe, pipe) 12672259536SVille Syrjälä __field(const char *, name) 12772259536SVille Syrjälä __field(u32, frame) 12872259536SVille Syrjälä __field(u32, scanline) 12972259536SVille Syrjälä __array(int, src, 4) 13072259536SVille Syrjälä __array(int, dst, 4) 13172259536SVille Syrjälä ), 13272259536SVille Syrjälä 13372259536SVille Syrjälä TP_fast_assign( 13472259536SVille Syrjälä __entry->pipe = crtc->pipe; 13572259536SVille Syrjälä __entry->name = plane->name; 13672259536SVille Syrjälä __entry->frame = crtc->base.dev->driver->get_vblank_counter(crtc->base.dev, 13772259536SVille Syrjälä crtc->pipe); 13872259536SVille Syrjälä __entry->scanline = intel_get_crtc_scanline(crtc); 13972259536SVille Syrjälä memcpy(__entry->src, &plane->state->src, sizeof(__entry->src)); 14072259536SVille Syrjälä memcpy(__entry->dst, &plane->state->dst, sizeof(__entry->dst)); 14172259536SVille Syrjälä ), 14272259536SVille Syrjälä 14372259536SVille Syrjälä TP_printk("pipe %c, plane %s, frame=%u, scanline=%u, " DRM_RECT_FP_FMT " -> " DRM_RECT_FMT, 14472259536SVille Syrjälä pipe_name(__entry->pipe), __entry->name, 14572259536SVille Syrjälä __entry->frame, __entry->scanline, 14672259536SVille Syrjälä DRM_RECT_FP_ARG((const struct drm_rect *)__entry->src), 14772259536SVille Syrjälä DRM_RECT_ARG((const struct drm_rect *)__entry->dst)) 14872259536SVille Syrjälä ); 14972259536SVille Syrjälä 15072259536SVille Syrjälä TRACE_EVENT(intel_disable_plane, 15172259536SVille Syrjälä TP_PROTO(struct drm_plane *plane, struct intel_crtc *crtc), 15272259536SVille Syrjälä TP_ARGS(plane, crtc), 15372259536SVille Syrjälä 15472259536SVille Syrjälä TP_STRUCT__entry( 15572259536SVille Syrjälä __field(enum pipe, pipe) 15672259536SVille Syrjälä __field(const char *, name) 15772259536SVille Syrjälä __field(u32, frame) 15872259536SVille Syrjälä __field(u32, scanline) 15972259536SVille Syrjälä ), 16072259536SVille Syrjälä 16172259536SVille Syrjälä TP_fast_assign( 16272259536SVille Syrjälä __entry->pipe = crtc->pipe; 16372259536SVille Syrjälä __entry->name = plane->name; 16472259536SVille Syrjälä __entry->frame = crtc->base.dev->driver->get_vblank_counter(crtc->base.dev, 16572259536SVille Syrjälä crtc->pipe); 16672259536SVille Syrjälä __entry->scanline = intel_get_crtc_scanline(crtc); 16772259536SVille Syrjälä ), 16872259536SVille Syrjälä 16972259536SVille Syrjälä TP_printk("pipe %c, plane %s, frame=%u, scanline=%u", 17072259536SVille Syrjälä pipe_name(__entry->pipe), __entry->name, 17172259536SVille Syrjälä __entry->frame, __entry->scanline) 17272259536SVille Syrjälä ); 17372259536SVille Syrjälä 17425ef284aSVille Syrjälä /* pipe updates */ 17525ef284aSVille Syrjälä 17625ef284aSVille Syrjälä TRACE_EVENT(i915_pipe_update_start, 177d637ce3fSJesse Barnes TP_PROTO(struct intel_crtc *crtc), 178d637ce3fSJesse Barnes TP_ARGS(crtc), 17925ef284aSVille Syrjälä 18025ef284aSVille Syrjälä TP_STRUCT__entry( 18125ef284aSVille Syrjälä __field(enum pipe, pipe) 18225ef284aSVille Syrjälä __field(u32, frame) 18325ef284aSVille Syrjälä __field(u32, scanline) 18425ef284aSVille Syrjälä __field(u32, min) 18525ef284aSVille Syrjälä __field(u32, max) 18625ef284aSVille Syrjälä ), 18725ef284aSVille Syrjälä 18825ef284aSVille Syrjälä TP_fast_assign( 18925ef284aSVille Syrjälä __entry->pipe = crtc->pipe; 19025ef284aSVille Syrjälä __entry->frame = crtc->base.dev->driver->get_vblank_counter(crtc->base.dev, 19125ef284aSVille Syrjälä crtc->pipe); 19225ef284aSVille Syrjälä __entry->scanline = intel_get_crtc_scanline(crtc); 193d637ce3fSJesse Barnes __entry->min = crtc->debug.min_vbl; 194d637ce3fSJesse Barnes __entry->max = crtc->debug.max_vbl; 19525ef284aSVille Syrjälä ), 19625ef284aSVille Syrjälä 19725ef284aSVille Syrjälä TP_printk("pipe %c, frame=%u, scanline=%u, min=%u, max=%u", 19825ef284aSVille Syrjälä pipe_name(__entry->pipe), __entry->frame, 19925ef284aSVille Syrjälä __entry->scanline, __entry->min, __entry->max) 20025ef284aSVille Syrjälä ); 20125ef284aSVille Syrjälä 20225ef284aSVille Syrjälä TRACE_EVENT(i915_pipe_update_vblank_evaded, 203d637ce3fSJesse Barnes TP_PROTO(struct intel_crtc *crtc), 204d637ce3fSJesse Barnes TP_ARGS(crtc), 20525ef284aSVille Syrjälä 20625ef284aSVille Syrjälä TP_STRUCT__entry( 20725ef284aSVille Syrjälä __field(enum pipe, pipe) 20825ef284aSVille Syrjälä __field(u32, frame) 20925ef284aSVille Syrjälä __field(u32, scanline) 21025ef284aSVille Syrjälä __field(u32, min) 21125ef284aSVille Syrjälä __field(u32, max) 21225ef284aSVille Syrjälä ), 21325ef284aSVille Syrjälä 21425ef284aSVille Syrjälä TP_fast_assign( 21525ef284aSVille Syrjälä __entry->pipe = crtc->pipe; 216d637ce3fSJesse Barnes __entry->frame = crtc->debug.start_vbl_count; 217d637ce3fSJesse Barnes __entry->scanline = crtc->debug.scanline_start; 218d637ce3fSJesse Barnes __entry->min = crtc->debug.min_vbl; 219d637ce3fSJesse Barnes __entry->max = crtc->debug.max_vbl; 22025ef284aSVille Syrjälä ), 22125ef284aSVille Syrjälä 22225ef284aSVille Syrjälä TP_printk("pipe %c, frame=%u, scanline=%u, min=%u, max=%u", 22325ef284aSVille Syrjälä pipe_name(__entry->pipe), __entry->frame, 22425ef284aSVille Syrjälä __entry->scanline, __entry->min, __entry->max) 22525ef284aSVille Syrjälä ); 22625ef284aSVille Syrjälä 22725ef284aSVille Syrjälä TRACE_EVENT(i915_pipe_update_end, 228d637ce3fSJesse Barnes TP_PROTO(struct intel_crtc *crtc, u32 frame, int scanline_end), 229d637ce3fSJesse Barnes TP_ARGS(crtc, frame, scanline_end), 23025ef284aSVille Syrjälä 23125ef284aSVille Syrjälä TP_STRUCT__entry( 23225ef284aSVille Syrjälä __field(enum pipe, pipe) 23325ef284aSVille Syrjälä __field(u32, frame) 23425ef284aSVille Syrjälä __field(u32, scanline) 23525ef284aSVille Syrjälä ), 23625ef284aSVille Syrjälä 23725ef284aSVille Syrjälä TP_fast_assign( 23825ef284aSVille Syrjälä __entry->pipe = crtc->pipe; 23925ef284aSVille Syrjälä __entry->frame = frame; 240d637ce3fSJesse Barnes __entry->scanline = scanline_end; 24125ef284aSVille Syrjälä ), 24225ef284aSVille Syrjälä 24325ef284aSVille Syrjälä TP_printk("pipe %c, frame=%u, scanline=%u", 24425ef284aSVille Syrjälä pipe_name(__entry->pipe), __entry->frame, 24525ef284aSVille Syrjälä __entry->scanline) 24625ef284aSVille Syrjälä ); 24725ef284aSVille Syrjälä 2481c5d22f7SChris Wilson /* object tracking */ 2491c5d22f7SChris Wilson 2501c5d22f7SChris Wilson TRACE_EVENT(i915_gem_object_create, 25105394f39SChris Wilson TP_PROTO(struct drm_i915_gem_object *obj), 2521c5d22f7SChris Wilson TP_ARGS(obj), 2531c5d22f7SChris Wilson 2541c5d22f7SChris Wilson TP_STRUCT__entry( 25505394f39SChris Wilson __field(struct drm_i915_gem_object *, obj) 2561c5d22f7SChris Wilson __field(u32, size) 2571c5d22f7SChris Wilson ), 2581c5d22f7SChris Wilson 2591c5d22f7SChris Wilson TP_fast_assign( 2601c5d22f7SChris Wilson __entry->obj = obj; 26105394f39SChris Wilson __entry->size = obj->base.size; 2621c5d22f7SChris Wilson ), 2631c5d22f7SChris Wilson 2641c5d22f7SChris Wilson TP_printk("obj=%p, size=%u", __entry->obj, __entry->size) 2651c5d22f7SChris Wilson ); 2661c5d22f7SChris Wilson 2673abafa53SChris Wilson TRACE_EVENT(i915_gem_shrink, 2683abafa53SChris Wilson TP_PROTO(struct drm_i915_private *i915, unsigned long target, unsigned flags), 2693abafa53SChris Wilson TP_ARGS(i915, target, flags), 2703abafa53SChris Wilson 2713abafa53SChris Wilson TP_STRUCT__entry( 2723abafa53SChris Wilson __field(int, dev) 2733abafa53SChris Wilson __field(unsigned long, target) 2743abafa53SChris Wilson __field(unsigned, flags) 2753abafa53SChris Wilson ), 2763abafa53SChris Wilson 2773abafa53SChris Wilson TP_fast_assign( 27891c8a326SChris Wilson __entry->dev = i915->drm.primary->index; 2793abafa53SChris Wilson __entry->target = target; 2803abafa53SChris Wilson __entry->flags = flags; 2813abafa53SChris Wilson ), 2823abafa53SChris Wilson 2833abafa53SChris Wilson TP_printk("dev=%d, target=%lu, flags=%x", 2843abafa53SChris Wilson __entry->dev, __entry->target, __entry->flags) 2853abafa53SChris Wilson ); 2863abafa53SChris Wilson 28707fe0b12SBen Widawsky TRACE_EVENT(i915_vma_bind, 2881ec9e26dSDaniel Vetter TP_PROTO(struct i915_vma *vma, unsigned flags), 2891ec9e26dSDaniel Vetter TP_ARGS(vma, flags), 2901c5d22f7SChris Wilson 2911c5d22f7SChris Wilson TP_STRUCT__entry( 29205394f39SChris Wilson __field(struct drm_i915_gem_object *, obj) 29307fe0b12SBen Widawsky __field(struct i915_address_space *, vm) 29433938714SBen Widawsky __field(u64, offset) 295db53a302SChris Wilson __field(u32, size) 2961ec9e26dSDaniel Vetter __field(unsigned, flags) 2971c5d22f7SChris Wilson ), 2981c5d22f7SChris Wilson 2991c5d22f7SChris Wilson TP_fast_assign( 30007fe0b12SBen Widawsky __entry->obj = vma->obj; 30107fe0b12SBen Widawsky __entry->vm = vma->vm; 30207fe0b12SBen Widawsky __entry->offset = vma->node.start; 30307fe0b12SBen Widawsky __entry->size = vma->node.size; 3041ec9e26dSDaniel Vetter __entry->flags = flags; 3051c5d22f7SChris Wilson ), 3061c5d22f7SChris Wilson 30733938714SBen Widawsky TP_printk("obj=%p, offset=%016llx size=%x%s vm=%p", 308db53a302SChris Wilson __entry->obj, __entry->offset, __entry->size, 3091ec9e26dSDaniel Vetter __entry->flags & PIN_MAPPABLE ? ", mappable" : "", 31007fe0b12SBen Widawsky __entry->vm) 3111c5d22f7SChris Wilson ); 3121c5d22f7SChris Wilson 31307fe0b12SBen Widawsky TRACE_EVENT(i915_vma_unbind, 31407fe0b12SBen Widawsky TP_PROTO(struct i915_vma *vma), 31507fe0b12SBen Widawsky TP_ARGS(vma), 316db53a302SChris Wilson 317db53a302SChris Wilson TP_STRUCT__entry( 318db53a302SChris Wilson __field(struct drm_i915_gem_object *, obj) 31907fe0b12SBen Widawsky __field(struct i915_address_space *, vm) 32033938714SBen Widawsky __field(u64, offset) 321db53a302SChris Wilson __field(u32, size) 322db53a302SChris Wilson ), 323db53a302SChris Wilson 324db53a302SChris Wilson TP_fast_assign( 32507fe0b12SBen Widawsky __entry->obj = vma->obj; 32607fe0b12SBen Widawsky __entry->vm = vma->vm; 32707fe0b12SBen Widawsky __entry->offset = vma->node.start; 32807fe0b12SBen Widawsky __entry->size = vma->node.size; 329db53a302SChris Wilson ), 330db53a302SChris Wilson 33133938714SBen Widawsky TP_printk("obj=%p, offset=%016llx size=%x vm=%p", 33207fe0b12SBen Widawsky __entry->obj, __entry->offset, __entry->size, __entry->vm) 333db53a302SChris Wilson ); 334db53a302SChris Wilson 335db53a302SChris Wilson TRACE_EVENT(i915_gem_object_pwrite, 336db53a302SChris Wilson TP_PROTO(struct drm_i915_gem_object *obj, u32 offset, u32 len), 337db53a302SChris Wilson TP_ARGS(obj, offset, len), 338db53a302SChris Wilson 339db53a302SChris Wilson TP_STRUCT__entry( 340db53a302SChris Wilson __field(struct drm_i915_gem_object *, obj) 341db53a302SChris Wilson __field(u32, offset) 342db53a302SChris Wilson __field(u32, len) 343db53a302SChris Wilson ), 344db53a302SChris Wilson 345db53a302SChris Wilson TP_fast_assign( 346db53a302SChris Wilson __entry->obj = obj; 347db53a302SChris Wilson __entry->offset = offset; 348db53a302SChris Wilson __entry->len = len; 349db53a302SChris Wilson ), 350db53a302SChris Wilson 351db53a302SChris Wilson TP_printk("obj=%p, offset=%u, len=%u", 352db53a302SChris Wilson __entry->obj, __entry->offset, __entry->len) 353db53a302SChris Wilson ); 354db53a302SChris Wilson 355db53a302SChris Wilson TRACE_EVENT(i915_gem_object_pread, 356db53a302SChris Wilson TP_PROTO(struct drm_i915_gem_object *obj, u32 offset, u32 len), 357db53a302SChris Wilson TP_ARGS(obj, offset, len), 358db53a302SChris Wilson 359db53a302SChris Wilson TP_STRUCT__entry( 360db53a302SChris Wilson __field(struct drm_i915_gem_object *, obj) 361db53a302SChris Wilson __field(u32, offset) 362db53a302SChris Wilson __field(u32, len) 363db53a302SChris Wilson ), 364db53a302SChris Wilson 365db53a302SChris Wilson TP_fast_assign( 366db53a302SChris Wilson __entry->obj = obj; 367db53a302SChris Wilson __entry->offset = offset; 368db53a302SChris Wilson __entry->len = len; 369db53a302SChris Wilson ), 370db53a302SChris Wilson 371db53a302SChris Wilson TP_printk("obj=%p, offset=%u, len=%u", 372db53a302SChris Wilson __entry->obj, __entry->offset, __entry->len) 373db53a302SChris Wilson ); 374db53a302SChris Wilson 375db53a302SChris Wilson TRACE_EVENT(i915_gem_object_fault, 376db53a302SChris Wilson TP_PROTO(struct drm_i915_gem_object *obj, u32 index, bool gtt, bool write), 377db53a302SChris Wilson TP_ARGS(obj, index, gtt, write), 378db53a302SChris Wilson 379db53a302SChris Wilson TP_STRUCT__entry( 380db53a302SChris Wilson __field(struct drm_i915_gem_object *, obj) 381db53a302SChris Wilson __field(u32, index) 382db53a302SChris Wilson __field(bool, gtt) 383db53a302SChris Wilson __field(bool, write) 384db53a302SChris Wilson ), 385db53a302SChris Wilson 386db53a302SChris Wilson TP_fast_assign( 387db53a302SChris Wilson __entry->obj = obj; 388db53a302SChris Wilson __entry->index = index; 389db53a302SChris Wilson __entry->gtt = gtt; 390db53a302SChris Wilson __entry->write = write; 391db53a302SChris Wilson ), 392db53a302SChris Wilson 393db53a302SChris Wilson TP_printk("obj=%p, %s index=%u %s", 394db53a302SChris Wilson __entry->obj, 395db53a302SChris Wilson __entry->gtt ? "GTT" : "CPU", 396db53a302SChris Wilson __entry->index, 397db53a302SChris Wilson __entry->write ? ", writable" : "") 3981c5d22f7SChris Wilson ); 3991c5d22f7SChris Wilson 400903cf20cSLi Zefan DECLARE_EVENT_CLASS(i915_gem_object, 40105394f39SChris Wilson TP_PROTO(struct drm_i915_gem_object *obj), 4021c5d22f7SChris Wilson TP_ARGS(obj), 4031c5d22f7SChris Wilson 4041c5d22f7SChris Wilson TP_STRUCT__entry( 40505394f39SChris Wilson __field(struct drm_i915_gem_object *, obj) 4061c5d22f7SChris Wilson ), 4071c5d22f7SChris Wilson 4081c5d22f7SChris Wilson TP_fast_assign( 4091c5d22f7SChris Wilson __entry->obj = obj; 4101c5d22f7SChris Wilson ), 4111c5d22f7SChris Wilson 4121c5d22f7SChris Wilson TP_printk("obj=%p", __entry->obj) 4131c5d22f7SChris Wilson ); 4141c5d22f7SChris Wilson 415f41275e8SLi Zefan DEFINE_EVENT(i915_gem_object, i915_gem_object_clflush, 41605394f39SChris Wilson TP_PROTO(struct drm_i915_gem_object *obj), 417903cf20cSLi Zefan TP_ARGS(obj) 418903cf20cSLi Zefan ); 4191c5d22f7SChris Wilson 420903cf20cSLi Zefan DEFINE_EVENT(i915_gem_object, i915_gem_object_destroy, 42105394f39SChris Wilson TP_PROTO(struct drm_i915_gem_object *obj), 422903cf20cSLi Zefan TP_ARGS(obj) 4231c5d22f7SChris Wilson ); 4241c5d22f7SChris Wilson 425db53a302SChris Wilson TRACE_EVENT(i915_gem_evict, 426e522ac23SChris Wilson TP_PROTO(struct i915_address_space *vm, u32 size, u32 align, unsigned int flags), 427e522ac23SChris Wilson TP_ARGS(vm, size, align, flags), 4281c5d22f7SChris Wilson 4291c5d22f7SChris Wilson TP_STRUCT__entry( 4304f49be54SChris Wilson __field(u32, dev) 431e522ac23SChris Wilson __field(struct i915_address_space *, vm) 432db53a302SChris Wilson __field(u32, size) 433db53a302SChris Wilson __field(u32, align) 434e522ac23SChris Wilson __field(unsigned int, flags) 4351c5d22f7SChris Wilson ), 4361c5d22f7SChris Wilson 4371c5d22f7SChris Wilson TP_fast_assign( 438c6385c94SChris Wilson __entry->dev = vm->i915->drm.primary->index; 439e522ac23SChris Wilson __entry->vm = vm; 440db53a302SChris Wilson __entry->size = size; 441db53a302SChris Wilson __entry->align = align; 4421ec9e26dSDaniel Vetter __entry->flags = flags; 4431c5d22f7SChris Wilson ), 4441c5d22f7SChris Wilson 445e522ac23SChris Wilson TP_printk("dev=%d, vm=%p, size=%d, align=%d %s", 446e522ac23SChris Wilson __entry->dev, __entry->vm, __entry->size, __entry->align, 4471ec9e26dSDaniel Vetter __entry->flags & PIN_MAPPABLE ? ", mappable" : "") 4481c5d22f7SChris Wilson ); 4491c5d22f7SChris Wilson 450db53a302SChris Wilson TRACE_EVENT(i915_gem_evict_everything, 4516c085a72SChris Wilson TP_PROTO(struct drm_device *dev), 4526c085a72SChris Wilson TP_ARGS(dev), 4531c5d22f7SChris Wilson 4541c5d22f7SChris Wilson TP_STRUCT__entry( 4554f49be54SChris Wilson __field(u32, dev) 4561c5d22f7SChris Wilson ), 4571c5d22f7SChris Wilson 4581c5d22f7SChris Wilson TP_fast_assign( 4594f49be54SChris Wilson __entry->dev = dev->primary->index; 4601c5d22f7SChris Wilson ), 4611c5d22f7SChris Wilson 4626c085a72SChris Wilson TP_printk("dev=%d", __entry->dev) 463db53a302SChris Wilson ); 464db53a302SChris Wilson 465bcccff84SBen Widawsky TRACE_EVENT(i915_gem_evict_vm, 466bcccff84SBen Widawsky TP_PROTO(struct i915_address_space *vm), 467bcccff84SBen Widawsky TP_ARGS(vm), 468bcccff84SBen Widawsky 469bcccff84SBen Widawsky TP_STRUCT__entry( 4709297ebf2SSteven Rostedt __field(u32, dev) 471bcccff84SBen Widawsky __field(struct i915_address_space *, vm) 472bcccff84SBen Widawsky ), 473bcccff84SBen Widawsky 474bcccff84SBen Widawsky TP_fast_assign( 475c6385c94SChris Wilson __entry->dev = vm->i915->drm.primary->index; 476bcccff84SBen Widawsky __entry->vm = vm; 477bcccff84SBen Widawsky ), 478bcccff84SBen Widawsky 4799297ebf2SSteven Rostedt TP_printk("dev=%d, vm=%p", __entry->dev, __entry->vm) 480bcccff84SBen Widawsky ); 481bcccff84SBen Widawsky 482625d988aSChris Wilson TRACE_EVENT(i915_gem_evict_node, 483625d988aSChris Wilson TP_PROTO(struct i915_address_space *vm, struct drm_mm_node *node, unsigned int flags), 484625d988aSChris Wilson TP_ARGS(vm, node, flags), 485172ae5b4SChris Wilson 486172ae5b4SChris Wilson TP_STRUCT__entry( 487172ae5b4SChris Wilson __field(u32, dev) 488172ae5b4SChris Wilson __field(struct i915_address_space *, vm) 489172ae5b4SChris Wilson __field(u64, start) 490172ae5b4SChris Wilson __field(u64, size) 491172ae5b4SChris Wilson __field(unsigned long, color) 492172ae5b4SChris Wilson __field(unsigned int, flags) 493172ae5b4SChris Wilson ), 494172ae5b4SChris Wilson 495172ae5b4SChris Wilson TP_fast_assign( 496625d988aSChris Wilson __entry->dev = vm->i915->drm.primary->index; 497625d988aSChris Wilson __entry->vm = vm; 498625d988aSChris Wilson __entry->start = node->start; 499625d988aSChris Wilson __entry->size = node->size; 500625d988aSChris Wilson __entry->color = node->color; 501172ae5b4SChris Wilson __entry->flags = flags; 502172ae5b4SChris Wilson ), 503172ae5b4SChris Wilson 504172ae5b4SChris Wilson TP_printk("dev=%d, vm=%p, start=%llx size=%llx, color=%lx, flags=%x", 505172ae5b4SChris Wilson __entry->dev, __entry->vm, 506172ae5b4SChris Wilson __entry->start, __entry->size, 507172ae5b4SChris Wilson __entry->color, __entry->flags) 508172ae5b4SChris Wilson ); 509172ae5b4SChris Wilson 510b52b89daSChris Wilson TRACE_EVENT(i915_gem_ring_sync_to, 5118e637178SChris Wilson TP_PROTO(struct drm_i915_gem_request *to, 5128e637178SChris Wilson struct drm_i915_gem_request *from), 5138e637178SChris Wilson TP_ARGS(to, from), 514b52b89daSChris Wilson 515b52b89daSChris Wilson TP_STRUCT__entry( 516b52b89daSChris Wilson __field(u32, dev) 517b52b89daSChris Wilson __field(u32, sync_from) 518b52b89daSChris Wilson __field(u32, sync_to) 519b52b89daSChris Wilson __field(u32, seqno) 520b52b89daSChris Wilson ), 521b52b89daSChris Wilson 522b52b89daSChris Wilson TP_fast_assign( 52391c8a326SChris Wilson __entry->dev = from->i915->drm.primary->index; 5248e637178SChris Wilson __entry->sync_from = from->engine->id; 5258e637178SChris Wilson __entry->sync_to = to->engine->id; 52665e4760eSChris Wilson __entry->seqno = from->global_seqno; 527b52b89daSChris Wilson ), 528b52b89daSChris Wilson 529b52b89daSChris Wilson TP_printk("dev=%u, sync-from=%u, sync-to=%u, seqno=%u", 530b52b89daSChris Wilson __entry->dev, 531b52b89daSChris Wilson __entry->sync_from, __entry->sync_to, 532b52b89daSChris Wilson __entry->seqno) 533b52b89daSChris Wilson ); 534b52b89daSChris Wilson 5351cce8922STvrtko Ursulin TRACE_EVENT(i915_gem_request_queue, 53674328ee5SJohn Harrison TP_PROTO(struct drm_i915_gem_request *req, u32 flags), 53774328ee5SJohn Harrison TP_ARGS(req, flags), 538db53a302SChris Wilson 539db53a302SChris Wilson TP_STRUCT__entry( 540db53a302SChris Wilson __field(u32, dev) 541db53a302SChris Wilson __field(u32, ring) 5421cce8922STvrtko Ursulin __field(u32, ctx) 543db53a302SChris Wilson __field(u32, seqno) 544d7d4eeddSChris Wilson __field(u32, flags) 545db53a302SChris Wilson ), 546db53a302SChris Wilson 547db53a302SChris Wilson TP_fast_assign( 54891c8a326SChris Wilson __entry->dev = req->i915->drm.primary->index; 549c033666aSChris Wilson __entry->ring = req->engine->id; 5501cce8922STvrtko Ursulin __entry->ctx = req->ctx->hw_id; 5511cce8922STvrtko Ursulin __entry->seqno = req->fence.seqno; 552d7d4eeddSChris Wilson __entry->flags = flags; 553db53a302SChris Wilson ), 554db53a302SChris Wilson 5551cce8922STvrtko Ursulin TP_printk("dev=%u, ring=%u, ctx=%u, seqno=%u, flags=0x%x", 5561cce8922STvrtko Ursulin __entry->dev, __entry->ring, __entry->ctx, __entry->seqno, 5571cce8922STvrtko Ursulin __entry->flags) 558db53a302SChris Wilson ); 559db53a302SChris Wilson 560db53a302SChris Wilson TRACE_EVENT(i915_gem_ring_flush, 561a84c3ae1SJohn Harrison TP_PROTO(struct drm_i915_gem_request *req, u32 invalidate, u32 flush), 562a84c3ae1SJohn Harrison TP_ARGS(req, invalidate, flush), 563db53a302SChris Wilson 564db53a302SChris Wilson TP_STRUCT__entry( 565db53a302SChris Wilson __field(u32, dev) 566db53a302SChris Wilson __field(u32, ring) 567db53a302SChris Wilson __field(u32, invalidate) 568db53a302SChris Wilson __field(u32, flush) 569db53a302SChris Wilson ), 570db53a302SChris Wilson 571db53a302SChris Wilson TP_fast_assign( 57291c8a326SChris Wilson __entry->dev = req->i915->drm.primary->index; 5734a570db5STvrtko Ursulin __entry->ring = req->engine->id; 574db53a302SChris Wilson __entry->invalidate = invalidate; 575db53a302SChris Wilson __entry->flush = flush; 576db53a302SChris Wilson ), 577db53a302SChris Wilson 578db53a302SChris Wilson TP_printk("dev=%u, ring=%x, invalidate=%04x, flush=%04x", 579db53a302SChris Wilson __entry->dev, __entry->ring, 580db53a302SChris Wilson __entry->invalidate, __entry->flush) 5811c5d22f7SChris Wilson ); 5821c5d22f7SChris Wilson 583903cf20cSLi Zefan DECLARE_EVENT_CLASS(i915_gem_request, 58474328ee5SJohn Harrison TP_PROTO(struct drm_i915_gem_request *req), 58574328ee5SJohn Harrison TP_ARGS(req), 5861c5d22f7SChris Wilson 5871c5d22f7SChris Wilson TP_STRUCT__entry( 5884f49be54SChris Wilson __field(u32, dev) 589e235b530STvrtko Ursulin __field(u32, ctx) 590db53a302SChris Wilson __field(u32, ring) 5911c5d22f7SChris Wilson __field(u32, seqno) 592e235b530STvrtko Ursulin __field(u32, global) 5931c5d22f7SChris Wilson ), 5941c5d22f7SChris Wilson 5951c5d22f7SChris Wilson TP_fast_assign( 59691c8a326SChris Wilson __entry->dev = req->i915->drm.primary->index; 597e235b530STvrtko Ursulin __entry->ctx = req->ctx->hw_id; 598c033666aSChris Wilson __entry->ring = req->engine->id; 599e235b530STvrtko Ursulin __entry->seqno = req->fence.seqno; 600e235b530STvrtko Ursulin __entry->global = req->global_seqno; 6011c5d22f7SChris Wilson ), 6021c5d22f7SChris Wilson 603e235b530STvrtko Ursulin TP_printk("dev=%u, ring=%u, ctx=%u, seqno=%u, global=%u", 604e235b530STvrtko Ursulin __entry->dev, __entry->ring, __entry->ctx, __entry->seqno, 605e235b530STvrtko Ursulin __entry->global) 606db53a302SChris Wilson ); 607db53a302SChris Wilson 608db53a302SChris Wilson DEFINE_EVENT(i915_gem_request, i915_gem_request_add, 60974328ee5SJohn Harrison TP_PROTO(struct drm_i915_gem_request *req), 61074328ee5SJohn Harrison TP_ARGS(req) 6111c5d22f7SChris Wilson ); 6121c5d22f7SChris Wilson 613354d036fSTvrtko Ursulin #if defined(CONFIG_DRM_I915_LOW_LEVEL_TRACEPOINTS) 614354d036fSTvrtko Ursulin DEFINE_EVENT(i915_gem_request, i915_gem_request_submit, 615354d036fSTvrtko Ursulin TP_PROTO(struct drm_i915_gem_request *req), 616354d036fSTvrtko Ursulin TP_ARGS(req) 617354d036fSTvrtko Ursulin ); 618354d036fSTvrtko Ursulin 619354d036fSTvrtko Ursulin DEFINE_EVENT(i915_gem_request, i915_gem_request_execute, 620354d036fSTvrtko Ursulin TP_PROTO(struct drm_i915_gem_request *req), 621354d036fSTvrtko Ursulin TP_ARGS(req) 622354d036fSTvrtko Ursulin ); 623d7d96833STvrtko Ursulin 624d7d96833STvrtko Ursulin DECLARE_EVENT_CLASS(i915_gem_request_hw, 625d7d96833STvrtko Ursulin TP_PROTO(struct drm_i915_gem_request *req, 626d7d96833STvrtko Ursulin unsigned int port), 627d7d96833STvrtko Ursulin TP_ARGS(req, port), 628d7d96833STvrtko Ursulin 629d7d96833STvrtko Ursulin TP_STRUCT__entry( 630d7d96833STvrtko Ursulin __field(u32, dev) 631d7d96833STvrtko Ursulin __field(u32, ring) 632d7d96833STvrtko Ursulin __field(u32, seqno) 633d7d96833STvrtko Ursulin __field(u32, global_seqno) 634d7d96833STvrtko Ursulin __field(u32, ctx) 635d7d96833STvrtko Ursulin __field(u32, port) 636d7d96833STvrtko Ursulin ), 637d7d96833STvrtko Ursulin 638d7d96833STvrtko Ursulin TP_fast_assign( 639d7d96833STvrtko Ursulin __entry->dev = req->i915->drm.primary->index; 640d7d96833STvrtko Ursulin __entry->ring = req->engine->id; 641d7d96833STvrtko Ursulin __entry->ctx = req->ctx->hw_id; 642d7d96833STvrtko Ursulin __entry->seqno = req->fence.seqno; 643d7d96833STvrtko Ursulin __entry->global_seqno = req->global_seqno; 644d7d96833STvrtko Ursulin __entry->port = port; 645d7d96833STvrtko Ursulin ), 646d7d96833STvrtko Ursulin 647d7d96833STvrtko Ursulin TP_printk("dev=%u, ring=%u, ctx=%u, seqno=%u, global=%u, port=%u", 648d7d96833STvrtko Ursulin __entry->dev, __entry->ring, __entry->ctx, 649d7d96833STvrtko Ursulin __entry->seqno, __entry->global_seqno, 650d7d96833STvrtko Ursulin __entry->port) 651d7d96833STvrtko Ursulin ); 652d7d96833STvrtko Ursulin 653d7d96833STvrtko Ursulin DEFINE_EVENT(i915_gem_request_hw, i915_gem_request_in, 654d7d96833STvrtko Ursulin TP_PROTO(struct drm_i915_gem_request *req, unsigned int port), 655d7d96833STvrtko Ursulin TP_ARGS(req, port) 656d7d96833STvrtko Ursulin ); 657d7d96833STvrtko Ursulin 658d7d96833STvrtko Ursulin DEFINE_EVENT(i915_gem_request, i915_gem_request_out, 659d7d96833STvrtko Ursulin TP_PROTO(struct drm_i915_gem_request *req), 660d7d96833STvrtko Ursulin TP_ARGS(req) 661d7d96833STvrtko Ursulin ); 662354d036fSTvrtko Ursulin #else 663354d036fSTvrtko Ursulin #if !defined(TRACE_HEADER_MULTI_READ) 664354d036fSTvrtko Ursulin static inline void 665354d036fSTvrtko Ursulin trace_i915_gem_request_submit(struct drm_i915_gem_request *req) 666354d036fSTvrtko Ursulin { 667354d036fSTvrtko Ursulin } 668354d036fSTvrtko Ursulin 669354d036fSTvrtko Ursulin static inline void 670354d036fSTvrtko Ursulin trace_i915_gem_request_execute(struct drm_i915_gem_request *req) 671354d036fSTvrtko Ursulin { 672354d036fSTvrtko Ursulin } 673d7d96833STvrtko Ursulin 674d7d96833STvrtko Ursulin static inline void 675d7d96833STvrtko Ursulin trace_i915_gem_request_in(struct drm_i915_gem_request *req, unsigned int port) 676d7d96833STvrtko Ursulin { 677d7d96833STvrtko Ursulin } 678d7d96833STvrtko Ursulin 679d7d96833STvrtko Ursulin static inline void 680d7d96833STvrtko Ursulin trace_i915_gem_request_out(struct drm_i915_gem_request *req) 681d7d96833STvrtko Ursulin { 682d7d96833STvrtko Ursulin } 683354d036fSTvrtko Ursulin #endif 684354d036fSTvrtko Ursulin #endif 685354d036fSTvrtko Ursulin 686dffabc8fSTvrtko Ursulin TRACE_EVENT(intel_engine_notify, 687dffabc8fSTvrtko Ursulin TP_PROTO(struct intel_engine_cs *engine, bool waiters), 688dffabc8fSTvrtko Ursulin TP_ARGS(engine, waiters), 689814e9b57SChris Wilson 690814e9b57SChris Wilson TP_STRUCT__entry( 691814e9b57SChris Wilson __field(u32, dev) 692814e9b57SChris Wilson __field(u32, ring) 693814e9b57SChris Wilson __field(u32, seqno) 694dffabc8fSTvrtko Ursulin __field(bool, waiters) 695814e9b57SChris Wilson ), 696814e9b57SChris Wilson 697814e9b57SChris Wilson TP_fast_assign( 69891c8a326SChris Wilson __entry->dev = engine->i915->drm.primary->index; 6994a570db5STvrtko Ursulin __entry->ring = engine->id; 7001b7744e7SChris Wilson __entry->seqno = intel_engine_get_seqno(engine); 701dffabc8fSTvrtko Ursulin __entry->waiters = waiters; 702814e9b57SChris Wilson ), 703814e9b57SChris Wilson 704dffabc8fSTvrtko Ursulin TP_printk("dev=%u, ring=%u, seqno=%u, waiters=%u", 705dffabc8fSTvrtko Ursulin __entry->dev, __entry->ring, __entry->seqno, 706dffabc8fSTvrtko Ursulin __entry->waiters) 7071c5d22f7SChris Wilson ); 7081c5d22f7SChris Wilson 709903cf20cSLi Zefan DEFINE_EVENT(i915_gem_request, i915_gem_request_retire, 71074328ee5SJohn Harrison TP_PROTO(struct drm_i915_gem_request *req), 71174328ee5SJohn Harrison TP_ARGS(req) 7121c5d22f7SChris Wilson ); 7131c5d22f7SChris Wilson 714f3fd3768SBen Widawsky TRACE_EVENT(i915_gem_request_wait_begin, 71593692502STvrtko Ursulin TP_PROTO(struct drm_i915_gem_request *req, unsigned int flags), 71693692502STvrtko Ursulin TP_ARGS(req, flags), 717f3fd3768SBen Widawsky 718f3fd3768SBen Widawsky TP_STRUCT__entry( 719f3fd3768SBen Widawsky __field(u32, dev) 720f3fd3768SBen Widawsky __field(u32, ring) 72193692502STvrtko Ursulin __field(u32, ctx) 722f3fd3768SBen Widawsky __field(u32, seqno) 72393692502STvrtko Ursulin __field(u32, global) 72493692502STvrtko Ursulin __field(unsigned int, flags) 725f3fd3768SBen Widawsky ), 726f3fd3768SBen Widawsky 727f3fd3768SBen Widawsky /* NB: the blocking information is racy since mutex_is_locked 728f3fd3768SBen Widawsky * doesn't check that the current thread holds the lock. The only 729f3fd3768SBen Widawsky * other option would be to pass the boolean information of whether 730f3fd3768SBen Widawsky * or not the class was blocking down through the stack which is 731f3fd3768SBen Widawsky * less desirable. 732f3fd3768SBen Widawsky */ 733f3fd3768SBen Widawsky TP_fast_assign( 73491c8a326SChris Wilson __entry->dev = req->i915->drm.primary->index; 735c033666aSChris Wilson __entry->ring = req->engine->id; 73693692502STvrtko Ursulin __entry->ctx = req->ctx->hw_id; 73793692502STvrtko Ursulin __entry->seqno = req->fence.seqno; 73893692502STvrtko Ursulin __entry->global = req->global_seqno; 73993692502STvrtko Ursulin __entry->flags = flags; 740f3fd3768SBen Widawsky ), 741f3fd3768SBen Widawsky 74293692502STvrtko Ursulin TP_printk("dev=%u, ring=%u, ctx=%u, seqno=%u, global=%u, blocking=%u, flags=0x%x", 74393692502STvrtko Ursulin __entry->dev, __entry->ring, __entry->ctx, __entry->seqno, 74493692502STvrtko Ursulin __entry->global, !!(__entry->flags & I915_WAIT_LOCKED), 74593692502STvrtko Ursulin __entry->flags) 7461c5d22f7SChris Wilson ); 7471c5d22f7SChris Wilson 748903cf20cSLi Zefan DEFINE_EVENT(i915_gem_request, i915_gem_request_wait_end, 74974328ee5SJohn Harrison TP_PROTO(struct drm_i915_gem_request *req), 75074328ee5SJohn Harrison TP_ARGS(req) 751903cf20cSLi Zefan ); 752903cf20cSLi Zefan 753e5510facSJesse Barnes TRACE_EVENT(i915_flip_request, 75405394f39SChris Wilson TP_PROTO(int plane, struct drm_i915_gem_object *obj), 755e5510facSJesse Barnes 756e5510facSJesse Barnes TP_ARGS(plane, obj), 757e5510facSJesse Barnes 758e5510facSJesse Barnes TP_STRUCT__entry( 759e5510facSJesse Barnes __field(int, plane) 76005394f39SChris Wilson __field(struct drm_i915_gem_object *, obj) 761e5510facSJesse Barnes ), 762e5510facSJesse Barnes 763e5510facSJesse Barnes TP_fast_assign( 764e5510facSJesse Barnes __entry->plane = plane; 765e5510facSJesse Barnes __entry->obj = obj; 766e5510facSJesse Barnes ), 767e5510facSJesse Barnes 768e5510facSJesse Barnes TP_printk("plane=%d, obj=%p", __entry->plane, __entry->obj) 769e5510facSJesse Barnes ); 770e5510facSJesse Barnes 771e5510facSJesse Barnes TRACE_EVENT(i915_flip_complete, 77205394f39SChris Wilson TP_PROTO(int plane, struct drm_i915_gem_object *obj), 773e5510facSJesse Barnes 774e5510facSJesse Barnes TP_ARGS(plane, obj), 775e5510facSJesse Barnes 776e5510facSJesse Barnes TP_STRUCT__entry( 777e5510facSJesse Barnes __field(int, plane) 77805394f39SChris Wilson __field(struct drm_i915_gem_object *, obj) 779e5510facSJesse Barnes ), 780e5510facSJesse Barnes 781e5510facSJesse Barnes TP_fast_assign( 782e5510facSJesse Barnes __entry->plane = plane; 783e5510facSJesse Barnes __entry->obj = obj; 784e5510facSJesse Barnes ), 785e5510facSJesse Barnes 786e5510facSJesse Barnes TP_printk("plane=%d, obj=%p", __entry->plane, __entry->obj) 787e5510facSJesse Barnes ); 788e5510facSJesse Barnes 789ed71f1b4SChris Wilson TRACE_EVENT_CONDITION(i915_reg_rw, 790f0f59a00SVille Syrjälä TP_PROTO(bool write, i915_reg_t reg, u64 val, int len, bool trace), 791ba4f01a3SYuanhan Liu 792ed71f1b4SChris Wilson TP_ARGS(write, reg, val, len, trace), 793ed71f1b4SChris Wilson 794ed71f1b4SChris Wilson TP_CONDITION(trace), 795ba4f01a3SYuanhan Liu 796ba4f01a3SYuanhan Liu TP_STRUCT__entry( 797db53a302SChris Wilson __field(u64, val) 798db53a302SChris Wilson __field(u32, reg) 799db53a302SChris Wilson __field(u16, write) 800db53a302SChris Wilson __field(u16, len) 801ba4f01a3SYuanhan Liu ), 802ba4f01a3SYuanhan Liu 803ba4f01a3SYuanhan Liu TP_fast_assign( 804db53a302SChris Wilson __entry->val = (u64)val; 805f0f59a00SVille Syrjälä __entry->reg = i915_mmio_reg_offset(reg); 806db53a302SChris Wilson __entry->write = write; 807ba4f01a3SYuanhan Liu __entry->len = len; 808ba4f01a3SYuanhan Liu ), 809ba4f01a3SYuanhan Liu 810db53a302SChris Wilson TP_printk("%s reg=0x%x, len=%d, val=(0x%x, 0x%x)", 811db53a302SChris Wilson __entry->write ? "write" : "read", 812db53a302SChris Wilson __entry->reg, __entry->len, 813db53a302SChris Wilson (u32)(__entry->val & 0xffffffff), 814db53a302SChris Wilson (u32)(__entry->val >> 32)) 815ba4f01a3SYuanhan Liu ); 816ba4f01a3SYuanhan Liu 817be2cde9aSDaniel Vetter TRACE_EVENT(intel_gpu_freq_change, 818be2cde9aSDaniel Vetter TP_PROTO(u32 freq), 819be2cde9aSDaniel Vetter TP_ARGS(freq), 820be2cde9aSDaniel Vetter 821be2cde9aSDaniel Vetter TP_STRUCT__entry( 822be2cde9aSDaniel Vetter __field(u32, freq) 823be2cde9aSDaniel Vetter ), 824be2cde9aSDaniel Vetter 825be2cde9aSDaniel Vetter TP_fast_assign( 826be2cde9aSDaniel Vetter __entry->freq = freq; 827be2cde9aSDaniel Vetter ), 828be2cde9aSDaniel Vetter 829be2cde9aSDaniel Vetter TP_printk("new_freq=%u", __entry->freq) 830be2cde9aSDaniel Vetter ); 831be2cde9aSDaniel Vetter 832198c974dSDaniele Ceraolo Spurio /** 833198c974dSDaniele Ceraolo Spurio * DOC: i915_ppgtt_create and i915_ppgtt_release tracepoints 834198c974dSDaniele Ceraolo Spurio * 835198c974dSDaniele Ceraolo Spurio * With full ppgtt enabled each process using drm will allocate at least one 836198c974dSDaniele Ceraolo Spurio * translation table. With these traces it is possible to keep track of the 837198c974dSDaniele Ceraolo Spurio * allocation and of the lifetime of the tables; this can be used during 838198c974dSDaniele Ceraolo Spurio * testing/debug to verify that we are not leaking ppgtts. 839198c974dSDaniele Ceraolo Spurio * These traces identify the ppgtt through the vm pointer, which is also printed 840198c974dSDaniele Ceraolo Spurio * by the i915_vma_bind and i915_vma_unbind tracepoints. 841198c974dSDaniele Ceraolo Spurio */ 842198c974dSDaniele Ceraolo Spurio DECLARE_EVENT_CLASS(i915_ppgtt, 843198c974dSDaniele Ceraolo Spurio TP_PROTO(struct i915_address_space *vm), 844198c974dSDaniele Ceraolo Spurio TP_ARGS(vm), 845198c974dSDaniele Ceraolo Spurio 846198c974dSDaniele Ceraolo Spurio TP_STRUCT__entry( 847198c974dSDaniele Ceraolo Spurio __field(struct i915_address_space *, vm) 848198c974dSDaniele Ceraolo Spurio __field(u32, dev) 849198c974dSDaniele Ceraolo Spurio ), 850198c974dSDaniele Ceraolo Spurio 851198c974dSDaniele Ceraolo Spurio TP_fast_assign( 852198c974dSDaniele Ceraolo Spurio __entry->vm = vm; 853c6385c94SChris Wilson __entry->dev = vm->i915->drm.primary->index; 854198c974dSDaniele Ceraolo Spurio ), 855198c974dSDaniele Ceraolo Spurio 856198c974dSDaniele Ceraolo Spurio TP_printk("dev=%u, vm=%p", __entry->dev, __entry->vm) 857198c974dSDaniele Ceraolo Spurio ) 858198c974dSDaniele Ceraolo Spurio 859198c974dSDaniele Ceraolo Spurio DEFINE_EVENT(i915_ppgtt, i915_ppgtt_create, 860198c974dSDaniele Ceraolo Spurio TP_PROTO(struct i915_address_space *vm), 861198c974dSDaniele Ceraolo Spurio TP_ARGS(vm) 862198c974dSDaniele Ceraolo Spurio ); 863198c974dSDaniele Ceraolo Spurio 864198c974dSDaniele Ceraolo Spurio DEFINE_EVENT(i915_ppgtt, i915_ppgtt_release, 865198c974dSDaniele Ceraolo Spurio TP_PROTO(struct i915_address_space *vm), 866198c974dSDaniele Ceraolo Spurio TP_ARGS(vm) 867198c974dSDaniele Ceraolo Spurio ); 868198c974dSDaniele Ceraolo Spurio 869198c974dSDaniele Ceraolo Spurio /** 870198c974dSDaniele Ceraolo Spurio * DOC: i915_context_create and i915_context_free tracepoints 871198c974dSDaniele Ceraolo Spurio * 872198c974dSDaniele Ceraolo Spurio * These tracepoints are used to track creation and deletion of contexts. 873198c974dSDaniele Ceraolo Spurio * If full ppgtt is enabled, they also print the address of the vm assigned to 874198c974dSDaniele Ceraolo Spurio * the context. 875198c974dSDaniele Ceraolo Spurio */ 876198c974dSDaniele Ceraolo Spurio DECLARE_EVENT_CLASS(i915_context, 877e2efd130SChris Wilson TP_PROTO(struct i915_gem_context *ctx), 878198c974dSDaniele Ceraolo Spurio TP_ARGS(ctx), 879198c974dSDaniele Ceraolo Spurio 880198c974dSDaniele Ceraolo Spurio TP_STRUCT__entry( 881198c974dSDaniele Ceraolo Spurio __field(u32, dev) 882e2efd130SChris Wilson __field(struct i915_gem_context *, ctx) 88399c181a0STvrtko Ursulin __field(u32, hw_id) 884198c974dSDaniele Ceraolo Spurio __field(struct i915_address_space *, vm) 885198c974dSDaniele Ceraolo Spurio ), 886198c974dSDaniele Ceraolo Spurio 887198c974dSDaniele Ceraolo Spurio TP_fast_assign( 88891c8a326SChris Wilson __entry->dev = ctx->i915->drm.primary->index; 88999c181a0STvrtko Ursulin __entry->ctx = ctx; 89099c181a0STvrtko Ursulin __entry->hw_id = ctx->hw_id; 89199c181a0STvrtko Ursulin __entry->vm = ctx->ppgtt ? &ctx->ppgtt->base : NULL; 892198c974dSDaniele Ceraolo Spurio ), 893198c974dSDaniele Ceraolo Spurio 89499c181a0STvrtko Ursulin TP_printk("dev=%u, ctx=%p, ctx_vm=%p, hw_id=%u", 89599c181a0STvrtko Ursulin __entry->dev, __entry->ctx, __entry->vm, __entry->hw_id) 896198c974dSDaniele Ceraolo Spurio ) 897198c974dSDaniele Ceraolo Spurio 898198c974dSDaniele Ceraolo Spurio DEFINE_EVENT(i915_context, i915_context_create, 899e2efd130SChris Wilson TP_PROTO(struct i915_gem_context *ctx), 900198c974dSDaniele Ceraolo Spurio TP_ARGS(ctx) 901198c974dSDaniele Ceraolo Spurio ); 902198c974dSDaniele Ceraolo Spurio 903198c974dSDaniele Ceraolo Spurio DEFINE_EVENT(i915_context, i915_context_free, 904e2efd130SChris Wilson TP_PROTO(struct i915_gem_context *ctx), 905198c974dSDaniele Ceraolo Spurio TP_ARGS(ctx) 906198c974dSDaniele Ceraolo Spurio ); 907198c974dSDaniele Ceraolo Spurio 908198c974dSDaniele Ceraolo Spurio /** 909198c974dSDaniele Ceraolo Spurio * DOC: switch_mm tracepoint 910198c974dSDaniele Ceraolo Spurio * 911198c974dSDaniele Ceraolo Spurio * This tracepoint allows tracking of the mm switch, which is an important point 912198c974dSDaniele Ceraolo Spurio * in the lifetime of the vm in the legacy submission path. This tracepoint is 913198c974dSDaniele Ceraolo Spurio * called only if full ppgtt is enabled. 914198c974dSDaniele Ceraolo Spurio */ 915198c974dSDaniele Ceraolo Spurio TRACE_EVENT(switch_mm, 916e2efd130SChris Wilson TP_PROTO(struct intel_engine_cs *engine, struct i915_gem_context *to), 917198c974dSDaniele Ceraolo Spurio 9184a570db5STvrtko Ursulin TP_ARGS(engine, to), 919198c974dSDaniele Ceraolo Spurio 920198c974dSDaniele Ceraolo Spurio TP_STRUCT__entry( 921198c974dSDaniele Ceraolo Spurio __field(u32, ring) 922e2efd130SChris Wilson __field(struct i915_gem_context *, to) 923198c974dSDaniele Ceraolo Spurio __field(struct i915_address_space *, vm) 924198c974dSDaniele Ceraolo Spurio __field(u32, dev) 925198c974dSDaniele Ceraolo Spurio ), 926198c974dSDaniele Ceraolo Spurio 927198c974dSDaniele Ceraolo Spurio TP_fast_assign( 9284a570db5STvrtko Ursulin __entry->ring = engine->id; 929198c974dSDaniele Ceraolo Spurio __entry->to = to; 930198c974dSDaniele Ceraolo Spurio __entry->vm = to->ppgtt? &to->ppgtt->base : NULL; 93191c8a326SChris Wilson __entry->dev = engine->i915->drm.primary->index; 932198c974dSDaniele Ceraolo Spurio ), 933198c974dSDaniele Ceraolo Spurio 934198c974dSDaniele Ceraolo Spurio TP_printk("dev=%u, ring=%u, ctx=%p, ctx_vm=%p", 935198c974dSDaniele Ceraolo Spurio __entry->dev, __entry->ring, __entry->to, __entry->vm) 936198c974dSDaniele Ceraolo Spurio ); 937198c974dSDaniele Ceraolo Spurio 9381c5d22f7SChris Wilson #endif /* _I915_TRACE_H_ */ 9391c5d22f7SChris Wilson 9401c5d22f7SChris Wilson /* This part must be outside protection */ 9411c5d22f7SChris Wilson #undef TRACE_INCLUDE_PATH 942a7c54278SPeter Clifton #define TRACE_INCLUDE_PATH . 9431c5d22f7SChris Wilson #include <trace/define_trace.h> 944