xref: /linux/drivers/gpu/drm/i915/display/intel_display_trace.h (revision c156ef573efe4230ef3dc1ff2ec0038fe0eb217f)
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