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 | |
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 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 | |
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 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 | |
81 | TRACE_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 | |
109 | TRACE_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 | |
133 | TRACE_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 | |
158 | TRACE_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 | |
188 | TRACE_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 | |
239 | TRACE_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 | |
281 | TRACE_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 | |
311 | TRACE_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 | |
342 | TRACE_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 | |
373 | TRACE_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 | |
398 | TRACE_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 | |
425 | TRACE_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 | |
452 | TRACE_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 | |
479 | TRACE_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 | |
502 | TRACE_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 | |
525 | TRACE_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 | |
553 | TRACE_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 | |
581 | TRACE_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 | |
604 | TRACE_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 | |
625 | TRACE_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> |
654 | |