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