Linux Audio

Check our new training course

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