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