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.h> 13 #include <linux/string_helpers.h> 14 #include <linux/types.h> 15 #include <linux/tracepoint.h> 16 17 #include "intel_crtc.h" 18 #include "intel_display_core.h" 19 #include "intel_display_limits.h" 20 #include "intel_display_types.h" 21 #include "intel_vblank.h" 22 23 #define __dev_name_display(display) dev_name((display)->drm->dev) 24 #define __dev_name_kms(obj) dev_name((obj)->base.dev->dev) 25 26 /* 27 * Using identifiers from enum pipe in TP_printk() will confuse tools that 28 * parse /sys/kernel/debug/tracing/{xe,i915}/<event>/format. So we use CPP 29 * macros instead. 30 */ 31 #define _TRACE_PIPE_A 0 32 #define _TRACE_PIPE_B 1 33 #define _TRACE_PIPE_C 2 34 #define _TRACE_PIPE_D 3 35 36 /* 37 * FIXME: Several TP_printk() calls below display frame and scanline numbers for 38 * all possible pipes (regardless of whether they are available) and that is 39 * done with a constant format string. A better approach would be to generate 40 * that info dynamically based on available pipes, but, while we do not have 41 * that implemented yet, let's assert that the constant format string indeed 42 * covers all possible pipes. 43 */ 44 static_assert(I915_MAX_PIPES - 1 == _TRACE_PIPE_D); 45 46 #define _PIPES_FRAME_AND_SCANLINE_FMT \ 47 "pipe A: frame=%u, scanline=%u" \ 48 ", pipe B: frame=%u, scanline=%u" \ 49 ", pipe C: frame=%u, scanline=%u" \ 50 ", pipe D: frame=%u, scanline=%u" 51 52 #define _PIPES_FRAME_AND_SCANLINE_VALUES \ 53 __entry->frame[_TRACE_PIPE_A], __entry->scanline[_TRACE_PIPE_A] \ 54 , __entry->frame[_TRACE_PIPE_B], __entry->scanline[_TRACE_PIPE_B] \ 55 , __entry->frame[_TRACE_PIPE_C], __entry->scanline[_TRACE_PIPE_C] \ 56 , __entry->frame[_TRACE_PIPE_D], __entry->scanline[_TRACE_PIPE_D] 57 58 /* 59 * Paranoid sanity check that at least the enumeration starts at the 60 * same value as _TRACE_PIPE_A. 61 */ 62 static_assert(PIPE_A == _TRACE_PIPE_A); 63 64 TRACE_EVENT(intel_pipe_enable, 65 TP_PROTO(struct intel_crtc *crtc), 66 TP_ARGS(crtc), 67 68 TP_STRUCT__entry( 69 __string(dev, __dev_name_kms(crtc)) 70 __array(u32, frame, I915_MAX_PIPES) 71 __array(u32, scanline, I915_MAX_PIPES) 72 __field(char, pipe_name) 73 ), 74 TP_fast_assign( 75 struct intel_display *display = to_intel_display(crtc); 76 struct intel_crtc *it__; 77 __assign_str(dev); 78 memset(__entry->frame, 0, 79 sizeof(__entry->frame[0]) * I915_MAX_PIPES); 80 memset(__entry->scanline, 0, 81 sizeof(__entry->scanline[0]) * I915_MAX_PIPES); 82 for_each_intel_crtc(display->drm, it__) { 83 __entry->frame[it__->pipe] = intel_crtc_get_vblank_counter(it__); 84 __entry->scanline[it__->pipe] = intel_get_crtc_scanline(it__); 85 } 86 __entry->pipe_name = pipe_name(crtc->pipe); 87 ), 88 89 TP_printk("dev %s, pipe %c enable, " _PIPES_FRAME_AND_SCANLINE_FMT, 90 __get_str(dev), __entry->pipe_name, _PIPES_FRAME_AND_SCANLINE_VALUES) 91 ); 92 93 TRACE_EVENT(intel_pipe_disable, 94 TP_PROTO(struct intel_crtc *crtc), 95 TP_ARGS(crtc), 96 97 TP_STRUCT__entry( 98 __string(dev, __dev_name_kms(crtc)) 99 __array(u32, frame, I915_MAX_PIPES) 100 __array(u32, scanline, I915_MAX_PIPES) 101 __field(char, pipe_name) 102 ), 103 104 TP_fast_assign( 105 struct intel_display *display = to_intel_display(crtc); 106 struct intel_crtc *it__; 107 __assign_str(dev); 108 memset(__entry->frame, 0, 109 sizeof(__entry->frame[0]) * I915_MAX_PIPES); 110 memset(__entry->scanline, 0, 111 sizeof(__entry->scanline[0]) * I915_MAX_PIPES); 112 for_each_intel_crtc(display->drm, it__) { 113 __entry->frame[it__->pipe] = intel_crtc_get_vblank_counter(it__); 114 __entry->scanline[it__->pipe] = intel_get_crtc_scanline(it__); 115 } 116 __entry->pipe_name = pipe_name(crtc->pipe); 117 ), 118 119 TP_printk("dev %s, pipe %c disable, " _PIPES_FRAME_AND_SCANLINE_FMT, 120 __get_str(dev), __entry->pipe_name, _PIPES_FRAME_AND_SCANLINE_VALUES) 121 ); 122 123 TRACE_EVENT(intel_crtc_flip_done, 124 TP_PROTO(struct intel_crtc *crtc), 125 TP_ARGS(crtc), 126 127 TP_STRUCT__entry( 128 __string(dev, __dev_name_kms(crtc)) 129 __field(char, pipe_name) 130 __field(u32, frame) 131 __field(u32, scanline) 132 ), 133 134 TP_fast_assign( 135 __assign_str(dev); 136 __entry->pipe_name = pipe_name(crtc->pipe); 137 __entry->frame = intel_crtc_get_vblank_counter(crtc); 138 __entry->scanline = intel_get_crtc_scanline(crtc); 139 ), 140 141 TP_printk("dev %s, pipe %c, frame=%u, scanline=%u", 142 __get_str(dev), __entry->pipe_name, 143 __entry->frame, __entry->scanline) 144 ); 145 146 TRACE_EVENT(intel_pipe_crc, 147 TP_PROTO(struct intel_crtc *crtc, const u32 *crcs), 148 TP_ARGS(crtc, crcs), 149 150 TP_STRUCT__entry( 151 __string(dev, __dev_name_kms(crtc)) 152 __field(char, pipe_name) 153 __field(u32, frame) 154 __field(u32, scanline) 155 __array(u32, crcs, 5) 156 ), 157 158 TP_fast_assign( 159 __assign_str(dev); 160 __entry->pipe_name = pipe_name(crtc->pipe); 161 __entry->frame = intel_crtc_get_vblank_counter(crtc); 162 __entry->scanline = intel_get_crtc_scanline(crtc); 163 memcpy(__entry->crcs, crcs, sizeof(__entry->crcs)); 164 ), 165 166 TP_printk("dev %s, pipe %c, frame=%u, scanline=%u crc=%08x %08x %08x %08x %08x", 167 __get_str(dev), __entry->pipe_name, 168 __entry->frame, __entry->scanline, 169 __entry->crcs[0], __entry->crcs[1], 170 __entry->crcs[2], __entry->crcs[3], 171 __entry->crcs[4]) 172 ); 173 174 TRACE_EVENT(intel_cpu_fifo_underrun, 175 TP_PROTO(struct intel_display *display, enum pipe pipe), 176 TP_ARGS(display, pipe), 177 178 TP_STRUCT__entry( 179 __string(dev, __dev_name_display(display)) 180 __field(char, pipe_name) 181 __field(u32, frame) 182 __field(u32, scanline) 183 ), 184 185 TP_fast_assign( 186 struct intel_crtc *crtc = intel_crtc_for_pipe(display, pipe); 187 __assign_str(dev); 188 __entry->pipe_name = pipe_name(pipe); 189 __entry->frame = intel_crtc_get_vblank_counter(crtc); 190 __entry->scanline = intel_get_crtc_scanline(crtc); 191 ), 192 193 TP_printk("dev %s, pipe %c, frame=%u, scanline=%u", 194 __get_str(dev), __entry->pipe_name, 195 __entry->frame, __entry->scanline) 196 ); 197 198 TRACE_EVENT(intel_pch_fifo_underrun, 199 TP_PROTO(struct intel_display *display, enum pipe pch_transcoder), 200 TP_ARGS(display, pch_transcoder), 201 202 TP_STRUCT__entry( 203 __string(dev, __dev_name_display(display)) 204 __field(char, pipe_name) 205 __field(u32, frame) 206 __field(u32, scanline) 207 ), 208 209 TP_fast_assign( 210 enum pipe pipe = pch_transcoder; 211 struct intel_crtc *crtc = intel_crtc_for_pipe(display, pipe); 212 __assign_str(dev); 213 __entry->pipe_name = pipe_name(pipe); 214 __entry->frame = intel_crtc_get_vblank_counter(crtc); 215 __entry->scanline = intel_get_crtc_scanline(crtc); 216 ), 217 218 TP_printk("dev %s, pch transcoder %c, frame=%u, scanline=%u", 219 __get_str(dev), __entry->pipe_name, 220 __entry->frame, __entry->scanline) 221 ); 222 223 TRACE_EVENT(intel_memory_cxsr, 224 TP_PROTO(struct intel_display *display, bool old, bool new), 225 TP_ARGS(display, old, new), 226 227 TP_STRUCT__entry( 228 __string(dev, __dev_name_display(display)) 229 __array(u32, frame, I915_MAX_PIPES) 230 __array(u32, scanline, I915_MAX_PIPES) 231 __field(bool, old) 232 __field(bool, new) 233 ), 234 235 TP_fast_assign( 236 struct intel_crtc *crtc; 237 __assign_str(dev); 238 memset(__entry->frame, 0, 239 sizeof(__entry->frame[0]) * I915_MAX_PIPES); 240 memset(__entry->scanline, 0, 241 sizeof(__entry->scanline[0]) * I915_MAX_PIPES); 242 for_each_intel_crtc(display->drm, crtc) { 243 __entry->frame[crtc->pipe] = intel_crtc_get_vblank_counter(crtc); 244 __entry->scanline[crtc->pipe] = intel_get_crtc_scanline(crtc); 245 } 246 __entry->old = old; 247 __entry->new = new; 248 ), 249 250 TP_printk("dev %s, cxsr %s->%s, " _PIPES_FRAME_AND_SCANLINE_FMT, 251 __get_str(dev), str_on_off(__entry->old), str_on_off(__entry->new), 252 _PIPES_FRAME_AND_SCANLINE_VALUES) 253 ); 254 255 TRACE_EVENT(g4x_wm, 256 TP_PROTO(struct intel_crtc *crtc, const struct g4x_wm_values *wm), 257 TP_ARGS(crtc, wm), 258 259 TP_STRUCT__entry( 260 __string(dev, __dev_name_kms(crtc)) 261 __field(char, pipe_name) 262 __field(u32, frame) 263 __field(u32, scanline) 264 __field(u16, primary) 265 __field(u16, sprite) 266 __field(u16, cursor) 267 __field(u16, sr_plane) 268 __field(u16, sr_cursor) 269 __field(u16, sr_fbc) 270 __field(u16, hpll_plane) 271 __field(u16, hpll_cursor) 272 __field(u16, hpll_fbc) 273 __field(bool, cxsr) 274 __field(bool, hpll) 275 __field(bool, fbc) 276 ), 277 278 TP_fast_assign( 279 __assign_str(dev); 280 __entry->pipe_name = pipe_name(crtc->pipe); 281 __entry->frame = intel_crtc_get_vblank_counter(crtc); 282 __entry->scanline = intel_get_crtc_scanline(crtc); 283 __entry->primary = wm->pipe[crtc->pipe].plane[PLANE_PRIMARY]; 284 __entry->sprite = wm->pipe[crtc->pipe].plane[PLANE_SPRITE0]; 285 __entry->cursor = wm->pipe[crtc->pipe].plane[PLANE_CURSOR]; 286 __entry->sr_plane = wm->sr.plane; 287 __entry->sr_cursor = wm->sr.cursor; 288 __entry->sr_fbc = wm->sr.fbc; 289 __entry->hpll_plane = wm->hpll.plane; 290 __entry->hpll_cursor = wm->hpll.cursor; 291 __entry->hpll_fbc = wm->hpll.fbc; 292 __entry->cxsr = wm->cxsr; 293 __entry->hpll = wm->hpll_en; 294 __entry->fbc = wm->fbc_en; 295 ), 296 297 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", 298 __get_str(dev), __entry->pipe_name, 299 __entry->frame, __entry->scanline, 300 __entry->primary, __entry->sprite, __entry->cursor, 301 str_yes_no(__entry->cxsr), __entry->sr_plane, __entry->sr_cursor, __entry->sr_fbc, 302 str_yes_no(__entry->hpll), __entry->hpll_plane, __entry->hpll_cursor, __entry->hpll_fbc, 303 str_yes_no(__entry->fbc)) 304 ); 305 306 TRACE_EVENT(vlv_wm, 307 TP_PROTO(struct intel_crtc *crtc, const struct vlv_wm_values *wm), 308 TP_ARGS(crtc, wm), 309 310 TP_STRUCT__entry( 311 __string(dev, __dev_name_kms(crtc)) 312 __field(char, pipe_name) 313 __field(u32, frame) 314 __field(u32, scanline) 315 __field(u32, level) 316 __field(u32, cxsr) 317 __field(u32, primary) 318 __field(u32, sprite0) 319 __field(u32, sprite1) 320 __field(u32, cursor) 321 __field(u32, sr_plane) 322 __field(u32, sr_cursor) 323 ), 324 325 TP_fast_assign( 326 __assign_str(dev); 327 __entry->pipe_name = pipe_name(crtc->pipe); 328 __entry->frame = intel_crtc_get_vblank_counter(crtc); 329 __entry->scanline = intel_get_crtc_scanline(crtc); 330 __entry->level = wm->level; 331 __entry->cxsr = wm->cxsr; 332 __entry->primary = wm->pipe[crtc->pipe].plane[PLANE_PRIMARY]; 333 __entry->sprite0 = wm->pipe[crtc->pipe].plane[PLANE_SPRITE0]; 334 __entry->sprite1 = wm->pipe[crtc->pipe].plane[PLANE_SPRITE1]; 335 __entry->cursor = wm->pipe[crtc->pipe].plane[PLANE_CURSOR]; 336 __entry->sr_plane = wm->sr.plane; 337 __entry->sr_cursor = wm->sr.cursor; 338 ), 339 340 TP_printk("dev %s, pipe %c, frame=%u, scanline=%u, level=%d, cxsr=%d, wm %d/%d/%d/%d, sr %d/%d", 341 __get_str(dev), __entry->pipe_name, 342 __entry->frame, __entry->scanline, 343 __entry->level, __entry->cxsr, 344 __entry->primary, __entry->sprite0, __entry->sprite1, __entry->cursor, 345 __entry->sr_plane, __entry->sr_cursor) 346 ); 347 348 TRACE_EVENT(vlv_fifo_size, 349 TP_PROTO(struct intel_crtc *crtc, u32 sprite0_start, u32 sprite1_start, u32 fifo_size), 350 TP_ARGS(crtc, sprite0_start, sprite1_start, fifo_size), 351 352 TP_STRUCT__entry( 353 __string(dev, __dev_name_kms(crtc)) 354 __field(char, pipe_name) 355 __field(u32, frame) 356 __field(u32, scanline) 357 __field(u32, sprite0_start) 358 __field(u32, sprite1_start) 359 __field(u32, fifo_size) 360 ), 361 362 TP_fast_assign( 363 __assign_str(dev); 364 __entry->pipe_name = pipe_name(crtc->pipe); 365 __entry->frame = intel_crtc_get_vblank_counter(crtc); 366 __entry->scanline = intel_get_crtc_scanline(crtc); 367 __entry->sprite0_start = sprite0_start; 368 __entry->sprite1_start = sprite1_start; 369 __entry->fifo_size = fifo_size; 370 ), 371 372 TP_printk("dev %s, pipe %c, frame=%u, scanline=%u, %d/%d/%d", 373 __get_str(dev), __entry->pipe_name, 374 __entry->frame, __entry->scanline, 375 __entry->sprite0_start, __entry->sprite1_start, __entry->fifo_size) 376 ); 377 378 TRACE_EVENT(intel_plane_async_flip, 379 TP_PROTO(struct intel_plane *plane, struct intel_crtc *crtc, bool async_flip), 380 TP_ARGS(plane, crtc, async_flip), 381 382 TP_STRUCT__entry( 383 __string(dev, __dev_name_kms(plane)) 384 __field(char, pipe_name) 385 __field(u32, frame) 386 __field(u32, scanline) 387 __field(bool, async_flip) 388 __string(name, plane->base.name) 389 ), 390 391 TP_fast_assign( 392 __assign_str(dev); 393 __assign_str(name); 394 __entry->pipe_name = pipe_name(crtc->pipe); 395 __entry->frame = intel_crtc_get_vblank_counter(crtc); 396 __entry->scanline = intel_get_crtc_scanline(crtc); 397 __entry->async_flip = async_flip; 398 ), 399 400 TP_printk("dev %s, pipe %c, plane %s, frame=%u, scanline=%u, async_flip=%s", 401 __get_str(dev), __entry->pipe_name, __get_str(name), 402 __entry->frame, __entry->scanline, str_yes_no(__entry->async_flip)) 403 ); 404 405 TRACE_EVENT(intel_plane_update_noarm, 406 TP_PROTO(struct intel_plane *plane, struct intel_crtc *crtc), 407 TP_ARGS(plane, crtc), 408 409 TP_STRUCT__entry( 410 __string(dev, __dev_name_kms(plane)) 411 __field(char, pipe_name) 412 __field(u32, frame) 413 __field(u32, scanline) 414 __array(int, src, 4) 415 __array(int, dst, 4) 416 __string(name, plane->base.name) 417 ), 418 419 TP_fast_assign( 420 __assign_str(dev); 421 __assign_str(name); 422 __entry->pipe_name = pipe_name(crtc->pipe); 423 __entry->frame = intel_crtc_get_vblank_counter(crtc); 424 __entry->scanline = intel_get_crtc_scanline(crtc); 425 memcpy(__entry->src, &plane->base.state->src, sizeof(__entry->src)); 426 memcpy(__entry->dst, &plane->base.state->dst, sizeof(__entry->dst)); 427 ), 428 429 TP_printk("dev %s, pipe %c, plane %s, frame=%u, scanline=%u, " DRM_RECT_FP_FMT " -> " DRM_RECT_FMT, 430 __get_str(dev), __entry->pipe_name, __get_str(name), 431 __entry->frame, __entry->scanline, 432 DRM_RECT_FP_ARG((const struct drm_rect *)__entry->src), 433 DRM_RECT_ARG((const struct drm_rect *)__entry->dst)) 434 ); 435 436 TRACE_EVENT(intel_plane_update_arm, 437 TP_PROTO(struct intel_plane *plane, struct intel_crtc *crtc), 438 TP_ARGS(plane, crtc), 439 440 TP_STRUCT__entry( 441 __string(dev, __dev_name_kms(plane)) 442 __field(char, pipe_name) 443 __field(u32, frame) 444 __field(u32, scanline) 445 __array(int, src, 4) 446 __array(int, dst, 4) 447 __string(name, plane->base.name) 448 ), 449 450 TP_fast_assign( 451 __assign_str(dev); 452 __assign_str(name); 453 __entry->pipe_name = pipe_name(crtc->pipe); 454 __entry->frame = intel_crtc_get_vblank_counter(crtc); 455 __entry->scanline = intel_get_crtc_scanline(crtc); 456 memcpy(__entry->src, &plane->base.state->src, sizeof(__entry->src)); 457 memcpy(__entry->dst, &plane->base.state->dst, sizeof(__entry->dst)); 458 ), 459 460 TP_printk("dev %s, pipe %c, plane %s, frame=%u, scanline=%u, " DRM_RECT_FP_FMT " -> " DRM_RECT_FMT, 461 __get_str(dev), __entry->pipe_name, __get_str(name), 462 __entry->frame, __entry->scanline, 463 DRM_RECT_FP_ARG((const struct drm_rect *)__entry->src), 464 DRM_RECT_ARG((const struct drm_rect *)__entry->dst)) 465 ); 466 467 TRACE_EVENT(intel_plane_disable_arm, 468 TP_PROTO(struct intel_plane *plane, struct intel_crtc *crtc), 469 TP_ARGS(plane, crtc), 470 471 TP_STRUCT__entry( 472 __string(dev, __dev_name_kms(plane)) 473 __field(char, pipe_name) 474 __field(u32, frame) 475 __field(u32, scanline) 476 __string(name, plane->base.name) 477 ), 478 479 TP_fast_assign( 480 __assign_str(dev); 481 __assign_str(name); 482 __entry->pipe_name = pipe_name(crtc->pipe); 483 __entry->frame = intel_crtc_get_vblank_counter(crtc); 484 __entry->scanline = intel_get_crtc_scanline(crtc); 485 ), 486 487 TP_printk("dev %s, pipe %c, plane %s, frame=%u, scanline=%u", 488 __get_str(dev), __entry->pipe_name, __get_str(name), 489 __entry->frame, __entry->scanline) 490 ); 491 492 TRACE_EVENT(intel_plane_scaler_update_arm, 493 TP_PROTO(struct intel_plane *plane, 494 int scaler_id, int x, int y, int w, int h), 495 TP_ARGS(plane, scaler_id, x, y, w, h), 496 497 TP_STRUCT__entry( 498 __string(dev, __dev_name_kms(plane)) 499 __field(char, pipe_name) 500 __field(int, scaler_id) 501 __field(u32, frame) 502 __field(u32, scanline) 503 __field(int, x) 504 __field(int, y) 505 __field(int, w) 506 __field(int, h) 507 __string(name, plane->base.name) 508 ), 509 510 TP_fast_assign( 511 struct intel_display *display = to_intel_display(plane); 512 struct intel_crtc *crtc = intel_crtc_for_pipe(display, plane->pipe); 513 __assign_str(dev); 514 __assign_str(name); 515 __entry->pipe_name = pipe_name(crtc->pipe); 516 __entry->scaler_id = scaler_id; 517 __entry->frame = intel_crtc_get_vblank_counter(crtc); 518 __entry->scanline = intel_get_crtc_scanline(crtc); 519 __entry->x = x; 520 __entry->y = y; 521 __entry->w = w; 522 __entry->h = h; 523 ), 524 525 TP_printk("dev %s, pipe %c, scaler %d, plane %s, frame=%u, scanline=%u, " DRM_RECT_FMT, 526 __get_str(dev), __entry->pipe_name, __entry->scaler_id, 527 __get_str(name), __entry->frame, __entry->scanline, 528 __entry->w, __entry->h, __entry->x, __entry->y) 529 ); 530 531 TRACE_EVENT(intel_pipe_scaler_update_arm, 532 TP_PROTO(struct intel_crtc *crtc, int scaler_id, 533 int x, int y, int w, int h), 534 TP_ARGS(crtc, scaler_id, x, y, w, h), 535 536 TP_STRUCT__entry( 537 __string(dev, __dev_name_kms(crtc)) 538 __field(char, pipe_name) 539 __field(int, scaler_id) 540 __field(u32, frame) 541 __field(u32, scanline) 542 __field(int, x) 543 __field(int, y) 544 __field(int, w) 545 __field(int, h) 546 ), 547 548 TP_fast_assign( 549 __assign_str(dev); 550 __entry->pipe_name = pipe_name(crtc->pipe); 551 __entry->scaler_id = scaler_id; 552 __entry->frame = intel_crtc_get_vblank_counter(crtc); 553 __entry->scanline = intel_get_crtc_scanline(crtc); 554 __entry->x = x; 555 __entry->y = y; 556 __entry->w = w; 557 __entry->h = h; 558 ), 559 560 TP_printk("dev %s, pipe %c, scaler %d frame=%u, scanline=%u, " DRM_RECT_FMT, 561 __get_str(dev), __entry->pipe_name, __entry->scaler_id, 562 __entry->frame, __entry->scanline, 563 __entry->w, __entry->h, __entry->x, __entry->y) 564 ); 565 566 TRACE_EVENT(intel_scaler_disable_arm, 567 TP_PROTO(struct intel_crtc *crtc, int scaler_id), 568 TP_ARGS(crtc, scaler_id), 569 570 TP_STRUCT__entry( 571 __string(dev, __dev_name_kms(crtc)) 572 __field(char, pipe_name) 573 __field(int, scaler_id) 574 __field(u32, frame) 575 __field(u32, scanline) 576 ), 577 578 TP_fast_assign( 579 __assign_str(dev); 580 __entry->pipe_name = pipe_name(crtc->pipe); 581 __entry->scaler_id = scaler_id; 582 __entry->frame = intel_crtc_get_vblank_counter(crtc); 583 __entry->scanline = intel_get_crtc_scanline(crtc); 584 ), 585 586 TP_printk("dev %s, pipe %c, scaler %d, frame=%u, scanline=%u", 587 __get_str(dev), __entry->pipe_name, __entry->scaler_id, 588 __entry->frame, __entry->scanline) 589 ); 590 591 TRACE_EVENT(intel_fbc_activate, 592 TP_PROTO(struct intel_plane *plane), 593 TP_ARGS(plane), 594 595 TP_STRUCT__entry( 596 __string(dev, __dev_name_kms(plane)) 597 __string(name, plane->base.name) 598 __field(char, pipe_name) 599 __field(u32, frame) 600 __field(u32, scanline) 601 ), 602 603 TP_fast_assign( 604 struct intel_display *display = to_intel_display(plane->base.dev); 605 struct intel_crtc *crtc = intel_crtc_for_pipe(display, 606 plane->pipe); 607 __assign_str(dev); 608 __assign_str(name); 609 __entry->pipe_name = pipe_name(crtc->pipe); 610 __entry->frame = intel_crtc_get_vblank_counter(crtc); 611 __entry->scanline = intel_get_crtc_scanline(crtc); 612 ), 613 614 TP_printk("dev %s, pipe %c, plane %s, frame=%u, scanline=%u", 615 __get_str(dev), __entry->pipe_name, __get_str(name), 616 __entry->frame, __entry->scanline) 617 ); 618 619 TRACE_EVENT(intel_fbc_deactivate, 620 TP_PROTO(struct intel_plane *plane), 621 TP_ARGS(plane), 622 623 TP_STRUCT__entry( 624 __string(dev, __dev_name_kms(plane)) 625 __string(name, plane->base.name) 626 __field(char, pipe_name) 627 __field(u32, frame) 628 __field(u32, scanline) 629 ), 630 631 TP_fast_assign( 632 struct intel_display *display = to_intel_display(plane->base.dev); 633 struct intel_crtc *crtc = intel_crtc_for_pipe(display, 634 plane->pipe); 635 __assign_str(dev); 636 __assign_str(name); 637 __entry->pipe_name = pipe_name(crtc->pipe); 638 __entry->frame = intel_crtc_get_vblank_counter(crtc); 639 __entry->scanline = intel_get_crtc_scanline(crtc); 640 ), 641 642 TP_printk("dev %s, pipe %c, plane %s, frame=%u, scanline=%u", 643 __get_str(dev), __entry->pipe_name, __get_str(name), 644 __entry->frame, __entry->scanline) 645 ); 646 647 TRACE_EVENT(intel_fbc_nuke, 648 TP_PROTO(struct intel_plane *plane), 649 TP_ARGS(plane), 650 651 TP_STRUCT__entry( 652 __string(dev, __dev_name_kms(plane)) 653 __string(name, plane->base.name) 654 __field(char, pipe_name) 655 __field(u32, frame) 656 __field(u32, scanline) 657 ), 658 659 TP_fast_assign( 660 struct intel_display *display = to_intel_display(plane->base.dev); 661 struct intel_crtc *crtc = intel_crtc_for_pipe(display, 662 plane->pipe); 663 __assign_str(dev); 664 __assign_str(name); 665 __entry->pipe_name = pipe_name(crtc->pipe); 666 __entry->frame = intel_crtc_get_vblank_counter(crtc); 667 __entry->scanline = intel_get_crtc_scanline(crtc); 668 ), 669 670 TP_printk("dev %s, pipe %c, plane %s, frame=%u, scanline=%u", 671 __get_str(dev), __entry->pipe_name, __get_str(name), 672 __entry->frame, __entry->scanline) 673 ); 674 675 TRACE_EVENT(intel_crtc_vblank_work_start, 676 TP_PROTO(struct intel_crtc *crtc), 677 TP_ARGS(crtc), 678 679 TP_STRUCT__entry( 680 __string(dev, __dev_name_kms(crtc)) 681 __field(char, pipe_name) 682 __field(u32, frame) 683 __field(u32, scanline) 684 ), 685 686 TP_fast_assign( 687 __assign_str(dev); 688 __entry->pipe_name = pipe_name(crtc->pipe); 689 __entry->frame = intel_crtc_get_vblank_counter(crtc); 690 __entry->scanline = intel_get_crtc_scanline(crtc); 691 ), 692 693 TP_printk("dev %s, pipe %c, frame=%u, scanline=%u", 694 __get_str(dev), __entry->pipe_name, 695 __entry->frame, __entry->scanline) 696 ); 697 698 TRACE_EVENT(intel_crtc_vblank_work_end, 699 TP_PROTO(struct intel_crtc *crtc), 700 TP_ARGS(crtc), 701 702 TP_STRUCT__entry( 703 __string(dev, __dev_name_kms(crtc)) 704 __field(char, pipe_name) 705 __field(u32, frame) 706 __field(u32, scanline) 707 ), 708 709 TP_fast_assign( 710 __assign_str(dev); 711 __entry->pipe_name = pipe_name(crtc->pipe); 712 __entry->frame = intel_crtc_get_vblank_counter(crtc); 713 __entry->scanline = intel_get_crtc_scanline(crtc); 714 ), 715 716 TP_printk("dev %s, pipe %c, frame=%u, scanline=%u", 717 __get_str(dev), __entry->pipe_name, 718 __entry->frame, __entry->scanline) 719 ); 720 721 TRACE_EVENT(intel_pipe_update_start, 722 TP_PROTO(struct intel_crtc *crtc), 723 TP_ARGS(crtc), 724 725 TP_STRUCT__entry( 726 __string(dev, __dev_name_kms(crtc)) 727 __field(char, pipe_name) 728 __field(u32, frame) 729 __field(u32, scanline) 730 __field(u32, min) 731 __field(u32, max) 732 ), 733 734 TP_fast_assign( 735 __assign_str(dev); 736 __entry->pipe_name = pipe_name(crtc->pipe); 737 __entry->frame = intel_crtc_get_vblank_counter(crtc); 738 __entry->scanline = intel_get_crtc_scanline(crtc); 739 __entry->min = crtc->debug.min_vbl; 740 __entry->max = crtc->debug.max_vbl; 741 ), 742 743 TP_printk("dev %s, pipe %c, frame=%u, scanline=%u, min=%u, max=%u", 744 __get_str(dev), __entry->pipe_name, 745 __entry->frame, __entry->scanline, 746 __entry->min, __entry->max) 747 ); 748 749 TRACE_EVENT(intel_pipe_update_vblank_evaded, 750 TP_PROTO(struct intel_crtc *crtc), 751 TP_ARGS(crtc), 752 753 TP_STRUCT__entry( 754 __string(dev, __dev_name_kms(crtc)) 755 __field(char, pipe_name) 756 __field(u32, frame) 757 __field(u32, scanline) 758 __field(u32, min) 759 __field(u32, max) 760 ), 761 762 TP_fast_assign( 763 __assign_str(dev); 764 __entry->pipe_name = pipe_name(crtc->pipe); 765 __entry->frame = crtc->debug.start_vbl_count; 766 __entry->scanline = crtc->debug.scanline_start; 767 __entry->min = crtc->debug.min_vbl; 768 __entry->max = crtc->debug.max_vbl; 769 ), 770 771 TP_printk("dev %s, pipe %c, frame=%u, scanline=%u, min=%u, max=%u", 772 __get_str(dev), __entry->pipe_name, 773 __entry->frame, __entry->scanline, 774 __entry->min, __entry->max) 775 ); 776 777 TRACE_EVENT(intel_pipe_update_end, 778 TP_PROTO(struct intel_crtc *crtc, u32 frame, int scanline_end), 779 TP_ARGS(crtc, frame, scanline_end), 780 781 TP_STRUCT__entry( 782 __string(dev, __dev_name_kms(crtc)) 783 __field(char, pipe_name) 784 __field(u32, frame) 785 __field(u32, scanline) 786 ), 787 788 TP_fast_assign( 789 __assign_str(dev); 790 __entry->pipe_name = pipe_name(crtc->pipe); 791 __entry->frame = frame; 792 __entry->scanline = scanline_end; 793 ), 794 795 TP_printk("dev %s, pipe %c, frame=%u, scanline=%u", 796 __get_str(dev), __entry->pipe_name, 797 __entry->frame, __entry->scanline) 798 ); 799 800 TRACE_EVENT(intel_frontbuffer_invalidate, 801 TP_PROTO(struct intel_display *display, 802 unsigned int frontbuffer_bits, unsigned int origin), 803 TP_ARGS(display, frontbuffer_bits, origin), 804 805 TP_STRUCT__entry( 806 __string(dev, __dev_name_display(display)) 807 __field(unsigned int, frontbuffer_bits) 808 __field(unsigned int, origin) 809 ), 810 811 TP_fast_assign( 812 __assign_str(dev); 813 __entry->frontbuffer_bits = frontbuffer_bits; 814 __entry->origin = origin; 815 ), 816 817 TP_printk("dev %s, frontbuffer_bits=0x%08x, origin=%u", 818 __get_str(dev), __entry->frontbuffer_bits, __entry->origin) 819 ); 820 821 TRACE_EVENT(intel_frontbuffer_flush, 822 TP_PROTO(struct intel_display *display, 823 unsigned int frontbuffer_bits, unsigned int origin), 824 TP_ARGS(display, frontbuffer_bits, origin), 825 826 TP_STRUCT__entry( 827 __string(dev, __dev_name_display(display)) 828 __field(unsigned int, frontbuffer_bits) 829 __field(unsigned int, origin) 830 ), 831 832 TP_fast_assign( 833 __assign_str(dev); 834 __entry->frontbuffer_bits = frontbuffer_bits; 835 __entry->origin = origin; 836 ), 837 838 TP_printk("dev %s, frontbuffer_bits=0x%08x, origin=%u", 839 __get_str(dev), __entry->frontbuffer_bits, __entry->origin) 840 ); 841 842 #endif /* __INTEL_DISPLAY_TRACE_H__ */ 843 844 /* This part must be outside protection */ 845 #undef TRACE_INCLUDE_PATH 846 #undef TRACE_INCLUDE_FILE 847 #define TRACE_INCLUDE_PATH ../../drivers/gpu/drm/i915/display 848 #define TRACE_INCLUDE_FILE intel_display_trace 849 #include <trace/define_trace.h> 850