1b2441318SGreg Kroah-Hartman /* SPDX-License-Identifier: GPL-2.0 */ 21c5d22f7SChris Wilson #if !defined(_I915_TRACE_H_) || defined(TRACE_HEADER_MULTI_READ) 31c5d22f7SChris Wilson #define _I915_TRACE_H_ 41c5d22f7SChris Wilson 51c5d22f7SChris Wilson #include <linux/stringify.h> 61c5d22f7SChris Wilson #include <linux/types.h> 71c5d22f7SChris Wilson #include <linux/tracepoint.h> 81c5d22f7SChris Wilson 9fcd70cd3SDaniel Vetter #include <drm/drm_drv.h> 10fcd70cd3SDaniel Vetter 117c53e628SJani Nikula #include "display/intel_crtc.h" 121d455f8dSJani Nikula #include "display/intel_display_types.h" 13112ed2d3SChris Wilson #include "gt/intel_engine.h" 14112ed2d3SChris Wilson 1505394f39SChris Wilson #include "i915_drv.h" 16440e2b3dSJani Nikula #include "i915_irq.h" 171c5d22f7SChris Wilson 181c5d22f7SChris Wilson #undef TRACE_SYSTEM 191c5d22f7SChris Wilson #define TRACE_SYSTEM i915 201c5d22f7SChris Wilson #define TRACE_INCLUDE_FILE i915_trace 211c5d22f7SChris Wilson 22c137d660SVille Syrjälä /* watermark/fifo updates */ 23c137d660SVille Syrjälä 240b2599a4SVille Syrjälä TRACE_EVENT(intel_pipe_enable, 254c888e7bSVille Syrjälä TP_PROTO(struct intel_crtc *crtc), 264c888e7bSVille Syrjälä TP_ARGS(crtc), 270b2599a4SVille Syrjälä 280b2599a4SVille Syrjälä TP_STRUCT__entry( 290b2599a4SVille Syrjälä __array(u32, frame, 3) 300b2599a4SVille Syrjälä __array(u32, scanline, 3) 310b2599a4SVille Syrjälä __field(enum pipe, pipe) 320b2599a4SVille Syrjälä ), 330b2599a4SVille Syrjälä TP_fast_assign( 344c888e7bSVille Syrjälä struct drm_i915_private *dev_priv = to_i915(crtc->base.dev); 354c888e7bSVille Syrjälä struct intel_crtc *it__; 364c888e7bSVille Syrjälä for_each_intel_crtc(&dev_priv->drm, it__) { 374c888e7bSVille Syrjälä __entry->frame[it__->pipe] = intel_crtc_get_vblank_counter(it__); 384c888e7bSVille Syrjälä __entry->scanline[it__->pipe] = intel_get_crtc_scanline(it__); 390b2599a4SVille Syrjälä } 404c888e7bSVille Syrjälä __entry->pipe = crtc->pipe; 410b2599a4SVille Syrjälä ), 420b2599a4SVille Syrjälä 430b2599a4SVille Syrjälä TP_printk("pipe %c enable, pipe A: frame=%u, scanline=%u, pipe B: frame=%u, scanline=%u, pipe C: frame=%u, scanline=%u", 440b2599a4SVille Syrjälä pipe_name(__entry->pipe), 450b2599a4SVille Syrjälä __entry->frame[PIPE_A], __entry->scanline[PIPE_A], 460b2599a4SVille Syrjälä __entry->frame[PIPE_B], __entry->scanline[PIPE_B], 470b2599a4SVille Syrjälä __entry->frame[PIPE_C], __entry->scanline[PIPE_C]) 480b2599a4SVille Syrjälä ); 490b2599a4SVille Syrjälä 500b2599a4SVille Syrjälä TRACE_EVENT(intel_pipe_disable, 514c888e7bSVille Syrjälä TP_PROTO(struct intel_crtc *crtc), 524c888e7bSVille Syrjälä TP_ARGS(crtc), 530b2599a4SVille Syrjälä 540b2599a4SVille Syrjälä TP_STRUCT__entry( 550b2599a4SVille Syrjälä __array(u32, frame, 3) 560b2599a4SVille Syrjälä __array(u32, scanline, 3) 570b2599a4SVille Syrjälä __field(enum pipe, pipe) 580b2599a4SVille Syrjälä ), 590b2599a4SVille Syrjälä 600b2599a4SVille Syrjälä TP_fast_assign( 614c888e7bSVille Syrjälä struct drm_i915_private *dev_priv = to_i915(crtc->base.dev); 624c888e7bSVille Syrjälä struct intel_crtc *it__; 634c888e7bSVille Syrjälä for_each_intel_crtc(&dev_priv->drm, it__) { 644c888e7bSVille Syrjälä __entry->frame[it__->pipe] = intel_crtc_get_vblank_counter(it__); 654c888e7bSVille Syrjälä __entry->scanline[it__->pipe] = intel_get_crtc_scanline(it__); 660b2599a4SVille Syrjälä } 674c888e7bSVille Syrjälä __entry->pipe = crtc->pipe; 680b2599a4SVille Syrjälä ), 690b2599a4SVille Syrjälä 700b2599a4SVille Syrjälä TP_printk("pipe %c disable, pipe A: frame=%u, scanline=%u, pipe B: frame=%u, scanline=%u, pipe C: frame=%u, scanline=%u", 710b2599a4SVille Syrjälä pipe_name(__entry->pipe), 720b2599a4SVille Syrjälä __entry->frame[PIPE_A], __entry->scanline[PIPE_A], 730b2599a4SVille Syrjälä __entry->frame[PIPE_B], __entry->scanline[PIPE_B], 740b2599a4SVille Syrjälä __entry->frame[PIPE_C], __entry->scanline[PIPE_C]) 750b2599a4SVille Syrjälä ); 760b2599a4SVille Syrjälä 775cee6c45SVille Syrjälä TRACE_EVENT(intel_pipe_crc, 785cee6c45SVille Syrjälä TP_PROTO(struct intel_crtc *crtc, const u32 *crcs), 795cee6c45SVille Syrjälä TP_ARGS(crtc, crcs), 805cee6c45SVille Syrjälä 815cee6c45SVille Syrjälä TP_STRUCT__entry( 825cee6c45SVille Syrjälä __field(enum pipe, pipe) 835cee6c45SVille Syrjälä __field(u32, frame) 845cee6c45SVille Syrjälä __field(u32, scanline) 855cee6c45SVille Syrjälä __array(u32, crcs, 5) 865cee6c45SVille Syrjälä ), 875cee6c45SVille Syrjälä 885cee6c45SVille Syrjälä TP_fast_assign( 895cee6c45SVille Syrjälä __entry->pipe = crtc->pipe; 904c888e7bSVille Syrjälä __entry->frame = intel_crtc_get_vblank_counter(crtc); 915cee6c45SVille Syrjälä __entry->scanline = intel_get_crtc_scanline(crtc); 925cee6c45SVille Syrjälä memcpy(__entry->crcs, crcs, sizeof(__entry->crcs)); 935cee6c45SVille Syrjälä ), 945cee6c45SVille Syrjälä 955cee6c45SVille Syrjälä TP_printk("pipe %c, frame=%u, scanline=%u crc=%08x %08x %08x %08x %08x", 965cee6c45SVille Syrjälä pipe_name(__entry->pipe), __entry->frame, __entry->scanline, 975cee6c45SVille Syrjälä __entry->crcs[0], __entry->crcs[1], __entry->crcs[2], 985cee6c45SVille Syrjälä __entry->crcs[3], __entry->crcs[4]) 995cee6c45SVille Syrjälä ); 1005cee6c45SVille Syrjälä 10153a7915cSVille Syrjälä TRACE_EVENT(intel_cpu_fifo_underrun, 10253a7915cSVille Syrjälä TP_PROTO(struct drm_i915_private *dev_priv, enum pipe pipe), 10353a7915cSVille Syrjälä TP_ARGS(dev_priv, pipe), 10453a7915cSVille Syrjälä 10553a7915cSVille Syrjälä TP_STRUCT__entry( 10653a7915cSVille Syrjälä __field(enum pipe, pipe) 10753a7915cSVille Syrjälä __field(u32, frame) 10853a7915cSVille Syrjälä __field(u32, scanline) 10953a7915cSVille Syrjälä ), 11053a7915cSVille Syrjälä 11153a7915cSVille Syrjälä TP_fast_assign( 1124c888e7bSVille Syrjälä struct intel_crtc *crtc = intel_get_crtc_for_pipe(dev_priv, pipe); 11353a7915cSVille Syrjälä __entry->pipe = pipe; 1144c888e7bSVille Syrjälä __entry->frame = intel_crtc_get_vblank_counter(crtc); 1154c888e7bSVille Syrjälä __entry->scanline = intel_get_crtc_scanline(crtc); 11653a7915cSVille Syrjälä ), 11753a7915cSVille Syrjälä 11853a7915cSVille Syrjälä TP_printk("pipe %c, frame=%u, scanline=%u", 11953a7915cSVille Syrjälä pipe_name(__entry->pipe), 12053a7915cSVille Syrjälä __entry->frame, __entry->scanline) 12153a7915cSVille Syrjälä ); 12253a7915cSVille Syrjälä 12353a7915cSVille Syrjälä TRACE_EVENT(intel_pch_fifo_underrun, 124034263a3SVille Syrjälä TP_PROTO(struct drm_i915_private *dev_priv, enum pipe pch_transcoder), 12553a7915cSVille Syrjälä TP_ARGS(dev_priv, pch_transcoder), 12653a7915cSVille Syrjälä 12753a7915cSVille Syrjälä TP_STRUCT__entry( 12853a7915cSVille Syrjälä __field(enum pipe, pipe) 12953a7915cSVille Syrjälä __field(u32, frame) 13053a7915cSVille Syrjälä __field(u32, scanline) 13153a7915cSVille Syrjälä ), 13253a7915cSVille Syrjälä 13353a7915cSVille Syrjälä TP_fast_assign( 134034263a3SVille Syrjälä enum pipe pipe = pch_transcoder; 1354c888e7bSVille Syrjälä struct intel_crtc *crtc = intel_get_crtc_for_pipe(dev_priv, pipe); 13653a7915cSVille Syrjälä __entry->pipe = pipe; 1374c888e7bSVille Syrjälä __entry->frame = intel_crtc_get_vblank_counter(crtc); 1384c888e7bSVille Syrjälä __entry->scanline = intel_get_crtc_scanline(crtc); 13953a7915cSVille Syrjälä ), 14053a7915cSVille Syrjälä 14153a7915cSVille Syrjälä TP_printk("pch transcoder %c, frame=%u, scanline=%u", 14253a7915cSVille Syrjälä pipe_name(__entry->pipe), 14353a7915cSVille Syrjälä __entry->frame, __entry->scanline) 14453a7915cSVille Syrjälä ); 14553a7915cSVille Syrjälä 1461489bba8SVille Syrjälä TRACE_EVENT(intel_memory_cxsr, 1471489bba8SVille Syrjälä TP_PROTO(struct drm_i915_private *dev_priv, bool old, bool new), 1481489bba8SVille Syrjälä TP_ARGS(dev_priv, old, new), 1491489bba8SVille Syrjälä 1501489bba8SVille Syrjälä TP_STRUCT__entry( 1511489bba8SVille Syrjälä __array(u32, frame, 3) 1521489bba8SVille Syrjälä __array(u32, scanline, 3) 1531489bba8SVille Syrjälä __field(bool, old) 1541489bba8SVille Syrjälä __field(bool, new) 1551489bba8SVille Syrjälä ), 1561489bba8SVille Syrjälä 1571489bba8SVille Syrjälä TP_fast_assign( 1584c888e7bSVille Syrjälä struct intel_crtc *crtc; 1594c888e7bSVille Syrjälä for_each_intel_crtc(&dev_priv->drm, crtc) { 1604c888e7bSVille Syrjälä __entry->frame[crtc->pipe] = intel_crtc_get_vblank_counter(crtc); 1614c888e7bSVille Syrjälä __entry->scanline[crtc->pipe] = intel_get_crtc_scanline(crtc); 1621489bba8SVille Syrjälä } 1631489bba8SVille Syrjälä __entry->old = old; 1641489bba8SVille Syrjälä __entry->new = new; 1651489bba8SVille Syrjälä ), 1661489bba8SVille Syrjälä 1671489bba8SVille Syrjälä TP_printk("%s->%s, pipe A: frame=%u, scanline=%u, pipe B: frame=%u, scanline=%u, pipe C: frame=%u, scanline=%u", 1681489bba8SVille Syrjälä onoff(__entry->old), onoff(__entry->new), 1691489bba8SVille Syrjälä __entry->frame[PIPE_A], __entry->scanline[PIPE_A], 1701489bba8SVille Syrjälä __entry->frame[PIPE_B], __entry->scanline[PIPE_B], 1711489bba8SVille Syrjälä __entry->frame[PIPE_C], __entry->scanline[PIPE_C]) 1721489bba8SVille Syrjälä ); 1731489bba8SVille Syrjälä 174e93329a5SVille Syrjälä TRACE_EVENT(g4x_wm, 175e93329a5SVille Syrjälä TP_PROTO(struct intel_crtc *crtc, const struct g4x_wm_values *wm), 176e93329a5SVille Syrjälä TP_ARGS(crtc, wm), 177e93329a5SVille Syrjälä 178e93329a5SVille Syrjälä TP_STRUCT__entry( 179e93329a5SVille Syrjälä __field(enum pipe, pipe) 180e93329a5SVille Syrjälä __field(u32, frame) 181e93329a5SVille Syrjälä __field(u32, scanline) 182e93329a5SVille Syrjälä __field(u16, primary) 183e93329a5SVille Syrjälä __field(u16, sprite) 184e93329a5SVille Syrjälä __field(u16, cursor) 185e93329a5SVille Syrjälä __field(u16, sr_plane) 186e93329a5SVille Syrjälä __field(u16, sr_cursor) 187e93329a5SVille Syrjälä __field(u16, sr_fbc) 188e93329a5SVille Syrjälä __field(u16, hpll_plane) 189e93329a5SVille Syrjälä __field(u16, hpll_cursor) 190e93329a5SVille Syrjälä __field(u16, hpll_fbc) 191e93329a5SVille Syrjälä __field(bool, cxsr) 192e93329a5SVille Syrjälä __field(bool, hpll) 193e93329a5SVille Syrjälä __field(bool, fbc) 194e93329a5SVille Syrjälä ), 195e93329a5SVille Syrjälä 196e93329a5SVille Syrjälä TP_fast_assign( 197e93329a5SVille Syrjälä __entry->pipe = crtc->pipe; 1984c888e7bSVille Syrjälä __entry->frame = intel_crtc_get_vblank_counter(crtc); 199e93329a5SVille Syrjälä __entry->scanline = intel_get_crtc_scanline(crtc); 200e93329a5SVille Syrjälä __entry->primary = wm->pipe[crtc->pipe].plane[PLANE_PRIMARY]; 201e93329a5SVille Syrjälä __entry->sprite = wm->pipe[crtc->pipe].plane[PLANE_SPRITE0]; 202e93329a5SVille Syrjälä __entry->cursor = wm->pipe[crtc->pipe].plane[PLANE_CURSOR]; 203e93329a5SVille Syrjälä __entry->sr_plane = wm->sr.plane; 204e93329a5SVille Syrjälä __entry->sr_cursor = wm->sr.cursor; 205e93329a5SVille Syrjälä __entry->sr_fbc = wm->sr.fbc; 206e93329a5SVille Syrjälä __entry->hpll_plane = wm->hpll.plane; 207e93329a5SVille Syrjälä __entry->hpll_cursor = wm->hpll.cursor; 208e93329a5SVille Syrjälä __entry->hpll_fbc = wm->hpll.fbc; 209e93329a5SVille Syrjälä __entry->cxsr = wm->cxsr; 210e93329a5SVille Syrjälä __entry->hpll = wm->hpll_en; 211e93329a5SVille Syrjälä __entry->fbc = wm->fbc_en; 212e93329a5SVille Syrjälä ), 213e93329a5SVille Syrjälä 214e93329a5SVille Syrjälä TP_printk("pipe %c, frame=%u, scanline=%u, wm %d/%d/%d, sr %s/%d/%d/%d, hpll %s/%d/%d/%d, fbc %s", 215e93329a5SVille Syrjälä pipe_name(__entry->pipe), __entry->frame, __entry->scanline, 216e93329a5SVille Syrjälä __entry->primary, __entry->sprite, __entry->cursor, 217e93329a5SVille Syrjälä yesno(__entry->cxsr), __entry->sr_plane, __entry->sr_cursor, __entry->sr_fbc, 218e93329a5SVille Syrjälä yesno(__entry->hpll), __entry->hpll_plane, __entry->hpll_cursor, __entry->hpll_fbc, 219e93329a5SVille Syrjälä yesno(__entry->fbc)) 220e93329a5SVille Syrjälä ); 221e93329a5SVille Syrjälä 222c137d660SVille Syrjälä TRACE_EVENT(vlv_wm, 223c137d660SVille Syrjälä TP_PROTO(struct intel_crtc *crtc, const struct vlv_wm_values *wm), 224c137d660SVille Syrjälä TP_ARGS(crtc, wm), 225c137d660SVille Syrjälä 226c137d660SVille Syrjälä TP_STRUCT__entry( 227c137d660SVille Syrjälä __field(enum pipe, pipe) 228c137d660SVille Syrjälä __field(u32, frame) 229c137d660SVille Syrjälä __field(u32, scanline) 230c137d660SVille Syrjälä __field(u32, level) 231c137d660SVille Syrjälä __field(u32, cxsr) 232c137d660SVille Syrjälä __field(u32, primary) 233c137d660SVille Syrjälä __field(u32, sprite0) 234c137d660SVille Syrjälä __field(u32, sprite1) 235c137d660SVille Syrjälä __field(u32, cursor) 236c137d660SVille Syrjälä __field(u32, sr_plane) 237c137d660SVille Syrjälä __field(u32, sr_cursor) 238c137d660SVille Syrjälä ), 239c137d660SVille Syrjälä 240c137d660SVille Syrjälä TP_fast_assign( 241c137d660SVille Syrjälä __entry->pipe = crtc->pipe; 2424c888e7bSVille Syrjälä __entry->frame = intel_crtc_get_vblank_counter(crtc); 243c137d660SVille Syrjälä __entry->scanline = intel_get_crtc_scanline(crtc); 244c137d660SVille Syrjälä __entry->level = wm->level; 245c137d660SVille Syrjälä __entry->cxsr = wm->cxsr; 246c137d660SVille Syrjälä __entry->primary = wm->pipe[crtc->pipe].plane[PLANE_PRIMARY]; 247c137d660SVille Syrjälä __entry->sprite0 = wm->pipe[crtc->pipe].plane[PLANE_SPRITE0]; 248c137d660SVille Syrjälä __entry->sprite1 = wm->pipe[crtc->pipe].plane[PLANE_SPRITE1]; 249c137d660SVille Syrjälä __entry->cursor = wm->pipe[crtc->pipe].plane[PLANE_CURSOR]; 250c137d660SVille Syrjälä __entry->sr_plane = wm->sr.plane; 251c137d660SVille Syrjälä __entry->sr_cursor = wm->sr.cursor; 252c137d660SVille Syrjälä ), 253c137d660SVille Syrjälä 254c137d660SVille Syrjälä TP_printk("pipe %c, frame=%u, scanline=%u, level=%d, cxsr=%d, wm %d/%d/%d/%d, sr %d/%d", 255c137d660SVille Syrjälä pipe_name(__entry->pipe), __entry->frame, 256c137d660SVille Syrjälä __entry->scanline, __entry->level, __entry->cxsr, 257c137d660SVille Syrjälä __entry->primary, __entry->sprite0, __entry->sprite1, __entry->cursor, 258c137d660SVille Syrjälä __entry->sr_plane, __entry->sr_cursor) 259c137d660SVille Syrjälä ); 260c137d660SVille Syrjälä 261c137d660SVille Syrjälä TRACE_EVENT(vlv_fifo_size, 262c137d660SVille Syrjälä TP_PROTO(struct intel_crtc *crtc, u32 sprite0_start, u32 sprite1_start, u32 fifo_size), 263c137d660SVille Syrjälä TP_ARGS(crtc, sprite0_start, sprite1_start, fifo_size), 264c137d660SVille Syrjälä 265c137d660SVille Syrjälä TP_STRUCT__entry( 266c137d660SVille Syrjälä __field(enum pipe, pipe) 267c137d660SVille Syrjälä __field(u32, frame) 268c137d660SVille Syrjälä __field(u32, scanline) 269c137d660SVille Syrjälä __field(u32, sprite0_start) 270c137d660SVille Syrjälä __field(u32, sprite1_start) 271c137d660SVille Syrjälä __field(u32, fifo_size) 272c137d660SVille Syrjälä ), 273c137d660SVille Syrjälä 274c137d660SVille Syrjälä TP_fast_assign( 275c137d660SVille Syrjälä __entry->pipe = crtc->pipe; 2764c888e7bSVille Syrjälä __entry->frame = intel_crtc_get_vblank_counter(crtc); 277c137d660SVille Syrjälä __entry->scanline = intel_get_crtc_scanline(crtc); 278c137d660SVille Syrjälä __entry->sprite0_start = sprite0_start; 279c137d660SVille Syrjälä __entry->sprite1_start = sprite1_start; 280c137d660SVille Syrjälä __entry->fifo_size = fifo_size; 281c137d660SVille Syrjälä ), 282c137d660SVille Syrjälä 283c137d660SVille Syrjälä TP_printk("pipe %c, frame=%u, scanline=%u, %d/%d/%d", 284c137d660SVille Syrjälä pipe_name(__entry->pipe), __entry->frame, 285c137d660SVille Syrjälä __entry->scanline, __entry->sprite0_start, 286c137d660SVille Syrjälä __entry->sprite1_start, __entry->fifo_size) 287c137d660SVille Syrjälä ); 288c137d660SVille Syrjälä 28972259536SVille Syrjälä /* plane updates */ 29072259536SVille Syrjälä 29172259536SVille Syrjälä TRACE_EVENT(intel_update_plane, 29272259536SVille Syrjälä TP_PROTO(struct drm_plane *plane, struct intel_crtc *crtc), 29372259536SVille Syrjälä TP_ARGS(plane, crtc), 29472259536SVille Syrjälä 29572259536SVille Syrjälä TP_STRUCT__entry( 29672259536SVille Syrjälä __field(enum pipe, pipe) 29772259536SVille Syrjälä __field(u32, frame) 29872259536SVille Syrjälä __field(u32, scanline) 29972259536SVille Syrjälä __array(int, src, 4) 30072259536SVille Syrjälä __array(int, dst, 4) 30186c9640bSSteven Rostedt (VMware) __string(name, plane->name) 30272259536SVille Syrjälä ), 30372259536SVille Syrjälä 30472259536SVille Syrjälä TP_fast_assign( 30586c9640bSSteven Rostedt (VMware) __assign_str(name, plane->name); 30672259536SVille Syrjälä __entry->pipe = crtc->pipe; 3074c888e7bSVille Syrjälä __entry->frame = intel_crtc_get_vblank_counter(crtc); 30872259536SVille Syrjälä __entry->scanline = intel_get_crtc_scanline(crtc); 30972259536SVille Syrjälä memcpy(__entry->src, &plane->state->src, sizeof(__entry->src)); 31072259536SVille Syrjälä memcpy(__entry->dst, &plane->state->dst, sizeof(__entry->dst)); 31172259536SVille Syrjälä ), 31272259536SVille Syrjälä 31372259536SVille Syrjälä TP_printk("pipe %c, plane %s, frame=%u, scanline=%u, " DRM_RECT_FP_FMT " -> " DRM_RECT_FMT, 31486c9640bSSteven Rostedt (VMware) pipe_name(__entry->pipe), __get_str(name), 31572259536SVille Syrjälä __entry->frame, __entry->scanline, 31672259536SVille Syrjälä DRM_RECT_FP_ARG((const struct drm_rect *)__entry->src), 31772259536SVille Syrjälä DRM_RECT_ARG((const struct drm_rect *)__entry->dst)) 31872259536SVille Syrjälä ); 31972259536SVille Syrjälä 32072259536SVille Syrjälä TRACE_EVENT(intel_disable_plane, 32172259536SVille Syrjälä TP_PROTO(struct drm_plane *plane, struct intel_crtc *crtc), 32272259536SVille Syrjälä TP_ARGS(plane, crtc), 32372259536SVille Syrjälä 32472259536SVille Syrjälä TP_STRUCT__entry( 32572259536SVille Syrjälä __field(enum pipe, pipe) 32672259536SVille Syrjälä __field(u32, frame) 32772259536SVille Syrjälä __field(u32, scanline) 32886c9640bSSteven Rostedt (VMware) __string(name, plane->name) 32972259536SVille Syrjälä ), 33072259536SVille Syrjälä 33172259536SVille Syrjälä TP_fast_assign( 33286c9640bSSteven Rostedt (VMware) __assign_str(name, plane->name); 33372259536SVille Syrjälä __entry->pipe = crtc->pipe; 3344c888e7bSVille Syrjälä __entry->frame = intel_crtc_get_vblank_counter(crtc); 33572259536SVille Syrjälä __entry->scanline = intel_get_crtc_scanline(crtc); 33672259536SVille Syrjälä ), 33772259536SVille Syrjälä 33872259536SVille Syrjälä TP_printk("pipe %c, plane %s, frame=%u, scanline=%u", 33986c9640bSSteven Rostedt (VMware) pipe_name(__entry->pipe), __get_str(name), 34072259536SVille Syrjälä __entry->frame, __entry->scanline) 34172259536SVille Syrjälä ); 34272259536SVille Syrjälä 343d54151c5SVille Syrjälä /* fbc */ 344d54151c5SVille Syrjälä 345d54151c5SVille Syrjälä TRACE_EVENT(intel_fbc_activate, 346d54151c5SVille Syrjälä TP_PROTO(struct intel_crtc *crtc), 347d54151c5SVille Syrjälä TP_ARGS(crtc), 348d54151c5SVille Syrjälä 349d54151c5SVille Syrjälä TP_STRUCT__entry( 350d54151c5SVille Syrjälä __field(enum pipe, pipe) 351d54151c5SVille Syrjälä __field(u32, frame) 352d54151c5SVille Syrjälä __field(u32, scanline) 353d54151c5SVille Syrjälä ), 354d54151c5SVille Syrjälä 355d54151c5SVille Syrjälä TP_fast_assign( 356d54151c5SVille Syrjälä __entry->pipe = crtc->pipe; 357d54151c5SVille Syrjälä __entry->frame = intel_crtc_get_vblank_counter(crtc); 358d54151c5SVille Syrjälä __entry->scanline = intel_get_crtc_scanline(crtc); 359d54151c5SVille Syrjälä ), 360d54151c5SVille Syrjälä 361d54151c5SVille Syrjälä TP_printk("pipe %c, frame=%u, scanline=%u", 362d54151c5SVille Syrjälä pipe_name(__entry->pipe), __entry->frame, __entry->scanline) 363d54151c5SVille Syrjälä ); 364d54151c5SVille Syrjälä 365d54151c5SVille Syrjälä TRACE_EVENT(intel_fbc_deactivate, 366d54151c5SVille Syrjälä TP_PROTO(struct intel_crtc *crtc), 367d54151c5SVille Syrjälä TP_ARGS(crtc), 368d54151c5SVille Syrjälä 369d54151c5SVille Syrjälä TP_STRUCT__entry( 370d54151c5SVille Syrjälä __field(enum pipe, pipe) 371d54151c5SVille Syrjälä __field(u32, frame) 372d54151c5SVille Syrjälä __field(u32, scanline) 373d54151c5SVille Syrjälä ), 374d54151c5SVille Syrjälä 375d54151c5SVille Syrjälä TP_fast_assign( 376d54151c5SVille Syrjälä __entry->pipe = crtc->pipe; 377d54151c5SVille Syrjälä __entry->frame = intel_crtc_get_vblank_counter(crtc); 378d54151c5SVille Syrjälä __entry->scanline = intel_get_crtc_scanline(crtc); 379d54151c5SVille Syrjälä ), 380d54151c5SVille Syrjälä 381d54151c5SVille Syrjälä TP_printk("pipe %c, frame=%u, scanline=%u", 382d54151c5SVille Syrjälä pipe_name(__entry->pipe), __entry->frame, __entry->scanline) 383d54151c5SVille Syrjälä ); 384d54151c5SVille Syrjälä 385d54151c5SVille Syrjälä TRACE_EVENT(intel_fbc_nuke, 386d54151c5SVille Syrjälä TP_PROTO(struct intel_crtc *crtc), 387d54151c5SVille Syrjälä TP_ARGS(crtc), 388d54151c5SVille Syrjälä 389d54151c5SVille Syrjälä TP_STRUCT__entry( 390d54151c5SVille Syrjälä __field(enum pipe, pipe) 391d54151c5SVille Syrjälä __field(u32, frame) 392d54151c5SVille Syrjälä __field(u32, scanline) 393d54151c5SVille Syrjälä ), 394d54151c5SVille Syrjälä 395d54151c5SVille Syrjälä TP_fast_assign( 396d54151c5SVille Syrjälä __entry->pipe = crtc->pipe; 397d54151c5SVille Syrjälä __entry->frame = intel_crtc_get_vblank_counter(crtc); 398d54151c5SVille Syrjälä __entry->scanline = intel_get_crtc_scanline(crtc); 399d54151c5SVille Syrjälä ), 400d54151c5SVille Syrjälä 401d54151c5SVille Syrjälä TP_printk("pipe %c, frame=%u, scanline=%u", 402d54151c5SVille Syrjälä pipe_name(__entry->pipe), __entry->frame, __entry->scanline) 403d54151c5SVille Syrjälä ); 404d54151c5SVille Syrjälä 40525ef284aSVille Syrjälä /* pipe updates */ 40625ef284aSVille Syrjälä 407f7f1538cSVille Syrjälä TRACE_EVENT(intel_pipe_update_start, 408d637ce3fSJesse Barnes TP_PROTO(struct intel_crtc *crtc), 409d637ce3fSJesse Barnes TP_ARGS(crtc), 41025ef284aSVille Syrjälä 41125ef284aSVille Syrjälä TP_STRUCT__entry( 41225ef284aSVille Syrjälä __field(enum pipe, pipe) 41325ef284aSVille Syrjälä __field(u32, frame) 41425ef284aSVille Syrjälä __field(u32, scanline) 41525ef284aSVille Syrjälä __field(u32, min) 41625ef284aSVille Syrjälä __field(u32, max) 41725ef284aSVille Syrjälä ), 41825ef284aSVille Syrjälä 41925ef284aSVille Syrjälä TP_fast_assign( 42025ef284aSVille Syrjälä __entry->pipe = crtc->pipe; 4214c888e7bSVille Syrjälä __entry->frame = intel_crtc_get_vblank_counter(crtc); 42225ef284aSVille Syrjälä __entry->scanline = intel_get_crtc_scanline(crtc); 423d637ce3fSJesse Barnes __entry->min = crtc->debug.min_vbl; 424d637ce3fSJesse Barnes __entry->max = crtc->debug.max_vbl; 42525ef284aSVille Syrjälä ), 42625ef284aSVille Syrjälä 42725ef284aSVille Syrjälä TP_printk("pipe %c, frame=%u, scanline=%u, min=%u, max=%u", 42825ef284aSVille Syrjälä pipe_name(__entry->pipe), __entry->frame, 42925ef284aSVille Syrjälä __entry->scanline, __entry->min, __entry->max) 43025ef284aSVille Syrjälä ); 43125ef284aSVille Syrjälä 432f7f1538cSVille Syrjälä TRACE_EVENT(intel_pipe_update_vblank_evaded, 433d637ce3fSJesse Barnes TP_PROTO(struct intel_crtc *crtc), 434d637ce3fSJesse Barnes TP_ARGS(crtc), 43525ef284aSVille Syrjälä 43625ef284aSVille Syrjälä TP_STRUCT__entry( 43725ef284aSVille Syrjälä __field(enum pipe, pipe) 43825ef284aSVille Syrjälä __field(u32, frame) 43925ef284aSVille Syrjälä __field(u32, scanline) 44025ef284aSVille Syrjälä __field(u32, min) 44125ef284aSVille Syrjälä __field(u32, max) 44225ef284aSVille Syrjälä ), 44325ef284aSVille Syrjälä 44425ef284aSVille Syrjälä TP_fast_assign( 44525ef284aSVille Syrjälä __entry->pipe = crtc->pipe; 446d637ce3fSJesse Barnes __entry->frame = crtc->debug.start_vbl_count; 447d637ce3fSJesse Barnes __entry->scanline = crtc->debug.scanline_start; 448d637ce3fSJesse Barnes __entry->min = crtc->debug.min_vbl; 449d637ce3fSJesse Barnes __entry->max = crtc->debug.max_vbl; 45025ef284aSVille Syrjälä ), 45125ef284aSVille Syrjälä 45225ef284aSVille Syrjälä TP_printk("pipe %c, frame=%u, scanline=%u, min=%u, max=%u", 45325ef284aSVille Syrjälä pipe_name(__entry->pipe), __entry->frame, 45425ef284aSVille Syrjälä __entry->scanline, __entry->min, __entry->max) 45525ef284aSVille Syrjälä ); 45625ef284aSVille Syrjälä 457f7f1538cSVille Syrjälä TRACE_EVENT(intel_pipe_update_end, 458d637ce3fSJesse Barnes TP_PROTO(struct intel_crtc *crtc, u32 frame, int scanline_end), 459d637ce3fSJesse Barnes TP_ARGS(crtc, frame, scanline_end), 46025ef284aSVille Syrjälä 46125ef284aSVille Syrjälä TP_STRUCT__entry( 46225ef284aSVille Syrjälä __field(enum pipe, pipe) 46325ef284aSVille Syrjälä __field(u32, frame) 46425ef284aSVille Syrjälä __field(u32, scanline) 46525ef284aSVille Syrjälä ), 46625ef284aSVille Syrjälä 46725ef284aSVille Syrjälä TP_fast_assign( 46825ef284aSVille Syrjälä __entry->pipe = crtc->pipe; 46925ef284aSVille Syrjälä __entry->frame = frame; 470d637ce3fSJesse Barnes __entry->scanline = scanline_end; 47125ef284aSVille Syrjälä ), 47225ef284aSVille Syrjälä 47325ef284aSVille Syrjälä TP_printk("pipe %c, frame=%u, scanline=%u", 47425ef284aSVille Syrjälä pipe_name(__entry->pipe), __entry->frame, 47525ef284aSVille Syrjälä __entry->scanline) 47625ef284aSVille Syrjälä ); 47725ef284aSVille Syrjälä 4781a86ac79SVille Syrjälä /* frontbuffer tracking */ 4791a86ac79SVille Syrjälä 4801a86ac79SVille Syrjälä TRACE_EVENT(intel_frontbuffer_invalidate, 4811a86ac79SVille Syrjälä TP_PROTO(unsigned int frontbuffer_bits, unsigned int origin), 4821a86ac79SVille Syrjälä TP_ARGS(frontbuffer_bits, origin), 4831a86ac79SVille Syrjälä 4841a86ac79SVille Syrjälä TP_STRUCT__entry( 4851a86ac79SVille Syrjälä __field(unsigned int, frontbuffer_bits) 4861a86ac79SVille Syrjälä __field(unsigned int, origin) 4871a86ac79SVille Syrjälä ), 4881a86ac79SVille Syrjälä 4891a86ac79SVille Syrjälä TP_fast_assign( 4901a86ac79SVille Syrjälä __entry->frontbuffer_bits = frontbuffer_bits; 4911a86ac79SVille Syrjälä __entry->origin = origin; 4921a86ac79SVille Syrjälä ), 4931a86ac79SVille Syrjälä 4941a86ac79SVille Syrjälä TP_printk("frontbuffer_bits=0x%08x, origin=%u", 4951a86ac79SVille Syrjälä __entry->frontbuffer_bits, __entry->origin) 4961a86ac79SVille Syrjälä ); 4971a86ac79SVille Syrjälä 4981a86ac79SVille Syrjälä TRACE_EVENT(intel_frontbuffer_flush, 4991a86ac79SVille Syrjälä TP_PROTO(unsigned int frontbuffer_bits, unsigned int origin), 5001a86ac79SVille Syrjälä TP_ARGS(frontbuffer_bits, origin), 5011a86ac79SVille Syrjälä 5021a86ac79SVille Syrjälä TP_STRUCT__entry( 5031a86ac79SVille Syrjälä __field(unsigned int, frontbuffer_bits) 5041a86ac79SVille Syrjälä __field(unsigned int, origin) 5051a86ac79SVille Syrjälä ), 5061a86ac79SVille Syrjälä 5071a86ac79SVille Syrjälä TP_fast_assign( 5081a86ac79SVille Syrjälä __entry->frontbuffer_bits = frontbuffer_bits; 5091a86ac79SVille Syrjälä __entry->origin = origin; 5101a86ac79SVille Syrjälä ), 5111a86ac79SVille Syrjälä 5121a86ac79SVille Syrjälä TP_printk("frontbuffer_bits=0x%08x, origin=%u", 5131a86ac79SVille Syrjälä __entry->frontbuffer_bits, __entry->origin) 5141a86ac79SVille Syrjälä ); 5151a86ac79SVille Syrjälä 5161c5d22f7SChris Wilson /* object tracking */ 5171c5d22f7SChris Wilson 5181c5d22f7SChris Wilson TRACE_EVENT(i915_gem_object_create, 51905394f39SChris Wilson TP_PROTO(struct drm_i915_gem_object *obj), 5201c5d22f7SChris Wilson TP_ARGS(obj), 5211c5d22f7SChris Wilson 5221c5d22f7SChris Wilson TP_STRUCT__entry( 52305394f39SChris Wilson __field(struct drm_i915_gem_object *, obj) 5246c1fa341SChris Wilson __field(u64, size) 5251c5d22f7SChris Wilson ), 5261c5d22f7SChris Wilson 5271c5d22f7SChris Wilson TP_fast_assign( 5281c5d22f7SChris Wilson __entry->obj = obj; 52905394f39SChris Wilson __entry->size = obj->base.size; 5301c5d22f7SChris Wilson ), 5311c5d22f7SChris Wilson 5326c1fa341SChris Wilson TP_printk("obj=%p, size=0x%llx", __entry->obj, __entry->size) 5331c5d22f7SChris Wilson ); 5341c5d22f7SChris Wilson 5353abafa53SChris Wilson TRACE_EVENT(i915_gem_shrink, 5363abafa53SChris Wilson TP_PROTO(struct drm_i915_private *i915, unsigned long target, unsigned flags), 5373abafa53SChris Wilson TP_ARGS(i915, target, flags), 5383abafa53SChris Wilson 5393abafa53SChris Wilson TP_STRUCT__entry( 5403abafa53SChris Wilson __field(int, dev) 5413abafa53SChris Wilson __field(unsigned long, target) 5423abafa53SChris Wilson __field(unsigned, flags) 5433abafa53SChris Wilson ), 5443abafa53SChris Wilson 5453abafa53SChris Wilson TP_fast_assign( 54691c8a326SChris Wilson __entry->dev = i915->drm.primary->index; 5473abafa53SChris Wilson __entry->target = target; 5483abafa53SChris Wilson __entry->flags = flags; 5493abafa53SChris Wilson ), 5503abafa53SChris Wilson 5513abafa53SChris Wilson TP_printk("dev=%d, target=%lu, flags=%x", 5523abafa53SChris Wilson __entry->dev, __entry->target, __entry->flags) 5533abafa53SChris Wilson ); 5543abafa53SChris Wilson 55507fe0b12SBen Widawsky TRACE_EVENT(i915_vma_bind, 5561ec9e26dSDaniel Vetter TP_PROTO(struct i915_vma *vma, unsigned flags), 5571ec9e26dSDaniel Vetter TP_ARGS(vma, flags), 5581c5d22f7SChris Wilson 5591c5d22f7SChris Wilson TP_STRUCT__entry( 56005394f39SChris Wilson __field(struct drm_i915_gem_object *, obj) 56107fe0b12SBen Widawsky __field(struct i915_address_space *, vm) 56233938714SBen Widawsky __field(u64, offset) 5636c1fa341SChris Wilson __field(u64, size) 5641ec9e26dSDaniel Vetter __field(unsigned, flags) 5651c5d22f7SChris Wilson ), 5661c5d22f7SChris Wilson 5671c5d22f7SChris Wilson TP_fast_assign( 56807fe0b12SBen Widawsky __entry->obj = vma->obj; 56907fe0b12SBen Widawsky __entry->vm = vma->vm; 57007fe0b12SBen Widawsky __entry->offset = vma->node.start; 57107fe0b12SBen Widawsky __entry->size = vma->node.size; 5721ec9e26dSDaniel Vetter __entry->flags = flags; 5731c5d22f7SChris Wilson ), 5741c5d22f7SChris Wilson 5756c1fa341SChris Wilson TP_printk("obj=%p, offset=0x%016llx size=0x%llx%s vm=%p", 576db53a302SChris Wilson __entry->obj, __entry->offset, __entry->size, 5771ec9e26dSDaniel Vetter __entry->flags & PIN_MAPPABLE ? ", mappable" : "", 57807fe0b12SBen Widawsky __entry->vm) 5791c5d22f7SChris Wilson ); 5801c5d22f7SChris Wilson 58107fe0b12SBen Widawsky TRACE_EVENT(i915_vma_unbind, 58207fe0b12SBen Widawsky TP_PROTO(struct i915_vma *vma), 58307fe0b12SBen Widawsky TP_ARGS(vma), 584db53a302SChris Wilson 585db53a302SChris Wilson TP_STRUCT__entry( 586db53a302SChris Wilson __field(struct drm_i915_gem_object *, obj) 58707fe0b12SBen Widawsky __field(struct i915_address_space *, vm) 58833938714SBen Widawsky __field(u64, offset) 5896c1fa341SChris Wilson __field(u64, size) 590db53a302SChris Wilson ), 591db53a302SChris Wilson 592db53a302SChris Wilson TP_fast_assign( 59307fe0b12SBen Widawsky __entry->obj = vma->obj; 59407fe0b12SBen Widawsky __entry->vm = vma->vm; 59507fe0b12SBen Widawsky __entry->offset = vma->node.start; 59607fe0b12SBen Widawsky __entry->size = vma->node.size; 597db53a302SChris Wilson ), 598db53a302SChris Wilson 5996c1fa341SChris Wilson TP_printk("obj=%p, offset=0x%016llx size=0x%llx vm=%p", 60007fe0b12SBen Widawsky __entry->obj, __entry->offset, __entry->size, __entry->vm) 601db53a302SChris Wilson ); 602db53a302SChris Wilson 603db53a302SChris Wilson TRACE_EVENT(i915_gem_object_pwrite, 6046c1fa341SChris Wilson TP_PROTO(struct drm_i915_gem_object *obj, u64 offset, u64 len), 605db53a302SChris Wilson TP_ARGS(obj, offset, len), 606db53a302SChris Wilson 607db53a302SChris Wilson TP_STRUCT__entry( 608db53a302SChris Wilson __field(struct drm_i915_gem_object *, obj) 6096c1fa341SChris Wilson __field(u64, offset) 6106c1fa341SChris Wilson __field(u64, len) 611db53a302SChris Wilson ), 612db53a302SChris Wilson 613db53a302SChris Wilson TP_fast_assign( 614db53a302SChris Wilson __entry->obj = obj; 615db53a302SChris Wilson __entry->offset = offset; 616db53a302SChris Wilson __entry->len = len; 617db53a302SChris Wilson ), 618db53a302SChris Wilson 6196c1fa341SChris Wilson TP_printk("obj=%p, offset=0x%llx, len=0x%llx", 620db53a302SChris Wilson __entry->obj, __entry->offset, __entry->len) 621db53a302SChris Wilson ); 622db53a302SChris Wilson 623db53a302SChris Wilson TRACE_EVENT(i915_gem_object_pread, 6246c1fa341SChris Wilson TP_PROTO(struct drm_i915_gem_object *obj, u64 offset, u64 len), 625db53a302SChris Wilson TP_ARGS(obj, offset, len), 626db53a302SChris Wilson 627db53a302SChris Wilson TP_STRUCT__entry( 628db53a302SChris Wilson __field(struct drm_i915_gem_object *, obj) 6296c1fa341SChris Wilson __field(u64, offset) 6306c1fa341SChris Wilson __field(u64, len) 631db53a302SChris Wilson ), 632db53a302SChris Wilson 633db53a302SChris Wilson TP_fast_assign( 634db53a302SChris Wilson __entry->obj = obj; 635db53a302SChris Wilson __entry->offset = offset; 636db53a302SChris Wilson __entry->len = len; 637db53a302SChris Wilson ), 638db53a302SChris Wilson 6396c1fa341SChris Wilson TP_printk("obj=%p, offset=0x%llx, len=0x%llx", 640db53a302SChris Wilson __entry->obj, __entry->offset, __entry->len) 641db53a302SChris Wilson ); 642db53a302SChris Wilson 643db53a302SChris Wilson TRACE_EVENT(i915_gem_object_fault, 6446c1fa341SChris Wilson TP_PROTO(struct drm_i915_gem_object *obj, u64 index, bool gtt, bool write), 645db53a302SChris Wilson TP_ARGS(obj, index, gtt, write), 646db53a302SChris Wilson 647db53a302SChris Wilson TP_STRUCT__entry( 648db53a302SChris Wilson __field(struct drm_i915_gem_object *, obj) 6496c1fa341SChris Wilson __field(u64, index) 650db53a302SChris Wilson __field(bool, gtt) 651db53a302SChris Wilson __field(bool, write) 652db53a302SChris Wilson ), 653db53a302SChris Wilson 654db53a302SChris Wilson TP_fast_assign( 655db53a302SChris Wilson __entry->obj = obj; 656db53a302SChris Wilson __entry->index = index; 657db53a302SChris Wilson __entry->gtt = gtt; 658db53a302SChris Wilson __entry->write = write; 659db53a302SChris Wilson ), 660db53a302SChris Wilson 6616c1fa341SChris Wilson TP_printk("obj=%p, %s index=%llu %s", 662db53a302SChris Wilson __entry->obj, 663db53a302SChris Wilson __entry->gtt ? "GTT" : "CPU", 664db53a302SChris Wilson __entry->index, 665db53a302SChris Wilson __entry->write ? ", writable" : "") 6661c5d22f7SChris Wilson ); 6671c5d22f7SChris Wilson 668903cf20cSLi Zefan DECLARE_EVENT_CLASS(i915_gem_object, 66905394f39SChris Wilson TP_PROTO(struct drm_i915_gem_object *obj), 6701c5d22f7SChris Wilson TP_ARGS(obj), 6711c5d22f7SChris Wilson 6721c5d22f7SChris Wilson TP_STRUCT__entry( 67305394f39SChris Wilson __field(struct drm_i915_gem_object *, obj) 6741c5d22f7SChris Wilson ), 6751c5d22f7SChris Wilson 6761c5d22f7SChris Wilson TP_fast_assign( 6771c5d22f7SChris Wilson __entry->obj = obj; 6781c5d22f7SChris Wilson ), 6791c5d22f7SChris Wilson 6801c5d22f7SChris Wilson TP_printk("obj=%p", __entry->obj) 6811c5d22f7SChris Wilson ); 6821c5d22f7SChris Wilson 683f41275e8SLi Zefan DEFINE_EVENT(i915_gem_object, i915_gem_object_clflush, 68405394f39SChris Wilson TP_PROTO(struct drm_i915_gem_object *obj), 685903cf20cSLi Zefan TP_ARGS(obj) 686903cf20cSLi Zefan ); 6871c5d22f7SChris Wilson 688903cf20cSLi Zefan DEFINE_EVENT(i915_gem_object, i915_gem_object_destroy, 68905394f39SChris Wilson TP_PROTO(struct drm_i915_gem_object *obj), 690903cf20cSLi Zefan TP_ARGS(obj) 6911c5d22f7SChris Wilson ); 6921c5d22f7SChris Wilson 693db53a302SChris Wilson TRACE_EVENT(i915_gem_evict, 6946c1fa341SChris Wilson TP_PROTO(struct i915_address_space *vm, u64 size, u64 align, unsigned int flags), 695e522ac23SChris Wilson TP_ARGS(vm, size, align, flags), 6961c5d22f7SChris Wilson 6971c5d22f7SChris Wilson TP_STRUCT__entry( 6984f49be54SChris Wilson __field(u32, dev) 699e522ac23SChris Wilson __field(struct i915_address_space *, vm) 7006c1fa341SChris Wilson __field(u64, size) 7016c1fa341SChris Wilson __field(u64, align) 702e522ac23SChris Wilson __field(unsigned int, flags) 7031c5d22f7SChris Wilson ), 7041c5d22f7SChris Wilson 7051c5d22f7SChris Wilson TP_fast_assign( 706c6385c94SChris Wilson __entry->dev = vm->i915->drm.primary->index; 707e522ac23SChris Wilson __entry->vm = vm; 708db53a302SChris Wilson __entry->size = size; 709db53a302SChris Wilson __entry->align = align; 7101ec9e26dSDaniel Vetter __entry->flags = flags; 7111c5d22f7SChris Wilson ), 7121c5d22f7SChris Wilson 7136c1fa341SChris Wilson TP_printk("dev=%d, vm=%p, size=0x%llx, align=0x%llx %s", 714e522ac23SChris Wilson __entry->dev, __entry->vm, __entry->size, __entry->align, 7151ec9e26dSDaniel Vetter __entry->flags & PIN_MAPPABLE ? ", mappable" : "") 7161c5d22f7SChris Wilson ); 7171c5d22f7SChris Wilson 718625d988aSChris Wilson TRACE_EVENT(i915_gem_evict_node, 719625d988aSChris Wilson TP_PROTO(struct i915_address_space *vm, struct drm_mm_node *node, unsigned int flags), 720625d988aSChris Wilson TP_ARGS(vm, node, flags), 721172ae5b4SChris Wilson 722172ae5b4SChris Wilson TP_STRUCT__entry( 723172ae5b4SChris Wilson __field(u32, dev) 724172ae5b4SChris Wilson __field(struct i915_address_space *, vm) 725172ae5b4SChris Wilson __field(u64, start) 726172ae5b4SChris Wilson __field(u64, size) 727172ae5b4SChris Wilson __field(unsigned long, color) 728172ae5b4SChris Wilson __field(unsigned int, flags) 729172ae5b4SChris Wilson ), 730172ae5b4SChris Wilson 731172ae5b4SChris Wilson TP_fast_assign( 732625d988aSChris Wilson __entry->dev = vm->i915->drm.primary->index; 733625d988aSChris Wilson __entry->vm = vm; 734625d988aSChris Wilson __entry->start = node->start; 735625d988aSChris Wilson __entry->size = node->size; 736625d988aSChris Wilson __entry->color = node->color; 737172ae5b4SChris Wilson __entry->flags = flags; 738172ae5b4SChris Wilson ), 739172ae5b4SChris Wilson 7406c1fa341SChris Wilson TP_printk("dev=%d, vm=%p, start=0x%llx size=0x%llx, color=0x%lx, flags=%x", 741172ae5b4SChris Wilson __entry->dev, __entry->vm, 742172ae5b4SChris Wilson __entry->start, __entry->size, 743172ae5b4SChris Wilson __entry->color, __entry->flags) 744172ae5b4SChris Wilson ); 745172ae5b4SChris Wilson 74665921223SChris Wilson TRACE_EVENT(i915_gem_evict_vm, 74765921223SChris Wilson TP_PROTO(struct i915_address_space *vm), 74865921223SChris Wilson TP_ARGS(vm), 74965921223SChris Wilson 75065921223SChris Wilson TP_STRUCT__entry( 75165921223SChris Wilson __field(u32, dev) 75265921223SChris Wilson __field(struct i915_address_space *, vm) 75365921223SChris Wilson ), 75465921223SChris Wilson 75565921223SChris Wilson TP_fast_assign( 75665921223SChris Wilson __entry->dev = vm->i915->drm.primary->index; 75765921223SChris Wilson __entry->vm = vm; 75865921223SChris Wilson ), 75965921223SChris Wilson 76065921223SChris Wilson TP_printk("dev=%d, vm=%p", __entry->dev, __entry->vm) 76165921223SChris Wilson ); 76265921223SChris Wilson 763e61e0f51SChris Wilson TRACE_EVENT(i915_request_queue, 764e61e0f51SChris Wilson TP_PROTO(struct i915_request *rq, u32 flags), 765e61e0f51SChris Wilson TP_ARGS(rq, flags), 766db53a302SChris Wilson 767db53a302SChris Wilson TP_STRUCT__entry( 768db53a302SChris Wilson __field(u32, dev) 76957d7116cSTvrtko Ursulin __field(u64, ctx) 7702956e970STvrtko Ursulin __field(u16, class) 7712956e970STvrtko Ursulin __field(u16, instance) 772db53a302SChris Wilson __field(u32, seqno) 773d7d4eeddSChris Wilson __field(u32, flags) 774db53a302SChris Wilson ), 775db53a302SChris Wilson 776db53a302SChris Wilson TP_fast_assign( 7775a833995SChris Wilson __entry->dev = rq->engine->i915->drm.primary->index; 7782956e970STvrtko Ursulin __entry->class = rq->engine->uabi_class; 779750e76b4SChris Wilson __entry->instance = rq->engine->uabi_instance; 780e61e0f51SChris Wilson __entry->ctx = rq->fence.context; 781e61e0f51SChris Wilson __entry->seqno = rq->fence.seqno; 782d7d4eeddSChris Wilson __entry->flags = flags; 783db53a302SChris Wilson ), 784db53a302SChris Wilson 7852935ed53SChris Wilson TP_printk("dev=%u, engine=%u:%u, ctx=%llu, seqno=%u, flags=0x%x", 786f24e74a7STvrtko Ursulin __entry->dev, __entry->class, __entry->instance, 7872935ed53SChris Wilson __entry->ctx, __entry->seqno, __entry->flags) 788db53a302SChris Wilson ); 789db53a302SChris Wilson 790e61e0f51SChris Wilson DECLARE_EVENT_CLASS(i915_request, 791e61e0f51SChris Wilson TP_PROTO(struct i915_request *rq), 792e61e0f51SChris Wilson TP_ARGS(rq), 7931c5d22f7SChris Wilson 7941c5d22f7SChris Wilson TP_STRUCT__entry( 7954f49be54SChris Wilson __field(u32, dev) 79657d7116cSTvrtko Ursulin __field(u64, ctx) 797dbf9da8dSMatthew Brost __field(u32, guc_id) 7982956e970STvrtko Ursulin __field(u16, class) 7992956e970STvrtko Ursulin __field(u16, instance) 8001c5d22f7SChris Wilson __field(u32, seqno) 801dbf9da8dSMatthew Brost __field(u32, tail) 8021c5d22f7SChris Wilson ), 8031c5d22f7SChris Wilson 8041c5d22f7SChris Wilson TP_fast_assign( 8055a833995SChris Wilson __entry->dev = rq->engine->i915->drm.primary->index; 8062956e970STvrtko Ursulin __entry->class = rq->engine->uabi_class; 807750e76b4SChris Wilson __entry->instance = rq->engine->uabi_instance; 808dbf9da8dSMatthew Brost __entry->guc_id = rq->context->guc_id; 809e61e0f51SChris Wilson __entry->ctx = rq->fence.context; 810e61e0f51SChris Wilson __entry->seqno = rq->fence.seqno; 811dbf9da8dSMatthew Brost __entry->tail = rq->tail; 8121c5d22f7SChris Wilson ), 8131c5d22f7SChris Wilson 814dbf9da8dSMatthew Brost TP_printk("dev=%u, engine=%u:%u, guc_id=%u, ctx=%llu, seqno=%u, tail=%u", 815f24e74a7STvrtko Ursulin __entry->dev, __entry->class, __entry->instance, 816dbf9da8dSMatthew Brost __entry->guc_id, __entry->ctx, __entry->seqno, 817dbf9da8dSMatthew Brost __entry->tail) 818db53a302SChris Wilson ); 819db53a302SChris Wilson 820e61e0f51SChris Wilson DEFINE_EVENT(i915_request, i915_request_add, 821e61e0f51SChris Wilson TP_PROTO(struct i915_request *rq), 822e61e0f51SChris Wilson TP_ARGS(rq) 8231c5d22f7SChris Wilson ); 8241c5d22f7SChris Wilson 825354d036fSTvrtko Ursulin #if defined(CONFIG_DRM_I915_LOW_LEVEL_TRACEPOINTS) 826dbf9da8dSMatthew Brost DEFINE_EVENT(i915_request, i915_request_guc_submit, 827dbf9da8dSMatthew Brost TP_PROTO(struct i915_request *rq), 828dbf9da8dSMatthew Brost TP_ARGS(rq) 829dbf9da8dSMatthew Brost ); 830dbf9da8dSMatthew Brost 831e61e0f51SChris Wilson DEFINE_EVENT(i915_request, i915_request_submit, 832e61e0f51SChris Wilson TP_PROTO(struct i915_request *rq), 833e61e0f51SChris Wilson TP_ARGS(rq) 834354d036fSTvrtko Ursulin ); 835354d036fSTvrtko Ursulin 836e61e0f51SChris Wilson DEFINE_EVENT(i915_request, i915_request_execute, 837e61e0f51SChris Wilson TP_PROTO(struct i915_request *rq), 838e61e0f51SChris Wilson TP_ARGS(rq) 839354d036fSTvrtko Ursulin ); 840d7d96833STvrtko Ursulin 841f2742e47STvrtko Ursulin TRACE_EVENT(i915_request_in, 842e61e0f51SChris Wilson TP_PROTO(struct i915_request *rq, unsigned int port), 843e61e0f51SChris Wilson TP_ARGS(rq, port), 844d7d96833STvrtko Ursulin 845d7d96833STvrtko Ursulin TP_STRUCT__entry( 846d7d96833STvrtko Ursulin __field(u32, dev) 84757d7116cSTvrtko Ursulin __field(u64, ctx) 8482956e970STvrtko Ursulin __field(u16, class) 8492956e970STvrtko Ursulin __field(u16, instance) 850d7d96833STvrtko Ursulin __field(u32, seqno) 851d7d96833STvrtko Ursulin __field(u32, port) 8520543fbf4SChris Wilson __field(s32, prio) 853d7d96833STvrtko Ursulin ), 854d7d96833STvrtko Ursulin 855d7d96833STvrtko Ursulin TP_fast_assign( 8565a833995SChris Wilson __entry->dev = rq->engine->i915->drm.primary->index; 8572956e970STvrtko Ursulin __entry->class = rq->engine->uabi_class; 858750e76b4SChris Wilson __entry->instance = rq->engine->uabi_instance; 859e61e0f51SChris Wilson __entry->ctx = rq->fence.context; 860e61e0f51SChris Wilson __entry->seqno = rq->fence.seqno; 861f2742e47STvrtko Ursulin __entry->prio = rq->sched.attr.priority; 862d7d96833STvrtko Ursulin __entry->port = port; 863d7d96833STvrtko Ursulin ), 864d7d96833STvrtko Ursulin 8650543fbf4SChris Wilson TP_printk("dev=%u, engine=%u:%u, ctx=%llu, seqno=%u, prio=%d, port=%u", 866f24e74a7STvrtko Ursulin __entry->dev, __entry->class, __entry->instance, 8672935ed53SChris Wilson __entry->ctx, __entry->seqno, 868b300fde8SChris Wilson __entry->prio, __entry->port) 869f2742e47STvrtko Ursulin ); 870f2742e47STvrtko Ursulin 871f2742e47STvrtko Ursulin TRACE_EVENT(i915_request_out, 872f2742e47STvrtko Ursulin TP_PROTO(struct i915_request *rq), 873f2742e47STvrtko Ursulin TP_ARGS(rq), 874f2742e47STvrtko Ursulin 875f2742e47STvrtko Ursulin TP_STRUCT__entry( 876f2742e47STvrtko Ursulin __field(u32, dev) 87757d7116cSTvrtko Ursulin __field(u64, ctx) 8782956e970STvrtko Ursulin __field(u16, class) 8792956e970STvrtko Ursulin __field(u16, instance) 880f2742e47STvrtko Ursulin __field(u32, seqno) 881f2742e47STvrtko Ursulin __field(u32, completed) 882f2742e47STvrtko Ursulin ), 883f2742e47STvrtko Ursulin 884f2742e47STvrtko Ursulin TP_fast_assign( 8855a833995SChris Wilson __entry->dev = rq->engine->i915->drm.primary->index; 8862956e970STvrtko Ursulin __entry->class = rq->engine->uabi_class; 887750e76b4SChris Wilson __entry->instance = rq->engine->uabi_instance; 888f2742e47STvrtko Ursulin __entry->ctx = rq->fence.context; 889f2742e47STvrtko Ursulin __entry->seqno = rq->fence.seqno; 890f2742e47STvrtko Ursulin __entry->completed = i915_request_completed(rq); 891f2742e47STvrtko Ursulin ), 892f2742e47STvrtko Ursulin 8932935ed53SChris Wilson TP_printk("dev=%u, engine=%u:%u, ctx=%llu, seqno=%u, completed?=%u", 894f24e74a7STvrtko Ursulin __entry->dev, __entry->class, __entry->instance, 8952935ed53SChris Wilson __entry->ctx, __entry->seqno, __entry->completed) 896d7d96833STvrtko Ursulin ); 897d7d96833STvrtko Ursulin 898e03b5906SMatthew Brost DECLARE_EVENT_CLASS(intel_context, 899e03b5906SMatthew Brost TP_PROTO(struct intel_context *ce), 900e03b5906SMatthew Brost TP_ARGS(ce), 901e03b5906SMatthew Brost 902e03b5906SMatthew Brost TP_STRUCT__entry( 903e03b5906SMatthew Brost __field(u32, guc_id) 904e03b5906SMatthew Brost __field(int, pin_count) 905e03b5906SMatthew Brost __field(u32, sched_state) 906ee242ca7SMatthew Brost __field(u8, guc_prio) 907e03b5906SMatthew Brost ), 908e03b5906SMatthew Brost 909e03b5906SMatthew Brost TP_fast_assign( 910e03b5906SMatthew Brost __entry->guc_id = ce->guc_id; 911e03b5906SMatthew Brost __entry->pin_count = atomic_read(&ce->pin_count); 912e03b5906SMatthew Brost __entry->sched_state = ce->guc_state.sched_state; 913*9798b172SMatthew Brost __entry->guc_prio = ce->guc_active.prio; 914e03b5906SMatthew Brost ), 915e03b5906SMatthew Brost 9160f797650SMatthew Brost TP_printk("guc_id=%d, pin_count=%d sched_state=0x%x, guc_prio=%u", 917e03b5906SMatthew Brost __entry->guc_id, __entry->pin_count, 918e03b5906SMatthew Brost __entry->sched_state, 919ee242ca7SMatthew Brost __entry->guc_prio) 920ee242ca7SMatthew Brost ); 921ee242ca7SMatthew Brost 922ee242ca7SMatthew Brost DEFINE_EVENT(intel_context, intel_context_set_prio, 923ee242ca7SMatthew Brost TP_PROTO(struct intel_context *ce), 924ee242ca7SMatthew Brost TP_ARGS(ce) 925e03b5906SMatthew Brost ); 926e03b5906SMatthew Brost 9271e0fd2b5SMatthew Brost DEFINE_EVENT(intel_context, intel_context_reset, 9281e0fd2b5SMatthew Brost TP_PROTO(struct intel_context *ce), 9291e0fd2b5SMatthew Brost TP_ARGS(ce) 9301e0fd2b5SMatthew Brost ); 9311e0fd2b5SMatthew Brost 932ae8ac10dSMatthew Brost DEFINE_EVENT(intel_context, intel_context_ban, 933ae8ac10dSMatthew Brost TP_PROTO(struct intel_context *ce), 934ae8ac10dSMatthew Brost TP_ARGS(ce) 935ae8ac10dSMatthew Brost ); 936ae8ac10dSMatthew Brost 937e03b5906SMatthew Brost DEFINE_EVENT(intel_context, intel_context_register, 938e03b5906SMatthew Brost TP_PROTO(struct intel_context *ce), 939e03b5906SMatthew Brost TP_ARGS(ce) 940e03b5906SMatthew Brost ); 941e03b5906SMatthew Brost 942e03b5906SMatthew Brost DEFINE_EVENT(intel_context, intel_context_deregister, 943e03b5906SMatthew Brost TP_PROTO(struct intel_context *ce), 944e03b5906SMatthew Brost TP_ARGS(ce) 945e03b5906SMatthew Brost ); 946e03b5906SMatthew Brost 947e03b5906SMatthew Brost DEFINE_EVENT(intel_context, intel_context_deregister_done, 948e03b5906SMatthew Brost TP_PROTO(struct intel_context *ce), 949e03b5906SMatthew Brost TP_ARGS(ce) 950e03b5906SMatthew Brost ); 951e03b5906SMatthew Brost 952e03b5906SMatthew Brost DEFINE_EVENT(intel_context, intel_context_sched_enable, 953e03b5906SMatthew Brost TP_PROTO(struct intel_context *ce), 954e03b5906SMatthew Brost TP_ARGS(ce) 955e03b5906SMatthew Brost ); 956e03b5906SMatthew Brost 957e03b5906SMatthew Brost DEFINE_EVENT(intel_context, intel_context_sched_disable, 958e03b5906SMatthew Brost TP_PROTO(struct intel_context *ce), 959e03b5906SMatthew Brost TP_ARGS(ce) 960e03b5906SMatthew Brost ); 961e03b5906SMatthew Brost 962e03b5906SMatthew Brost DEFINE_EVENT(intel_context, intel_context_sched_done, 963e03b5906SMatthew Brost TP_PROTO(struct intel_context *ce), 964e03b5906SMatthew Brost TP_ARGS(ce) 965e03b5906SMatthew Brost ); 966e03b5906SMatthew Brost 967e03b5906SMatthew Brost DEFINE_EVENT(intel_context, intel_context_create, 968e03b5906SMatthew Brost TP_PROTO(struct intel_context *ce), 969e03b5906SMatthew Brost TP_ARGS(ce) 970e03b5906SMatthew Brost ); 971e03b5906SMatthew Brost 972e03b5906SMatthew Brost DEFINE_EVENT(intel_context, intel_context_fence_release, 973e03b5906SMatthew Brost TP_PROTO(struct intel_context *ce), 974e03b5906SMatthew Brost TP_ARGS(ce) 975e03b5906SMatthew Brost ); 976e03b5906SMatthew Brost 977e03b5906SMatthew Brost DEFINE_EVENT(intel_context, intel_context_free, 978e03b5906SMatthew Brost TP_PROTO(struct intel_context *ce), 979e03b5906SMatthew Brost TP_ARGS(ce) 980e03b5906SMatthew Brost ); 981e03b5906SMatthew Brost 982e03b5906SMatthew Brost DEFINE_EVENT(intel_context, intel_context_steal_guc_id, 983e03b5906SMatthew Brost TP_PROTO(struct intel_context *ce), 984e03b5906SMatthew Brost TP_ARGS(ce) 985e03b5906SMatthew Brost ); 986e03b5906SMatthew Brost 987e03b5906SMatthew Brost DEFINE_EVENT(intel_context, intel_context_do_pin, 988e03b5906SMatthew Brost TP_PROTO(struct intel_context *ce), 989e03b5906SMatthew Brost TP_ARGS(ce) 990e03b5906SMatthew Brost ); 991e03b5906SMatthew Brost 992e03b5906SMatthew Brost DEFINE_EVENT(intel_context, intel_context_do_unpin, 993e03b5906SMatthew Brost TP_PROTO(struct intel_context *ce), 994e03b5906SMatthew Brost TP_ARGS(ce) 995e03b5906SMatthew Brost ); 996e03b5906SMatthew Brost 997354d036fSTvrtko Ursulin #else 998354d036fSTvrtko Ursulin #if !defined(TRACE_HEADER_MULTI_READ) 999354d036fSTvrtko Ursulin static inline void 1000dbf9da8dSMatthew Brost trace_i915_request_guc_submit(struct i915_request *rq) 1001dbf9da8dSMatthew Brost { 1002dbf9da8dSMatthew Brost } 1003dbf9da8dSMatthew Brost 1004dbf9da8dSMatthew Brost static inline void 1005e61e0f51SChris Wilson trace_i915_request_submit(struct i915_request *rq) 1006354d036fSTvrtko Ursulin { 1007354d036fSTvrtko Ursulin } 1008354d036fSTvrtko Ursulin 1009354d036fSTvrtko Ursulin static inline void 1010e61e0f51SChris Wilson trace_i915_request_execute(struct i915_request *rq) 1011354d036fSTvrtko Ursulin { 1012354d036fSTvrtko Ursulin } 1013d7d96833STvrtko Ursulin 1014d7d96833STvrtko Ursulin static inline void 1015e61e0f51SChris Wilson trace_i915_request_in(struct i915_request *rq, unsigned int port) 1016d7d96833STvrtko Ursulin { 1017d7d96833STvrtko Ursulin } 1018d7d96833STvrtko Ursulin 1019d7d96833STvrtko Ursulin static inline void 1020e61e0f51SChris Wilson trace_i915_request_out(struct i915_request *rq) 1021d7d96833STvrtko Ursulin { 1022d7d96833STvrtko Ursulin } 1023e03b5906SMatthew Brost 1024e03b5906SMatthew Brost static inline void 1025ee242ca7SMatthew Brost trace_intel_context_set_prio(struct intel_context *ce) 1026ee242ca7SMatthew Brost { 1027ee242ca7SMatthew Brost } 1028ee242ca7SMatthew Brost 1029ee242ca7SMatthew Brost static inline void 10301e0fd2b5SMatthew Brost trace_intel_context_reset(struct intel_context *ce) 10311e0fd2b5SMatthew Brost { 10321e0fd2b5SMatthew Brost } 10331e0fd2b5SMatthew Brost 10341e0fd2b5SMatthew Brost static inline void 1035ae8ac10dSMatthew Brost trace_intel_context_ban(struct intel_context *ce) 1036ae8ac10dSMatthew Brost { 1037ae8ac10dSMatthew Brost } 1038ae8ac10dSMatthew Brost 1039ae8ac10dSMatthew Brost static inline void 1040e03b5906SMatthew Brost trace_intel_context_register(struct intel_context *ce) 1041e03b5906SMatthew Brost { 1042e03b5906SMatthew Brost } 1043e03b5906SMatthew Brost 1044e03b5906SMatthew Brost static inline void 1045e03b5906SMatthew Brost trace_intel_context_deregister(struct intel_context *ce) 1046e03b5906SMatthew Brost { 1047e03b5906SMatthew Brost } 1048e03b5906SMatthew Brost 1049e03b5906SMatthew Brost static inline void 1050e03b5906SMatthew Brost trace_intel_context_deregister_done(struct intel_context *ce) 1051e03b5906SMatthew Brost { 1052e03b5906SMatthew Brost } 1053e03b5906SMatthew Brost 1054e03b5906SMatthew Brost static inline void 1055e03b5906SMatthew Brost trace_intel_context_sched_enable(struct intel_context *ce) 1056e03b5906SMatthew Brost { 1057e03b5906SMatthew Brost } 1058e03b5906SMatthew Brost 1059e03b5906SMatthew Brost static inline void 1060e03b5906SMatthew Brost trace_intel_context_sched_disable(struct intel_context *ce) 1061e03b5906SMatthew Brost { 1062e03b5906SMatthew Brost } 1063e03b5906SMatthew Brost 1064e03b5906SMatthew Brost static inline void 1065e03b5906SMatthew Brost trace_intel_context_sched_done(struct intel_context *ce) 1066e03b5906SMatthew Brost { 1067e03b5906SMatthew Brost } 1068e03b5906SMatthew Brost 1069e03b5906SMatthew Brost static inline void 1070e03b5906SMatthew Brost trace_intel_context_create(struct intel_context *ce) 1071e03b5906SMatthew Brost { 1072e03b5906SMatthew Brost } 1073e03b5906SMatthew Brost 1074e03b5906SMatthew Brost static inline void 1075e03b5906SMatthew Brost trace_intel_context_fence_release(struct intel_context *ce) 1076e03b5906SMatthew Brost { 1077e03b5906SMatthew Brost } 1078e03b5906SMatthew Brost 1079e03b5906SMatthew Brost static inline void 1080e03b5906SMatthew Brost trace_intel_context_free(struct intel_context *ce) 1081e03b5906SMatthew Brost { 1082e03b5906SMatthew Brost } 1083e03b5906SMatthew Brost 1084e03b5906SMatthew Brost static inline void 1085e03b5906SMatthew Brost trace_intel_context_steal_guc_id(struct intel_context *ce) 1086e03b5906SMatthew Brost { 1087e03b5906SMatthew Brost } 1088e03b5906SMatthew Brost 1089e03b5906SMatthew Brost static inline void 1090e03b5906SMatthew Brost trace_intel_context_do_pin(struct intel_context *ce) 1091e03b5906SMatthew Brost { 1092e03b5906SMatthew Brost } 1093e03b5906SMatthew Brost 1094e03b5906SMatthew Brost static inline void 1095e03b5906SMatthew Brost trace_intel_context_do_unpin(struct intel_context *ce) 1096e03b5906SMatthew Brost { 1097e03b5906SMatthew Brost } 1098354d036fSTvrtko Ursulin #endif 1099354d036fSTvrtko Ursulin #endif 1100354d036fSTvrtko Ursulin 1101e61e0f51SChris Wilson DEFINE_EVENT(i915_request, i915_request_retire, 1102e61e0f51SChris Wilson TP_PROTO(struct i915_request *rq), 1103e61e0f51SChris Wilson TP_ARGS(rq) 11041c5d22f7SChris Wilson ); 11051c5d22f7SChris Wilson 1106e61e0f51SChris Wilson TRACE_EVENT(i915_request_wait_begin, 1107e61e0f51SChris Wilson TP_PROTO(struct i915_request *rq, unsigned int flags), 1108e61e0f51SChris Wilson TP_ARGS(rq, flags), 1109f3fd3768SBen Widawsky 1110f3fd3768SBen Widawsky TP_STRUCT__entry( 1111f3fd3768SBen Widawsky __field(u32, dev) 111257d7116cSTvrtko Ursulin __field(u64, ctx) 11132956e970STvrtko Ursulin __field(u16, class) 11142956e970STvrtko Ursulin __field(u16, instance) 1115f3fd3768SBen Widawsky __field(u32, seqno) 111693692502STvrtko Ursulin __field(unsigned int, flags) 1117f3fd3768SBen Widawsky ), 1118f3fd3768SBen Widawsky 1119f3fd3768SBen Widawsky /* NB: the blocking information is racy since mutex_is_locked 1120f3fd3768SBen Widawsky * doesn't check that the current thread holds the lock. The only 1121f3fd3768SBen Widawsky * other option would be to pass the boolean information of whether 1122f3fd3768SBen Widawsky * or not the class was blocking down through the stack which is 1123f3fd3768SBen Widawsky * less desirable. 1124f3fd3768SBen Widawsky */ 1125f3fd3768SBen Widawsky TP_fast_assign( 11265a833995SChris Wilson __entry->dev = rq->engine->i915->drm.primary->index; 11272956e970STvrtko Ursulin __entry->class = rq->engine->uabi_class; 1128750e76b4SChris Wilson __entry->instance = rq->engine->uabi_instance; 1129e61e0f51SChris Wilson __entry->ctx = rq->fence.context; 1130e61e0f51SChris Wilson __entry->seqno = rq->fence.seqno; 113193692502STvrtko Ursulin __entry->flags = flags; 1132f3fd3768SBen Widawsky ), 1133f3fd3768SBen Widawsky 11342935ed53SChris Wilson TP_printk("dev=%u, engine=%u:%u, ctx=%llu, seqno=%u, flags=0x%x", 1135f24e74a7STvrtko Ursulin __entry->dev, __entry->class, __entry->instance, 11362935ed53SChris Wilson __entry->ctx, __entry->seqno, 11372956e970STvrtko Ursulin __entry->flags) 11381c5d22f7SChris Wilson ); 11391c5d22f7SChris Wilson 1140e61e0f51SChris Wilson DEFINE_EVENT(i915_request, i915_request_wait_end, 1141e61e0f51SChris Wilson TP_PROTO(struct i915_request *rq), 1142e61e0f51SChris Wilson TP_ARGS(rq) 1143903cf20cSLi Zefan ); 1144903cf20cSLi Zefan 1145ed71f1b4SChris Wilson TRACE_EVENT_CONDITION(i915_reg_rw, 1146f0f59a00SVille Syrjälä TP_PROTO(bool write, i915_reg_t reg, u64 val, int len, bool trace), 1147ba4f01a3SYuanhan Liu 1148ed71f1b4SChris Wilson TP_ARGS(write, reg, val, len, trace), 1149ed71f1b4SChris Wilson 1150ed71f1b4SChris Wilson TP_CONDITION(trace), 1151ba4f01a3SYuanhan Liu 1152ba4f01a3SYuanhan Liu TP_STRUCT__entry( 1153db53a302SChris Wilson __field(u64, val) 1154db53a302SChris Wilson __field(u32, reg) 1155db53a302SChris Wilson __field(u16, write) 1156db53a302SChris Wilson __field(u16, len) 1157ba4f01a3SYuanhan Liu ), 1158ba4f01a3SYuanhan Liu 1159ba4f01a3SYuanhan Liu TP_fast_assign( 1160db53a302SChris Wilson __entry->val = (u64)val; 1161f0f59a00SVille Syrjälä __entry->reg = i915_mmio_reg_offset(reg); 1162db53a302SChris Wilson __entry->write = write; 1163ba4f01a3SYuanhan Liu __entry->len = len; 1164ba4f01a3SYuanhan Liu ), 1165ba4f01a3SYuanhan Liu 1166db53a302SChris Wilson TP_printk("%s reg=0x%x, len=%d, val=(0x%x, 0x%x)", 1167db53a302SChris Wilson __entry->write ? "write" : "read", 1168db53a302SChris Wilson __entry->reg, __entry->len, 1169db53a302SChris Wilson (u32)(__entry->val & 0xffffffff), 1170db53a302SChris Wilson (u32)(__entry->val >> 32)) 1171ba4f01a3SYuanhan Liu ); 1172ba4f01a3SYuanhan Liu 1173be2cde9aSDaniel Vetter TRACE_EVENT(intel_gpu_freq_change, 1174be2cde9aSDaniel Vetter TP_PROTO(u32 freq), 1175be2cde9aSDaniel Vetter TP_ARGS(freq), 1176be2cde9aSDaniel Vetter 1177be2cde9aSDaniel Vetter TP_STRUCT__entry( 1178be2cde9aSDaniel Vetter __field(u32, freq) 1179be2cde9aSDaniel Vetter ), 1180be2cde9aSDaniel Vetter 1181be2cde9aSDaniel Vetter TP_fast_assign( 1182be2cde9aSDaniel Vetter __entry->freq = freq; 1183be2cde9aSDaniel Vetter ), 1184be2cde9aSDaniel Vetter 1185be2cde9aSDaniel Vetter TP_printk("new_freq=%u", __entry->freq) 1186be2cde9aSDaniel Vetter ); 1187be2cde9aSDaniel Vetter 1188198c974dSDaniele Ceraolo Spurio /** 1189198c974dSDaniele Ceraolo Spurio * DOC: i915_ppgtt_create and i915_ppgtt_release tracepoints 1190198c974dSDaniele Ceraolo Spurio * 1191198c974dSDaniele Ceraolo Spurio * With full ppgtt enabled each process using drm will allocate at least one 1192198c974dSDaniele Ceraolo Spurio * translation table. With these traces it is possible to keep track of the 1193198c974dSDaniele Ceraolo Spurio * allocation and of the lifetime of the tables; this can be used during 1194198c974dSDaniele Ceraolo Spurio * testing/debug to verify that we are not leaking ppgtts. 1195198c974dSDaniele Ceraolo Spurio * These traces identify the ppgtt through the vm pointer, which is also printed 1196198c974dSDaniele Ceraolo Spurio * by the i915_vma_bind and i915_vma_unbind tracepoints. 1197198c974dSDaniele Ceraolo Spurio */ 1198198c974dSDaniele Ceraolo Spurio DECLARE_EVENT_CLASS(i915_ppgtt, 1199198c974dSDaniele Ceraolo Spurio TP_PROTO(struct i915_address_space *vm), 1200198c974dSDaniele Ceraolo Spurio TP_ARGS(vm), 1201198c974dSDaniele Ceraolo Spurio 1202198c974dSDaniele Ceraolo Spurio TP_STRUCT__entry( 1203198c974dSDaniele Ceraolo Spurio __field(struct i915_address_space *, vm) 1204198c974dSDaniele Ceraolo Spurio __field(u32, dev) 1205198c974dSDaniele Ceraolo Spurio ), 1206198c974dSDaniele Ceraolo Spurio 1207198c974dSDaniele Ceraolo Spurio TP_fast_assign( 1208198c974dSDaniele Ceraolo Spurio __entry->vm = vm; 1209c6385c94SChris Wilson __entry->dev = vm->i915->drm.primary->index; 1210198c974dSDaniele Ceraolo Spurio ), 1211198c974dSDaniele Ceraolo Spurio 1212198c974dSDaniele Ceraolo Spurio TP_printk("dev=%u, vm=%p", __entry->dev, __entry->vm) 1213198c974dSDaniele Ceraolo Spurio ) 1214198c974dSDaniele Ceraolo Spurio 1215198c974dSDaniele Ceraolo Spurio DEFINE_EVENT(i915_ppgtt, i915_ppgtt_create, 1216198c974dSDaniele Ceraolo Spurio TP_PROTO(struct i915_address_space *vm), 1217198c974dSDaniele Ceraolo Spurio TP_ARGS(vm) 1218198c974dSDaniele Ceraolo Spurio ); 1219198c974dSDaniele Ceraolo Spurio 1220198c974dSDaniele Ceraolo Spurio DEFINE_EVENT(i915_ppgtt, i915_ppgtt_release, 1221198c974dSDaniele Ceraolo Spurio TP_PROTO(struct i915_address_space *vm), 1222198c974dSDaniele Ceraolo Spurio TP_ARGS(vm) 1223198c974dSDaniele Ceraolo Spurio ); 1224198c974dSDaniele Ceraolo Spurio 1225198c974dSDaniele Ceraolo Spurio /** 1226198c974dSDaniele Ceraolo Spurio * DOC: i915_context_create and i915_context_free tracepoints 1227198c974dSDaniele Ceraolo Spurio * 1228198c974dSDaniele Ceraolo Spurio * These tracepoints are used to track creation and deletion of contexts. 1229198c974dSDaniele Ceraolo Spurio * If full ppgtt is enabled, they also print the address of the vm assigned to 1230198c974dSDaniele Ceraolo Spurio * the context. 1231198c974dSDaniele Ceraolo Spurio */ 1232198c974dSDaniele Ceraolo Spurio DECLARE_EVENT_CLASS(i915_context, 1233e2efd130SChris Wilson TP_PROTO(struct i915_gem_context *ctx), 1234198c974dSDaniele Ceraolo Spurio TP_ARGS(ctx), 1235198c974dSDaniele Ceraolo Spurio 1236198c974dSDaniele Ceraolo Spurio TP_STRUCT__entry( 1237198c974dSDaniele Ceraolo Spurio __field(u32, dev) 1238e2efd130SChris Wilson __field(struct i915_gem_context *, ctx) 1239198c974dSDaniele Ceraolo Spurio __field(struct i915_address_space *, vm) 1240198c974dSDaniele Ceraolo Spurio ), 1241198c974dSDaniele Ceraolo Spurio 1242198c974dSDaniele Ceraolo Spurio TP_fast_assign( 124391c8a326SChris Wilson __entry->dev = ctx->i915->drm.primary->index; 124499c181a0STvrtko Ursulin __entry->ctx = ctx; 12459ec8795eSDaniel Vetter __entry->vm = ctx->vm; 1246198c974dSDaniele Ceraolo Spurio ), 1247198c974dSDaniele Ceraolo Spurio 12482935ed53SChris Wilson TP_printk("dev=%u, ctx=%p, ctx_vm=%p", 12492935ed53SChris Wilson __entry->dev, __entry->ctx, __entry->vm) 1250198c974dSDaniele Ceraolo Spurio ) 1251198c974dSDaniele Ceraolo Spurio 1252198c974dSDaniele Ceraolo Spurio DEFINE_EVENT(i915_context, i915_context_create, 1253e2efd130SChris Wilson TP_PROTO(struct i915_gem_context *ctx), 1254198c974dSDaniele Ceraolo Spurio TP_ARGS(ctx) 1255198c974dSDaniele Ceraolo Spurio ); 1256198c974dSDaniele Ceraolo Spurio 1257198c974dSDaniele Ceraolo Spurio DEFINE_EVENT(i915_context, i915_context_free, 1258e2efd130SChris Wilson TP_PROTO(struct i915_gem_context *ctx), 1259198c974dSDaniele Ceraolo Spurio TP_ARGS(ctx) 1260198c974dSDaniele Ceraolo Spurio ); 1261198c974dSDaniele Ceraolo Spurio 12621c5d22f7SChris Wilson #endif /* _I915_TRACE_H_ */ 12631c5d22f7SChris Wilson 12641c5d22f7SChris Wilson /* This part must be outside protection */ 12651c5d22f7SChris Wilson #undef TRACE_INCLUDE_PATH 12664e6d7719SThierry Reding #define TRACE_INCLUDE_PATH ../../drivers/gpu/drm/i915 12671c5d22f7SChris Wilson #include <trace/define_trace.h> 1268