Loading...
Note: File does not exist in v3.1.
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 "i915_drv.h"
18#include "intel_crtc.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 */
44static_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 */
62static_assert(PIPE_A == _TRACE_PIPE_A);
63
64TRACE_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
93TRACE_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
123TRACE_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
146TRACE_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
174TRACE_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
198TRACE_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
223TRACE_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
255TRACE_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
306TRACE_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
348TRACE_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
378TRACE_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
405TRACE_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
436TRACE_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
467TRACE_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
492TRACE_EVENT(intel_fbc_activate,
493 TP_PROTO(struct intel_plane *plane),
494 TP_ARGS(plane),
495
496 TP_STRUCT__entry(
497 __string(dev, __dev_name_kms(plane))
498 __string(name, plane->base.name)
499 __field(char, pipe_name)
500 __field(u32, frame)
501 __field(u32, scanline)
502 ),
503
504 TP_fast_assign(
505 struct intel_display *display = to_intel_display(plane->base.dev);
506 struct intel_crtc *crtc = intel_crtc_for_pipe(display,
507 plane->pipe);
508 __assign_str(dev);
509 __assign_str(name);
510 __entry->pipe_name = pipe_name(crtc->pipe);
511 __entry->frame = intel_crtc_get_vblank_counter(crtc);
512 __entry->scanline = intel_get_crtc_scanline(crtc);
513 ),
514
515 TP_printk("dev %s, pipe %c, plane %s, frame=%u, scanline=%u",
516 __get_str(dev), __entry->pipe_name, __get_str(name),
517 __entry->frame, __entry->scanline)
518);
519
520TRACE_EVENT(intel_fbc_deactivate,
521 TP_PROTO(struct intel_plane *plane),
522 TP_ARGS(plane),
523
524 TP_STRUCT__entry(
525 __string(dev, __dev_name_kms(plane))
526 __string(name, plane->base.name)
527 __field(char, pipe_name)
528 __field(u32, frame)
529 __field(u32, scanline)
530 ),
531
532 TP_fast_assign(
533 struct intel_display *display = to_intel_display(plane->base.dev);
534 struct intel_crtc *crtc = intel_crtc_for_pipe(display,
535 plane->pipe);
536 __assign_str(dev);
537 __assign_str(name);
538 __entry->pipe_name = pipe_name(crtc->pipe);
539 __entry->frame = intel_crtc_get_vblank_counter(crtc);
540 __entry->scanline = intel_get_crtc_scanline(crtc);
541 ),
542
543 TP_printk("dev %s, pipe %c, plane %s, frame=%u, scanline=%u",
544 __get_str(dev), __entry->pipe_name, __get_str(name),
545 __entry->frame, __entry->scanline)
546);
547
548TRACE_EVENT(intel_fbc_nuke,
549 TP_PROTO(struct intel_plane *plane),
550 TP_ARGS(plane),
551
552 TP_STRUCT__entry(
553 __string(dev, __dev_name_kms(plane))
554 __string(name, plane->base.name)
555 __field(char, pipe_name)
556 __field(u32, frame)
557 __field(u32, scanline)
558 ),
559
560 TP_fast_assign(
561 struct intel_display *display = to_intel_display(plane->base.dev);
562 struct intel_crtc *crtc = intel_crtc_for_pipe(display,
563 plane->pipe);
564 __assign_str(dev);
565 __assign_str(name);
566 __entry->pipe_name = pipe_name(crtc->pipe);
567 __entry->frame = intel_crtc_get_vblank_counter(crtc);
568 __entry->scanline = intel_get_crtc_scanline(crtc);
569 ),
570
571 TP_printk("dev %s, pipe %c, plane %s, frame=%u, scanline=%u",
572 __get_str(dev), __entry->pipe_name, __get_str(name),
573 __entry->frame, __entry->scanline)
574);
575
576TRACE_EVENT(intel_crtc_vblank_work_start,
577 TP_PROTO(struct intel_crtc *crtc),
578 TP_ARGS(crtc),
579
580 TP_STRUCT__entry(
581 __string(dev, __dev_name_kms(crtc))
582 __field(char, pipe_name)
583 __field(u32, frame)
584 __field(u32, scanline)
585 ),
586
587 TP_fast_assign(
588 __assign_str(dev);
589 __entry->pipe_name = pipe_name(crtc->pipe);
590 __entry->frame = intel_crtc_get_vblank_counter(crtc);
591 __entry->scanline = intel_get_crtc_scanline(crtc);
592 ),
593
594 TP_printk("dev %s, pipe %c, frame=%u, scanline=%u",
595 __get_str(dev), __entry->pipe_name,
596 __entry->frame, __entry->scanline)
597);
598
599TRACE_EVENT(intel_crtc_vblank_work_end,
600 TP_PROTO(struct intel_crtc *crtc),
601 TP_ARGS(crtc),
602
603 TP_STRUCT__entry(
604 __string(dev, __dev_name_kms(crtc))
605 __field(char, pipe_name)
606 __field(u32, frame)
607 __field(u32, scanline)
608 ),
609
610 TP_fast_assign(
611 __assign_str(dev);
612 __entry->pipe_name = pipe_name(crtc->pipe);
613 __entry->frame = intel_crtc_get_vblank_counter(crtc);
614 __entry->scanline = intel_get_crtc_scanline(crtc);
615 ),
616
617 TP_printk("dev %s, pipe %c, frame=%u, scanline=%u",
618 __get_str(dev), __entry->pipe_name,
619 __entry->frame, __entry->scanline)
620);
621
622TRACE_EVENT(intel_pipe_update_start,
623 TP_PROTO(struct intel_crtc *crtc),
624 TP_ARGS(crtc),
625
626 TP_STRUCT__entry(
627 __string(dev, __dev_name_kms(crtc))
628 __field(char, pipe_name)
629 __field(u32, frame)
630 __field(u32, scanline)
631 __field(u32, min)
632 __field(u32, max)
633 ),
634
635 TP_fast_assign(
636 __assign_str(dev);
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 __entry->min = crtc->debug.min_vbl;
641 __entry->max = crtc->debug.max_vbl;
642 ),
643
644 TP_printk("dev %s, pipe %c, frame=%u, scanline=%u, min=%u, max=%u",
645 __get_str(dev), __entry->pipe_name,
646 __entry->frame, __entry->scanline,
647 __entry->min, __entry->max)
648);
649
650TRACE_EVENT(intel_pipe_update_vblank_evaded,
651 TP_PROTO(struct intel_crtc *crtc),
652 TP_ARGS(crtc),
653
654 TP_STRUCT__entry(
655 __string(dev, __dev_name_kms(crtc))
656 __field(char, pipe_name)
657 __field(u32, frame)
658 __field(u32, scanline)
659 __field(u32, min)
660 __field(u32, max)
661 ),
662
663 TP_fast_assign(
664 __assign_str(dev);
665 __entry->pipe_name = pipe_name(crtc->pipe);
666 __entry->frame = crtc->debug.start_vbl_count;
667 __entry->scanline = crtc->debug.scanline_start;
668 __entry->min = crtc->debug.min_vbl;
669 __entry->max = crtc->debug.max_vbl;
670 ),
671
672 TP_printk("dev %s, pipe %c, frame=%u, scanline=%u, min=%u, max=%u",
673 __get_str(dev), __entry->pipe_name,
674 __entry->frame, __entry->scanline,
675 __entry->min, __entry->max)
676);
677
678TRACE_EVENT(intel_pipe_update_end,
679 TP_PROTO(struct intel_crtc *crtc, u32 frame, int scanline_end),
680 TP_ARGS(crtc, frame, scanline_end),
681
682 TP_STRUCT__entry(
683 __string(dev, __dev_name_kms(crtc))
684 __field(char, pipe_name)
685 __field(u32, frame)
686 __field(u32, scanline)
687 ),
688
689 TP_fast_assign(
690 __assign_str(dev);
691 __entry->pipe_name = pipe_name(crtc->pipe);
692 __entry->frame = frame;
693 __entry->scanline = scanline_end;
694 ),
695
696 TP_printk("dev %s, pipe %c, frame=%u, scanline=%u",
697 __get_str(dev), __entry->pipe_name,
698 __entry->frame, __entry->scanline)
699);
700
701TRACE_EVENT(intel_frontbuffer_invalidate,
702 TP_PROTO(struct intel_display *display,
703 unsigned int frontbuffer_bits, unsigned int origin),
704 TP_ARGS(display, frontbuffer_bits, origin),
705
706 TP_STRUCT__entry(
707 __string(dev, __dev_name_display(display))
708 __field(unsigned int, frontbuffer_bits)
709 __field(unsigned int, origin)
710 ),
711
712 TP_fast_assign(
713 __assign_str(dev);
714 __entry->frontbuffer_bits = frontbuffer_bits;
715 __entry->origin = origin;
716 ),
717
718 TP_printk("dev %s, frontbuffer_bits=0x%08x, origin=%u",
719 __get_str(dev), __entry->frontbuffer_bits, __entry->origin)
720);
721
722TRACE_EVENT(intel_frontbuffer_flush,
723 TP_PROTO(struct intel_display *display,
724 unsigned int frontbuffer_bits, unsigned int origin),
725 TP_ARGS(display, frontbuffer_bits, origin),
726
727 TP_STRUCT__entry(
728 __string(dev, __dev_name_display(display))
729 __field(unsigned int, frontbuffer_bits)
730 __field(unsigned int, origin)
731 ),
732
733 TP_fast_assign(
734 __assign_str(dev);
735 __entry->frontbuffer_bits = frontbuffer_bits;
736 __entry->origin = origin;
737 ),
738
739 TP_printk("dev %s, frontbuffer_bits=0x%08x, origin=%u",
740 __get_str(dev), __entry->frontbuffer_bits, __entry->origin)
741);
742
743#endif /* __INTEL_DISPLAY_TRACE_H__ */
744
745/* This part must be outside protection */
746#undef TRACE_INCLUDE_PATH
747#undef TRACE_INCLUDE_FILE
748#define TRACE_INCLUDE_PATH ../../drivers/gpu/drm/i915/display
749#define TRACE_INCLUDE_FILE intel_display_trace
750#include <trace/define_trace.h>