1 /* SPDX-License-Identifier: GPL-2.0 */ 2 /* 3 * Copyright © 2021 Intel Corporation 4 */ 5 6 #undef TRACE_SYSTEM 7 #define TRACE_SYSTEM i915 8 9 #if !defined(__INTEL_DISPLAY_TRACE_H__) || defined(TRACE_HEADER_MULTI_READ) 10 #define __INTEL_DISPLAY_TRACE_H__ 11 12 #include <linux/string_helpers.h> 13 #include <linux/types.h> 14 #include <linux/tracepoint.h> 15 16 #include "i915_drv.h" 17 #include "intel_crtc.h" 18 #include "intel_display_types.h" 19 #include "intel_vblank.h" 20 21 #define __dev_name_i915(i915) dev_name((i915)->drm.dev) 22 #define __dev_name_kms(obj) dev_name((obj)->base.dev->dev) 23 24 TRACE_EVENT(intel_pipe_enable, 25 TP_PROTO(struct intel_crtc *crtc), 26 TP_ARGS(crtc), 27 28 TP_STRUCT__entry( 29 __string(dev, __dev_name_kms(crtc)) 30 __array(u32, frame, 3) 31 __array(u32, scanline, 3) 32 __field(enum pipe, pipe) 33 ), 34 TP_fast_assign( 35 struct drm_i915_private *dev_priv = to_i915(crtc->base.dev); 36 struct intel_crtc *it__; 37 __assign_str(dev, __dev_name_kms(crtc)); 38 for_each_intel_crtc(&dev_priv->drm, it__) { 39 __entry->frame[it__->pipe] = intel_crtc_get_vblank_counter(it__); 40 __entry->scanline[it__->pipe] = intel_get_crtc_scanline(it__); 41 } 42 __entry->pipe = crtc->pipe; 43 ), 44 45 TP_printk("dev %s, pipe %c enable, pipe A: frame=%u, scanline=%u, pipe B: frame=%u, scanline=%u, pipe C: frame=%u, scanline=%u", 46 __get_str(dev), pipe_name(__entry->pipe), 47 __entry->frame[PIPE_A], __entry->scanline[PIPE_A], 48 __entry->frame[PIPE_B], __entry->scanline[PIPE_B], 49 __entry->frame[PIPE_C], __entry->scanline[PIPE_C]) 50 ); 51 52 TRACE_EVENT(intel_pipe_disable, 53 TP_PROTO(struct intel_crtc *crtc), 54 TP_ARGS(crtc), 55 56 TP_STRUCT__entry( 57 __string(dev, __dev_name_kms(crtc)) 58 __array(u32, frame, 3) 59 __array(u32, scanline, 3) 60 __field(enum pipe, pipe) 61 ), 62 63 TP_fast_assign( 64 struct drm_i915_private *dev_priv = to_i915(crtc->base.dev); 65 struct intel_crtc *it__; 66 __assign_str(dev, __dev_name_kms(crtc)); 67 for_each_intel_crtc(&dev_priv->drm, it__) { 68 __entry->frame[it__->pipe] = intel_crtc_get_vblank_counter(it__); 69 __entry->scanline[it__->pipe] = intel_get_crtc_scanline(it__); 70 } 71 __entry->pipe = crtc->pipe; 72 ), 73 74 TP_printk("dev %s, pipe %c disable, pipe A: frame=%u, scanline=%u, pipe B: frame=%u, scanline=%u, pipe C: frame=%u, scanline=%u", 75 __get_str(dev), pipe_name(__entry->pipe), 76 __entry->frame[PIPE_A], __entry->scanline[PIPE_A], 77 __entry->frame[PIPE_B], __entry->scanline[PIPE_B], 78 __entry->frame[PIPE_C], __entry->scanline[PIPE_C]) 79 ); 80 81 TRACE_EVENT(intel_pipe_crc, 82 TP_PROTO(struct intel_crtc *crtc, const u32 *crcs), 83 TP_ARGS(crtc, crcs), 84 85 TP_STRUCT__entry( 86 __string(dev, __dev_name_kms(crtc)) 87 __field(enum pipe, pipe) 88 __field(u32, frame) 89 __field(u32, scanline) 90 __array(u32, crcs, 5) 91 ), 92 93 TP_fast_assign( 94 __assign_str(dev, __dev_name_kms(crtc)); 95 __entry->pipe = crtc->pipe; 96 __entry->frame = intel_crtc_get_vblank_counter(crtc); 97 __entry->scanline = intel_get_crtc_scanline(crtc); 98 memcpy(__entry->crcs, crcs, sizeof(__entry->crcs)); 99 ), 100 101 TP_printk("dev %s, pipe %c, frame=%u, scanline=%u crc=%08x %08x %08x %08x %08x", 102 __get_str(dev), pipe_name(__entry->pipe), 103 __entry->frame, __entry->scanline, 104 __entry->crcs[0], __entry->crcs[1], 105 __entry->crcs[2], __entry->crcs[3], 106 __entry->crcs[4]) 107 ); 108 109 TRACE_EVENT(intel_cpu_fifo_underrun, 110 TP_PROTO(struct drm_i915_private *dev_priv, enum pipe pipe), 111 TP_ARGS(dev_priv, pipe), 112 113 TP_STRUCT__entry( 114 __string(dev, __dev_name_i915(dev_priv)) 115 __field(enum pipe, pipe) 116 __field(u32, frame) 117 __field(u32, scanline) 118 ), 119 120 TP_fast_assign( 121 struct intel_crtc *crtc = intel_crtc_for_pipe(dev_priv, pipe); 122 __assign_str(dev, __dev_name_kms(crtc)); 123 __entry->pipe = pipe; 124 __entry->frame = intel_crtc_get_vblank_counter(crtc); 125 __entry->scanline = intel_get_crtc_scanline(crtc); 126 ), 127 128 TP_printk("dev %s, pipe %c, frame=%u, scanline=%u", 129 __get_str(dev), pipe_name(__entry->pipe), 130 __entry->frame, __entry->scanline) 131 ); 132 133 TRACE_EVENT(intel_pch_fifo_underrun, 134 TP_PROTO(struct drm_i915_private *dev_priv, enum pipe pch_transcoder), 135 TP_ARGS(dev_priv, pch_transcoder), 136 137 TP_STRUCT__entry( 138 __string(dev, __dev_name_i915(dev_priv)) 139 __field(enum pipe, pipe) 140 __field(u32, frame) 141 __field(u32, scanline) 142 ), 143 144 TP_fast_assign( 145 enum pipe pipe = pch_transcoder; 146 struct intel_crtc *crtc = intel_crtc_for_pipe(dev_priv, pipe); 147 __assign_str(dev, __dev_name_i915(dev_priv)); 148 __entry->pipe = pipe; 149 __entry->frame = intel_crtc_get_vblank_counter(crtc); 150 __entry->scanline = intel_get_crtc_scanline(crtc); 151 ), 152 153 TP_printk("dev %s, pch transcoder %c, frame=%u, scanline=%u", 154 __get_str(dev), pipe_name(__entry->pipe), 155 __entry->frame, __entry->scanline) 156 ); 157 158 TRACE_EVENT(intel_memory_cxsr, 159 TP_PROTO(struct drm_i915_private *dev_priv, bool old, bool new), 160 TP_ARGS(dev_priv, old, new), 161 162 TP_STRUCT__entry( 163 __string(dev, __dev_name_i915(dev_priv)) 164 __array(u32, frame, 3) 165 __array(u32, scanline, 3) 166 __field(bool, old) 167 __field(bool, new) 168 ), 169 170 TP_fast_assign( 171 struct intel_crtc *crtc; 172 __assign_str(dev, __dev_name_i915(dev_priv)); 173 for_each_intel_crtc(&dev_priv->drm, crtc) { 174 __entry->frame[crtc->pipe] = intel_crtc_get_vblank_counter(crtc); 175 __entry->scanline[crtc->pipe] = intel_get_crtc_scanline(crtc); 176 } 177 __entry->old = old; 178 __entry->new = new; 179 ), 180 181 TP_printk("dev %s, cxsr %s->%s, pipe A: frame=%u, scanline=%u, pipe B: frame=%u, scanline=%u, pipe C: frame=%u, scanline=%u", 182 __get_str(dev), str_on_off(__entry->old), str_on_off(__entry->new), 183 __entry->frame[PIPE_A], __entry->scanline[PIPE_A], 184 __entry->frame[PIPE_B], __entry->scanline[PIPE_B], 185 __entry->frame[PIPE_C], __entry->scanline[PIPE_C]) 186 ); 187 188 TRACE_EVENT(g4x_wm, 189 TP_PROTO(struct intel_crtc *crtc, const struct g4x_wm_values *wm), 190 TP_ARGS(crtc, wm), 191 192 TP_STRUCT__entry( 193 __string(dev, __dev_name_kms(crtc)) 194 __field(enum pipe, pipe) 195 __field(u32, frame) 196 __field(u32, scanline) 197 __field(u16, primary) 198 __field(u16, sprite) 199 __field(u16, cursor) 200 __field(u16, sr_plane) 201 __field(u16, sr_cursor) 202 __field(u16, sr_fbc) 203 __field(u16, hpll_plane) 204 __field(u16, hpll_cursor) 205 __field(u16, hpll_fbc) 206 __field(bool, cxsr) 207 __field(bool, hpll) 208 __field(bool, fbc) 209 ), 210 211 TP_fast_assign( 212 __assign_str(dev, __dev_name_kms(crtc)); 213 __entry->pipe = crtc->pipe; 214 __entry->frame = intel_crtc_get_vblank_counter(crtc); 215 __entry->scanline = intel_get_crtc_scanline(crtc); 216 __entry->primary = wm->pipe[crtc->pipe].plane[PLANE_PRIMARY]; 217 __entry->sprite = wm->pipe[crtc->pipe].plane[PLANE_SPRITE0]; 218 __entry->cursor = wm->pipe[crtc->pipe].plane[PLANE_CURSOR]; 219 __entry->sr_plane = wm->sr.plane; 220 __entry->sr_cursor = wm->sr.cursor; 221 __entry->sr_fbc = wm->sr.fbc; 222 __entry->hpll_plane = wm->hpll.plane; 223 __entry->hpll_cursor = wm->hpll.cursor; 224 __entry->hpll_fbc = wm->hpll.fbc; 225 __entry->cxsr = wm->cxsr; 226 __entry->hpll = wm->hpll_en; 227 __entry->fbc = wm->fbc_en; 228 ), 229 230 TP_printk("dev %s, pipe %c, frame=%u, scanline=%u, wm %d/%d/%d, sr %s/%d/%d/%d, hpll %s/%d/%d/%d, fbc %s", 231 __get_str(dev), pipe_name(__entry->pipe), 232 __entry->frame, __entry->scanline, 233 __entry->primary, __entry->sprite, __entry->cursor, 234 str_yes_no(__entry->cxsr), __entry->sr_plane, __entry->sr_cursor, __entry->sr_fbc, 235 str_yes_no(__entry->hpll), __entry->hpll_plane, __entry->hpll_cursor, __entry->hpll_fbc, 236 str_yes_no(__entry->fbc)) 237 ); 238 239 TRACE_EVENT(vlv_wm, 240 TP_PROTO(struct intel_crtc *crtc, const struct vlv_wm_values *wm), 241 TP_ARGS(crtc, wm), 242 243 TP_STRUCT__entry( 244 __string(dev, __dev_name_kms(crtc)) 245 __field(enum pipe, pipe) 246 __field(u32, frame) 247 __field(u32, scanline) 248 __field(u32, level) 249 __field(u32, cxsr) 250 __field(u32, primary) 251 __field(u32, sprite0) 252 __field(u32, sprite1) 253 __field(u32, cursor) 254 __field(u32, sr_plane) 255 __field(u32, sr_cursor) 256 ), 257 258 TP_fast_assign( 259 __assign_str(dev, __dev_name_kms(crtc)); 260 __entry->pipe = crtc->pipe; 261 __entry->frame = intel_crtc_get_vblank_counter(crtc); 262 __entry->scanline = intel_get_crtc_scanline(crtc); 263 __entry->level = wm->level; 264 __entry->cxsr = wm->cxsr; 265 __entry->primary = wm->pipe[crtc->pipe].plane[PLANE_PRIMARY]; 266 __entry->sprite0 = wm->pipe[crtc->pipe].plane[PLANE_SPRITE0]; 267 __entry->sprite1 = wm->pipe[crtc->pipe].plane[PLANE_SPRITE1]; 268 __entry->cursor = wm->pipe[crtc->pipe].plane[PLANE_CURSOR]; 269 __entry->sr_plane = wm->sr.plane; 270 __entry->sr_cursor = wm->sr.cursor; 271 ), 272 273 TP_printk("dev %s, pipe %c, frame=%u, scanline=%u, level=%d, cxsr=%d, wm %d/%d/%d/%d, sr %d/%d", 274 __get_str(dev), pipe_name(__entry->pipe), 275 __entry->frame, __entry->scanline, 276 __entry->level, __entry->cxsr, 277 __entry->primary, __entry->sprite0, __entry->sprite1, __entry->cursor, 278 __entry->sr_plane, __entry->sr_cursor) 279 ); 280 281 TRACE_EVENT(vlv_fifo_size, 282 TP_PROTO(struct intel_crtc *crtc, u32 sprite0_start, u32 sprite1_start, u32 fifo_size), 283 TP_ARGS(crtc, sprite0_start, sprite1_start, fifo_size), 284 285 TP_STRUCT__entry( 286 __string(dev, __dev_name_kms(crtc)) 287 __field(enum pipe, pipe) 288 __field(u32, frame) 289 __field(u32, scanline) 290 __field(u32, sprite0_start) 291 __field(u32, sprite1_start) 292 __field(u32, fifo_size) 293 ), 294 295 TP_fast_assign( 296 __assign_str(dev, __dev_name_kms(crtc)); 297 __entry->pipe = crtc->pipe; 298 __entry->frame = intel_crtc_get_vblank_counter(crtc); 299 __entry->scanline = intel_get_crtc_scanline(crtc); 300 __entry->sprite0_start = sprite0_start; 301 __entry->sprite1_start = sprite1_start; 302 __entry->fifo_size = fifo_size; 303 ), 304 305 TP_printk("dev %s, pipe %c, frame=%u, scanline=%u, %d/%d/%d", 306 __get_str(dev), pipe_name(__entry->pipe), 307 __entry->frame, __entry->scanline, 308 __entry->sprite0_start, __entry->sprite1_start, __entry->fifo_size) 309 ); 310 311 TRACE_EVENT(intel_plane_update_noarm, 312 TP_PROTO(struct intel_plane *plane, struct intel_crtc *crtc), 313 TP_ARGS(plane, crtc), 314 315 TP_STRUCT__entry( 316 __string(dev, __dev_name_kms(plane)) 317 __field(enum pipe, pipe) 318 __field(u32, frame) 319 __field(u32, scanline) 320 __array(int, src, 4) 321 __array(int, dst, 4) 322 __string(name, plane->base.name) 323 ), 324 325 TP_fast_assign( 326 __assign_str(dev, __dev_name_kms(plane)); 327 __assign_str(name, plane->base.name); 328 __entry->pipe = crtc->pipe; 329 __entry->frame = intel_crtc_get_vblank_counter(crtc); 330 __entry->scanline = intel_get_crtc_scanline(crtc); 331 memcpy(__entry->src, &plane->base.state->src, sizeof(__entry->src)); 332 memcpy(__entry->dst, &plane->base.state->dst, sizeof(__entry->dst)); 333 ), 334 335 TP_printk("dev %s, pipe %c, plane %s, frame=%u, scanline=%u, " DRM_RECT_FP_FMT " -> " DRM_RECT_FMT, 336 __get_str(dev), pipe_name(__entry->pipe), __get_str(name), 337 __entry->frame, __entry->scanline, 338 DRM_RECT_FP_ARG((const struct drm_rect *)__entry->src), 339 DRM_RECT_ARG((const struct drm_rect *)__entry->dst)) 340 ); 341 342 TRACE_EVENT(intel_plane_update_arm, 343 TP_PROTO(struct intel_plane *plane, struct intel_crtc *crtc), 344 TP_ARGS(plane, crtc), 345 346 TP_STRUCT__entry( 347 __string(dev, __dev_name_kms(plane)) 348 __field(enum pipe, pipe) 349 __field(u32, frame) 350 __field(u32, scanline) 351 __array(int, src, 4) 352 __array(int, dst, 4) 353 __string(name, plane->base.name) 354 ), 355 356 TP_fast_assign( 357 __assign_str(dev, __dev_name_kms(plane)); 358 __assign_str(name, plane->base.name); 359 __entry->pipe = crtc->pipe; 360 __entry->frame = intel_crtc_get_vblank_counter(crtc); 361 __entry->scanline = intel_get_crtc_scanline(crtc); 362 memcpy(__entry->src, &plane->base.state->src, sizeof(__entry->src)); 363 memcpy(__entry->dst, &plane->base.state->dst, sizeof(__entry->dst)); 364 ), 365 366 TP_printk("dev %s, pipe %c, plane %s, frame=%u, scanline=%u, " DRM_RECT_FP_FMT " -> " DRM_RECT_FMT, 367 __get_str(dev), pipe_name(__entry->pipe), __get_str(name), 368 __entry->frame, __entry->scanline, 369 DRM_RECT_FP_ARG((const struct drm_rect *)__entry->src), 370 DRM_RECT_ARG((const struct drm_rect *)__entry->dst)) 371 ); 372 373 TRACE_EVENT(intel_plane_disable_arm, 374 TP_PROTO(struct intel_plane *plane, struct intel_crtc *crtc), 375 TP_ARGS(plane, crtc), 376 377 TP_STRUCT__entry( 378 __string(dev, __dev_name_kms(plane)) 379 __field(enum pipe, pipe) 380 __field(u32, frame) 381 __field(u32, scanline) 382 __string(name, plane->base.name) 383 ), 384 385 TP_fast_assign( 386 __assign_str(dev, __dev_name_kms(plane)); 387 __assign_str(name, plane->base.name); 388 __entry->pipe = crtc->pipe; 389 __entry->frame = intel_crtc_get_vblank_counter(crtc); 390 __entry->scanline = intel_get_crtc_scanline(crtc); 391 ), 392 393 TP_printk("dev %s, pipe %c, plane %s, frame=%u, scanline=%u", 394 __get_str(dev), pipe_name(__entry->pipe), __get_str(name), 395 __entry->frame, __entry->scanline) 396 ); 397 398 TRACE_EVENT(intel_fbc_activate, 399 TP_PROTO(struct intel_plane *plane), 400 TP_ARGS(plane), 401 402 TP_STRUCT__entry( 403 __string(dev, __dev_name_kms(plane)) 404 __string(name, plane->base.name) 405 __field(enum pipe, pipe) 406 __field(u32, frame) 407 __field(u32, scanline) 408 ), 409 410 TP_fast_assign( 411 struct intel_crtc *crtc = intel_crtc_for_pipe(to_i915(plane->base.dev), 412 plane->pipe); 413 __assign_str(dev, __dev_name_kms(plane)); 414 __assign_str(name, plane->base.name) 415 __entry->pipe = crtc->pipe; 416 __entry->frame = intel_crtc_get_vblank_counter(crtc); 417 __entry->scanline = intel_get_crtc_scanline(crtc); 418 ), 419 420 TP_printk("dev %s, pipe %c, plane %s, frame=%u, scanline=%u", 421 __get_str(dev), pipe_name(__entry->pipe), __get_str(name), 422 __entry->frame, __entry->scanline) 423 ); 424 425 TRACE_EVENT(intel_fbc_deactivate, 426 TP_PROTO(struct intel_plane *plane), 427 TP_ARGS(plane), 428 429 TP_STRUCT__entry( 430 __string(dev, __dev_name_kms(plane)) 431 __string(name, plane->base.name) 432 __field(enum pipe, pipe) 433 __field(u32, frame) 434 __field(u32, scanline) 435 ), 436 437 TP_fast_assign( 438 struct intel_crtc *crtc = intel_crtc_for_pipe(to_i915(plane->base.dev), 439 plane->pipe); 440 __assign_str(dev, __dev_name_kms(plane)); 441 __assign_str(name, plane->base.name) 442 __entry->pipe = crtc->pipe; 443 __entry->frame = intel_crtc_get_vblank_counter(crtc); 444 __entry->scanline = intel_get_crtc_scanline(crtc); 445 ), 446 447 TP_printk("dev %s, pipe %c, plane %s, frame=%u, scanline=%u", 448 __get_str(dev), pipe_name(__entry->pipe), __get_str(name), 449 __entry->frame, __entry->scanline) 450 ); 451 452 TRACE_EVENT(intel_fbc_nuke, 453 TP_PROTO(struct intel_plane *plane), 454 TP_ARGS(plane), 455 456 TP_STRUCT__entry( 457 __string(dev, __dev_name_kms(plane)) 458 __string(name, plane->base.name) 459 __field(enum pipe, pipe) 460 __field(u32, frame) 461 __field(u32, scanline) 462 ), 463 464 TP_fast_assign( 465 struct intel_crtc *crtc = intel_crtc_for_pipe(to_i915(plane->base.dev), 466 plane->pipe); 467 __assign_str(dev, __dev_name_kms(plane)); 468 __assign_str(name, plane->base.name) 469 __entry->pipe = crtc->pipe; 470 __entry->frame = intel_crtc_get_vblank_counter(crtc); 471 __entry->scanline = intel_get_crtc_scanline(crtc); 472 ), 473 474 TP_printk("dev %s, pipe %c, plane %s, frame=%u, scanline=%u", 475 __get_str(dev), pipe_name(__entry->pipe), __get_str(name), 476 __entry->frame, __entry->scanline) 477 ); 478 479 TRACE_EVENT(intel_crtc_vblank_work_start, 480 TP_PROTO(struct intel_crtc *crtc), 481 TP_ARGS(crtc), 482 483 TP_STRUCT__entry( 484 __string(dev, __dev_name_kms(crtc)) 485 __field(enum pipe, pipe) 486 __field(u32, frame) 487 __field(u32, scanline) 488 ), 489 490 TP_fast_assign( 491 __assign_str(dev, __dev_name_kms(crtc)); 492 __entry->pipe = crtc->pipe; 493 __entry->frame = intel_crtc_get_vblank_counter(crtc); 494 __entry->scanline = intel_get_crtc_scanline(crtc); 495 ), 496 497 TP_printk("dev %s, pipe %c, frame=%u, scanline=%u", 498 __get_str(dev), pipe_name(__entry->pipe), 499 __entry->frame, __entry->scanline) 500 ); 501 502 TRACE_EVENT(intel_crtc_vblank_work_end, 503 TP_PROTO(struct intel_crtc *crtc), 504 TP_ARGS(crtc), 505 506 TP_STRUCT__entry( 507 __string(dev, __dev_name_kms(crtc)) 508 __field(enum pipe, pipe) 509 __field(u32, frame) 510 __field(u32, scanline) 511 ), 512 513 TP_fast_assign( 514 __assign_str(dev, __dev_name_kms(crtc)); 515 __entry->pipe = crtc->pipe; 516 __entry->frame = intel_crtc_get_vblank_counter(crtc); 517 __entry->scanline = intel_get_crtc_scanline(crtc); 518 ), 519 520 TP_printk("dev %s, pipe %c, frame=%u, scanline=%u", 521 __get_str(dev), pipe_name(__entry->pipe), 522 __entry->frame, __entry->scanline) 523 ); 524 525 TRACE_EVENT(intel_pipe_update_start, 526 TP_PROTO(struct intel_crtc *crtc), 527 TP_ARGS(crtc), 528 529 TP_STRUCT__entry( 530 __string(dev, __dev_name_kms(crtc)) 531 __field(enum pipe, pipe) 532 __field(u32, frame) 533 __field(u32, scanline) 534 __field(u32, min) 535 __field(u32, max) 536 ), 537 538 TP_fast_assign( 539 __assign_str(dev, __dev_name_kms(crtc)); 540 __entry->pipe = crtc->pipe; 541 __entry->frame = intel_crtc_get_vblank_counter(crtc); 542 __entry->scanline = intel_get_crtc_scanline(crtc); 543 __entry->min = crtc->debug.min_vbl; 544 __entry->max = crtc->debug.max_vbl; 545 ), 546 547 TP_printk("dev %s, pipe %c, frame=%u, scanline=%u, min=%u, max=%u", 548 __get_str(dev), pipe_name(__entry->pipe), 549 __entry->frame, __entry->scanline, 550 __entry->min, __entry->max) 551 ); 552 553 TRACE_EVENT(intel_pipe_update_vblank_evaded, 554 TP_PROTO(struct intel_crtc *crtc), 555 TP_ARGS(crtc), 556 557 TP_STRUCT__entry( 558 __string(dev, __dev_name_kms(crtc)) 559 __field(enum pipe, pipe) 560 __field(u32, frame) 561 __field(u32, scanline) 562 __field(u32, min) 563 __field(u32, max) 564 ), 565 566 TP_fast_assign( 567 __assign_str(dev, __dev_name_kms(crtc)); 568 __entry->pipe = crtc->pipe; 569 __entry->frame = crtc->debug.start_vbl_count; 570 __entry->scanline = crtc->debug.scanline_start; 571 __entry->min = crtc->debug.min_vbl; 572 __entry->max = crtc->debug.max_vbl; 573 ), 574 575 TP_printk("dev %s, pipe %c, frame=%u, scanline=%u, min=%u, max=%u", 576 __get_str(dev), pipe_name(__entry->pipe), 577 __entry->frame, __entry->scanline, 578 __entry->min, __entry->max) 579 ); 580 581 TRACE_EVENT(intel_pipe_update_end, 582 TP_PROTO(struct intel_crtc *crtc, u32 frame, int scanline_end), 583 TP_ARGS(crtc, frame, scanline_end), 584 585 TP_STRUCT__entry( 586 __string(dev, __dev_name_kms(crtc)) 587 __field(enum pipe, pipe) 588 __field(u32, frame) 589 __field(u32, scanline) 590 ), 591 592 TP_fast_assign( 593 __assign_str(dev, __dev_name_kms(crtc)); 594 __entry->pipe = crtc->pipe; 595 __entry->frame = frame; 596 __entry->scanline = scanline_end; 597 ), 598 599 TP_printk("dev %s, pipe %c, frame=%u, scanline=%u", 600 __get_str(dev), pipe_name(__entry->pipe), 601 __entry->frame, __entry->scanline) 602 ); 603 604 TRACE_EVENT(intel_frontbuffer_invalidate, 605 TP_PROTO(struct drm_i915_private *i915, 606 unsigned int frontbuffer_bits, unsigned int origin), 607 TP_ARGS(i915, frontbuffer_bits, origin), 608 609 TP_STRUCT__entry( 610 __string(dev, __dev_name_i915(i915)) 611 __field(unsigned int, frontbuffer_bits) 612 __field(unsigned int, origin) 613 ), 614 615 TP_fast_assign( 616 __assign_str(dev, __dev_name_i915(i915)); 617 __entry->frontbuffer_bits = frontbuffer_bits; 618 __entry->origin = origin; 619 ), 620 621 TP_printk("dev %s, frontbuffer_bits=0x%08x, origin=%u", 622 __get_str(dev), __entry->frontbuffer_bits, __entry->origin) 623 ); 624 625 TRACE_EVENT(intel_frontbuffer_flush, 626 TP_PROTO(struct drm_i915_private *i915, 627 unsigned int frontbuffer_bits, unsigned int origin), 628 TP_ARGS(i915, frontbuffer_bits, origin), 629 630 TP_STRUCT__entry( 631 __string(dev, __dev_name_i915(i915)) 632 __field(unsigned int, frontbuffer_bits) 633 __field(unsigned int, origin) 634 ), 635 636 TP_fast_assign( 637 __assign_str(dev, __dev_name_i915(i915)); 638 __entry->frontbuffer_bits = frontbuffer_bits; 639 __entry->origin = origin; 640 ), 641 642 TP_printk("dev %s, frontbuffer_bits=0x%08x, origin=%u", 643 __get_str(dev), __entry->frontbuffer_bits, __entry->origin) 644 ); 645 646 #endif /* __INTEL_DISPLAY_TRACE_H__ */ 647 648 /* This part must be outside protection */ 649 #undef TRACE_INCLUDE_PATH 650 #undef TRACE_INCLUDE_FILE 651 #define TRACE_INCLUDE_PATH ../../drivers/gpu/drm/i915/display 652 #define TRACE_INCLUDE_FILE intel_display_trace 653 #include <trace/define_trace.h> 654