xref: /openbsd/sys/dev/pci/drm/apple/trace.h (revision 9ea232b5)
1 // SPDX-License-Identifier: GPL-2.0-only OR MIT
2 /* Copyright (C) The Asahi Linux Contributors */
3 
4 #undef TRACE_SYSTEM
5 #define TRACE_SYSTEM dcp
6 
7 #if !defined(_TRACE_DCP_H) || defined(TRACE_HEADER_MULTI_READ)
8 #define _TRACE_DCP_H
9 
10 #include "afk.h"
11 #include "dptxep.h"
12 #include "dcp-internal.h"
13 #include "parser.h"
14 
15 #include <linux/stringify.h>
16 #include <linux/types.h>
17 #include <linux/tracepoint.h>
18 
19 #define show_dcp_endpoint(ep)                                      \
20 	__print_symbolic(ep, { SYSTEM_ENDPOINT, "system" },        \
21 			 { TEST_ENDPOINT, "test" },                \
22 			 { DCP_EXPERT_ENDPOINT, "dcpexpert" },     \
23 			 { DISP0_ENDPOINT, "disp0" },              \
24 			 { DPTX_ENDPOINT, "dptxport" },            \
25 			 { HDCP_ENDPOINT, "hdcp" },                \
26 			 { REMOTE_ALLOC_ENDPOINT, "remotealloc" }, \
27 			 { IOMFB_ENDPOINT, "iomfb" })
28 #define print_epic_type(etype)                                  \
29 	__print_symbolic(etype, { EPIC_TYPE_NOTIFY, "notify" }, \
30 			 { EPIC_TYPE_COMMAND, "command" },      \
31 			 { EPIC_TYPE_REPLY, "reply" },          \
32 			 { EPIC_TYPE_NOTIFY_ACK, "notify-ack" })
33 
34 #define print_epic_category(ecat)                             \
35 	__print_symbolic(ecat, { EPIC_CAT_REPORT, "report" }, \
36 			 { EPIC_CAT_NOTIFY, "notify" },       \
37 			 { EPIC_CAT_REPLY, "reply" },         \
38 			 { EPIC_CAT_COMMAND, "command" })
39 
40 #define show_dptxport_apcall(idx)                                              \
41 	__print_symbolic(                                                     \
42 		idx, { DPTX_APCALL_ACTIVATE, "activate" },                    \
43 		{ DPTX_APCALL_DEACTIVATE, "deactivate" },                     \
44 		{ DPTX_APCALL_GET_MAX_DRIVE_SETTINGS,                         \
45 		  "get_max_drive_settings" },                                 \
46 		{ DPTX_APCALL_SET_DRIVE_SETTINGS, "set_drive_settings" },     \
47 		{ DPTX_APCALL_GET_DRIVE_SETTINGS, "get_drive_settings" },     \
48 		{ DPTX_APCALL_WILL_CHANGE_LINKG_CONFIG,                       \
49 		  "will_change_link_config" },                                \
50 		{ DPTX_APCALL_DID_CHANGE_LINK_CONFIG,                         \
51 		  "did_change_link_config" },                                 \
52 		{ DPTX_APCALL_GET_MAX_LINK_RATE, "get_max_link_rate" },       \
53 		{ DPTX_APCALL_GET_LINK_RATE, "get_link_rate" },               \
54 		{ DPTX_APCALL_SET_LINK_RATE, "set_link_rate" },               \
55 		{ DPTX_APCALL_GET_MAX_LANE_COUNT,                             \
56 		  "get_max_lane_count" },                                     \
57 		{ DPTX_APCALL_GET_ACTIVE_LANE_COUNT,                          \
58 		  "get_active_lane_count" },                                  \
59 		{ DPTX_APCALL_SET_ACTIVE_LANE_COUNT,                          \
60 		  "set_active_lane_count" },                                  \
61 		{ DPTX_APCALL_GET_SUPPORTS_DOWN_SPREAD,                       \
62 		  "get_supports_downspread" },                                \
63 		{ DPTX_APCALL_GET_DOWN_SPREAD, "get_downspread" },            \
64 		{ DPTX_APCALL_SET_DOWN_SPREAD, "set_downspread" },            \
65 		{ DPTX_APCALL_GET_SUPPORTS_LANE_MAPPING,                      \
66 		  "get_supports_lane_mapping" },                              \
67 		{ DPTX_APCALL_SET_LANE_MAP, "set_lane_map" },                 \
68 		{ DPTX_APCALL_GET_SUPPORTS_HPD, "get_supports_hpd" },         \
69 		{ DPTX_APCALL_FORCE_HOTPLUG_DETECT, "force_hotplug_detect" }, \
70 		{ DPTX_APCALL_INACTIVE_SINK_DETECTED,                         \
71 		  "inactive_sink_detected" },                                 \
72 		{ DPTX_APCALL_SET_TILED_DISPLAY_HINTS,                        \
73 		  "set_tiled_display_hints" },                                \
74 		{ DPTX_APCALL_DEVICE_NOT_RESPONDING,                          \
75 		  "device_not_responding" },                                  \
76 		{ DPTX_APCALL_DEVICE_BUSY_TIMEOUT, "device_busy_timeout" },   \
77 		{ DPTX_APCALL_DEVICE_NOT_STARTED, "device_not_started" })
78 
79 TRACE_EVENT(dcp_recv_msg,
80 	    TP_PROTO(struct apple_dcp *dcp, u8 endpoint, u64 message),
81 	    TP_ARGS(dcp, endpoint, message),
82 
83 	    TP_STRUCT__entry(__string(devname, dev_name(dcp->dev))
84 			     __field(u8, endpoint)
85 			     __field(u64, message)),
86 
87 	    TP_fast_assign(__assign_str(devname, dev_name(dcp->dev));
88 			   __entry->endpoint = endpoint;
89 			   __entry->message = message;),
90 
91 	    TP_printk("%s: endpoint 0x%x (%s): received message 0x%016llx",
92 		      __get_str(devname), __entry->endpoint,
93 		      show_dcp_endpoint(__entry->endpoint), __entry->message));
94 
95 TRACE_EVENT(dcp_send_msg,
96 	    TP_PROTO(struct apple_dcp *dcp, u8 endpoint, u64 message),
97 	    TP_ARGS(dcp, endpoint, message),
98 
99 	    TP_STRUCT__entry(__string(devname, dev_name(dcp->dev))
100 			     __field(u8, endpoint)
101 			     __field(u64, message)),
102 
103 	    TP_fast_assign(__assign_str(devname, dev_name(dcp->dev));
104 			   __entry->endpoint = endpoint;
105 			   __entry->message = message;),
106 
107 	    TP_printk("%s: endpoint 0x%x (%s): will send message 0x%016llx",
108 		      __get_str(devname), __entry->endpoint,
109 		      show_dcp_endpoint(__entry->endpoint), __entry->message));
110 
111 TRACE_EVENT(
112 	afk_getbuf, TP_PROTO(struct apple_dcp_afkep *ep, u16 size, u16 tag),
113 	TP_ARGS(ep, size, tag),
114 
115 	TP_STRUCT__entry(__string(devname, dev_name(ep->dcp->dev))
116 				 __field(u8, endpoint) __field(u16, size)
117 					 __field(u16, tag)),
118 
119 	TP_fast_assign(__assign_str(devname, dev_name(ep->dcp->dev));
120 		       __entry->endpoint = ep->endpoint; __entry->size = size;
121 		       __entry->tag = tag;),
122 
123 	TP_printk(
124 		"%s: endpoint 0x%x (%s): get buffer with size 0x%x and tag 0x%x",
125 		__get_str(devname), __entry->endpoint,
126 		show_dcp_endpoint(__entry->endpoint), __entry->size,
127 		__entry->tag));
128 
129 DECLARE_EVENT_CLASS(afk_rwptr_template,
130 	    TP_PROTO(struct apple_dcp_afkep *ep, u32 rptr, u32 wptr),
131 	    TP_ARGS(ep, rptr, wptr),
132 
133 	    TP_STRUCT__entry(__string(devname, dev_name(ep->dcp->dev))
134 				     __field(u8, endpoint) __field(u32, rptr)
135 					     __field(u32, wptr)),
136 
137 	    TP_fast_assign(__assign_str(devname, dev_name(ep->dcp->dev));
138 			   __entry->endpoint = ep->endpoint;
139 			   __entry->rptr = rptr; __entry->wptr = wptr;),
140 
141 	    TP_printk("%s: endpoint 0x%x (%s): rptr 0x%x, wptr 0x%x",
142 		      __get_str(devname), __entry->endpoint,
143 		      show_dcp_endpoint(__entry->endpoint), __entry->rptr,
144 		      __entry->wptr));
145 
146 DEFINE_EVENT(afk_rwptr_template, afk_recv_rwptr_pre,
147 	TP_PROTO(struct apple_dcp_afkep *ep, u32 rptr, u32 wptr),
148 	TP_ARGS(ep, rptr, wptr));
149 DEFINE_EVENT(afk_rwptr_template, afk_recv_rwptr_post,
150 	TP_PROTO(struct apple_dcp_afkep *ep, u32 rptr, u32 wptr),
151 	TP_ARGS(ep, rptr, wptr));
152 DEFINE_EVENT(afk_rwptr_template, afk_send_rwptr_pre,
153 	TP_PROTO(struct apple_dcp_afkep *ep, u32 rptr, u32 wptr),
154 	TP_ARGS(ep, rptr, wptr));
155 DEFINE_EVENT(afk_rwptr_template, afk_send_rwptr_post,
156 	TP_PROTO(struct apple_dcp_afkep *ep, u32 rptr, u32 wptr),
157 	TP_ARGS(ep, rptr, wptr));
158 
159 TRACE_EVENT(
160 	afk_recv_qe,
161 	TP_PROTO(struct apple_dcp_afkep *ep, u32 rptr, u32 magic, u32 size),
162 	TP_ARGS(ep, rptr, magic, size),
163 
164 	TP_STRUCT__entry(__string(devname, dev_name(ep->dcp->dev))
165 				 __field(u8, endpoint) __field(u32, rptr)
166 					 __field(u32, magic)
167 						 __field(u32, size)),
168 
169 	TP_fast_assign(__assign_str(devname, dev_name(ep->dcp->dev));
170 		       __entry->endpoint = ep->endpoint; __entry->rptr = rptr;
171 		       __entry->magic = magic; __entry->size = size;),
172 
173 	TP_printk("%s: endpoint 0x%x (%s): QE rptr 0x%x, magic 0x%x, size 0x%x",
174 		  __get_str(devname), __entry->endpoint,
175 		  show_dcp_endpoint(__entry->endpoint), __entry->rptr,
176 		  __entry->magic, __entry->size));
177 
178 TRACE_EVENT(
179 	afk_recv_handle,
180 	TP_PROTO(struct apple_dcp_afkep *ep, u32 channel, u32 type,
181 		 u32 data_size, struct epic_hdr *ehdr,
182 		 struct epic_sub_hdr *eshdr),
183 	TP_ARGS(ep, channel, type, data_size, ehdr, eshdr),
184 
185 	TP_STRUCT__entry(__string(devname, dev_name(ep->dcp->dev)) __field(
186 		u8, endpoint) __field(u32, channel) __field(u32, type)
187 				 __field(u32, data_size) __field(u8, category)
188 					 __field(u16, subtype)
189 						 __field(u16, tag)),
190 
191 	TP_fast_assign(__assign_str(devname, dev_name(ep->dcp->dev));
192 		       __entry->endpoint = ep->endpoint;
193 		       __entry->channel = channel; __entry->type = type;
194 		       __entry->data_size = data_size;
195 		       __entry->category = eshdr->category,
196 		       __entry->subtype = le16_to_cpu(eshdr->type),
197 		       __entry->tag = le16_to_cpu(eshdr->tag)),
198 
199 	TP_printk(
200 		"%s: endpoint 0x%x (%s): channel 0x%x, type 0x%x (%s), data_size 0x%x, category: 0x%x (%s), subtype: 0x%x, seq: 0x%x",
201 		__get_str(devname), __entry->endpoint,
202 		show_dcp_endpoint(__entry->endpoint), __entry->channel,
203 		__entry->type, print_epic_type(__entry->type),
204 		__entry->data_size, __entry->category,
205 		print_epic_category(__entry->category), __entry->subtype,
206 		__entry->tag));
207 
208 TRACE_EVENT(iomfb_callback,
209 	    TP_PROTO(struct apple_dcp *dcp, int tag, const char *name),
210 	    TP_ARGS(dcp, tag, name),
211 
212 	    TP_STRUCT__entry(
213 				__string(devname, dev_name(dcp->dev))
214 				__field(int, tag)
215 				__field(const char *, name)
216 			),
217 
218 	    TP_fast_assign(
219 				__assign_str(devname, dev_name(dcp->dev));
220 				__entry->tag = tag; __entry->name = name;
221 			),
222 
223 	    TP_printk("%s: Callback D%03d %s", __get_str(devname), __entry->tag,
224 		      __entry->name));
225 
226 TRACE_EVENT(iomfb_push,
227 	    TP_PROTO(struct apple_dcp *dcp,
228 		     const struct dcp_method_entry *method, int context,
229 		     int offset, int depth),
230 	    TP_ARGS(dcp, method, context, offset, depth),
231 
232 	    TP_STRUCT__entry(
233 				__string(devname, dev_name(dcp->dev))
234 				__string(name, method->name)
235 				__field(int, context)
236 				__field(int, offset)
237 				__field(int, depth)),
238 
239 	    TP_fast_assign(
240 				__assign_str(devname, dev_name(dcp->dev));
241 				__assign_str(name, method->name);
242 				__entry->context = context; __entry->offset = offset;
243 				__entry->depth = depth;
244 			),
245 
246 	    TP_printk("%s: Method %s: context %u, offset %u, depth %u",
247 		      __get_str(devname), __get_str(name), __entry->context,
248 		      __entry->offset, __entry->depth));
249 
250 TRACE_EVENT(iomfb_swap_submit,
251 	    TP_PROTO(struct apple_dcp *dcp, u32 swap_id),
252 	    TP_ARGS(dcp, swap_id),
253 	    TP_STRUCT__entry(
254 			     __field(u64, dcp)
255 			     __field(u32, swap_id)
256 	    ),
257 	    TP_fast_assign(
258 			   __entry->dcp = (u64)dcp;
259 			   __entry->swap_id = swap_id;
260 	    ),
261 	    TP_printk("dcp=%llx, swap_id=%d",
262 		      __entry->dcp,
263 		      __entry->swap_id)
264 );
265 
266 TRACE_EVENT(iomfb_swap_complete,
267 	    TP_PROTO(struct apple_dcp *dcp, u32 swap_id),
268 	    TP_ARGS(dcp, swap_id),
269 	    TP_STRUCT__entry(
270 			     __field(u64, dcp)
271 			     __field(u32, swap_id)
272 	    ),
273 	    TP_fast_assign(
274 			   __entry->dcp = (u64)dcp;
275 			   __entry->swap_id = swap_id;
276 	    ),
277 	    TP_printk("dcp=%llx, swap_id=%d",
278 		      __entry->dcp,
279 		      __entry->swap_id
280 	    )
281 );
282 
283 TRACE_EVENT(iomfb_swap_complete_intent_gated,
284 	    TP_PROTO(struct apple_dcp *dcp, u32 swap_id, u32 width, u32 height),
285 	    TP_ARGS(dcp, swap_id, width, height),
286 	    TP_STRUCT__entry(
287 			     __field(u64, dcp)
288 			     __field(u32, swap_id)
289 			     __field(u32, width)
290 			     __field(u32, height)
291 	    ),
292 	    TP_fast_assign(
293 			   __entry->dcp = (u64)dcp;
294 			   __entry->swap_id = swap_id;
295 			   __entry->height = height;
296 			   __entry->width = width;
297 	    ),
298 	    TP_printk("dcp=%llx, swap_id=%u %ux%u",
299 		      __entry->dcp,
300 		      __entry->swap_id,
301 		      __entry->width,
302 		      __entry->height
303 	    )
304 );
305 
306 TRACE_EVENT(iomfb_abort_swap_ap_gated,
307 	    TP_PROTO(struct apple_dcp *dcp, u32 swap_id),
308 	    TP_ARGS(dcp, swap_id),
309 	    TP_STRUCT__entry(
310 			     __field(u64, dcp)
311 			     __field(u32, swap_id)
312 	    ),
313 	    TP_fast_assign(
314 			   __entry->dcp = (u64)dcp;
315 			   __entry->swap_id = swap_id;
316 	    ),
317 	    TP_printk("dcp=%llx, swap_id=%u",
318 		      __entry->dcp,
319 		      __entry->swap_id
320 	    )
321 );
322 
323 DECLARE_EVENT_CLASS(iomfb_parse_mode_template,
324 	    TP_PROTO(s64 id, struct dimension *horiz, struct dimension *vert, s64 best_color_mode, bool is_virtual, s64 score),
325 	    TP_ARGS(id, horiz, vert, best_color_mode, is_virtual, score),
326 
327 	    TP_STRUCT__entry(__field(s64, id)
328 			     __field_struct(struct dimension, horiz)
329 			     __field_struct(struct dimension, vert)
330 			     __field(s64, best_color_mode)
331 			     __field(bool, is_virtual)
332 			     __field(s64, score)),
333 
334 	    TP_fast_assign(__entry->id = id;
335 			   __entry->horiz = *horiz;
336 			   __entry->vert = *vert;
337 			   __entry->best_color_mode = best_color_mode;
338 			   __entry->is_virtual = is_virtual;
339 			   __entry->score = score;),
340 
341 	    TP_printk("id: %lld, best_color_mode: %lld, resolution:%lldx%lld virtual: %d, score: %lld",
342 		      __entry->id, __entry->best_color_mode,
343 		      __entry->horiz.active, __entry->vert.active,
344 		      __entry->is_virtual, __entry->score));
345 
346 DEFINE_EVENT(iomfb_parse_mode_template, iomfb_parse_mode_success,
347 	    TP_PROTO(s64 id, struct dimension *horiz, struct dimension *vert, s64 best_color_mode, bool is_virtual, s64 score),
348 	    TP_ARGS(id, horiz, vert, best_color_mode, is_virtual, score));
349 
350 DEFINE_EVENT(iomfb_parse_mode_template, iomfb_parse_mode_fail,
351 	    TP_PROTO(s64 id, struct dimension *horiz, struct dimension *vert, s64 best_color_mode, bool is_virtual, s64 score),
352 	    TP_ARGS(id, horiz, vert, best_color_mode, is_virtual, score));
353 
354 TRACE_EVENT(dptxport_init, TP_PROTO(struct apple_dcp *dcp, u64 unit),
355 	    TP_ARGS(dcp, unit),
356 
357 	    TP_STRUCT__entry(__string(devname, dev_name(dcp->dev))
358 				     __field(u64, unit)),
359 
360 	    TP_fast_assign(__assign_str(devname, dev_name(dcp->dev));
361 			   __entry->unit = unit;),
362 
363 	    TP_printk("%s: dptxport unit %lld initialized", __get_str(devname),
364 		      __entry->unit));
365 
366 TRACE_EVENT(
367 	dptxport_apcall,
368 	TP_PROTO(struct dptx_port *dptx, int idx, size_t len),
369 	TP_ARGS(dptx, idx, len),
370 
371 	TP_STRUCT__entry(__string(devname, dev_name(dptx->service->ep->dcp->dev))
372 			__field(u32, unit) __field(int, idx) __field(size_t, len)),
373 
374 	TP_fast_assign(__assign_str(devname, dev_name(dptx->service->ep->dcp->dev));
375 		       __entry->unit = dptx->unit; __entry->idx = idx; __entry->len = len;),
376 
377 	TP_printk("%s: dptx%d: AP Call %d (%s) with len %lu", __get_str(devname),
378 		  __entry->unit,
379 		  __entry->idx, show_dptxport_apcall(__entry->idx), __entry->len));
380 
381 TRACE_EVENT(
382 	dptxport_validate_connection,
383 	TP_PROTO(struct dptx_port *dptx, u8 core, u8 atc, u8 die),
384 	TP_ARGS(dptx, core, atc, die),
385 
386 	TP_STRUCT__entry(__string(devname, dev_name(dptx->service->ep->dcp->dev))
387 			 __field(u32, unit) __field(u8, core) __field(u8, atc) __field(u8, die)),
388 
389 	TP_fast_assign(__assign_str(devname, dev_name(dptx->service->ep->dcp->dev));
390 		       __entry->unit = dptx->unit; __entry->core = core; __entry->atc = atc; __entry->die = die;),
391 
392 	TP_printk("%s: dptx%d: core %d, atc %d, die %d", __get_str(devname),
393 		  __entry->unit, __entry->core, __entry->atc, __entry->die));
394 
395 TRACE_EVENT(
396 	dptxport_connect,
397 	TP_PROTO(struct dptx_port *dptx, u8 core, u8 atc, u8 die),
398 	TP_ARGS(dptx, core, atc, die),
399 
400 	TP_STRUCT__entry(__string(devname, dev_name(dptx->service->ep->dcp->dev))
401 			 __field(u32, unit) __field(u8, core) __field(u8, atc) __field(u8, die)),
402 
403 	TP_fast_assign(__assign_str(devname, dev_name(dptx->service->ep->dcp->dev));
404 		       __entry->unit = dptx->unit; __entry->core = core; __entry->atc = atc; __entry->die = die;),
405 
406 	TP_printk("%s: dptx%d: core %d, atc %d, die %d", __get_str(devname),
407 		  __entry->unit, __entry->core, __entry->atc, __entry->die));
408 
409 TRACE_EVENT(
410 	dptxport_call_set_link_rate,
411 	TP_PROTO(struct dptx_port *dptx, u32 link_rate),
412 	TP_ARGS(dptx, link_rate),
413 
414 	TP_STRUCT__entry(__string(devname, dev_name(dptx->service->ep->dcp->dev))
415 			 __field(u32, unit)
416 			 __field(u32, link_rate)),
417 
418 	TP_fast_assign(__assign_str(devname, dev_name(dptx->service->ep->dcp->dev));
419 		       __entry->unit = dptx->unit;
420 		       __entry->link_rate = link_rate;),
421 
422 	TP_printk("%s: dptx%d: link rate 0x%x", __get_str(devname), __entry->unit,
423 		  __entry->link_rate));
424 
425 TRACE_EVENT(iomfb_brightness,
426 	    TP_PROTO(struct apple_dcp *dcp, u32 nits),
427 	    TP_ARGS(dcp, nits),
428 	    TP_STRUCT__entry(
429 			     __field(u64, dcp)
430 			     __field(u32, nits)
431 	    ),
432 	    TP_fast_assign(
433 			   __entry->dcp = (u64)dcp;
434 			   __entry->nits = nits;
435 	    ),
436 	    TP_printk("dcp=%llx, nits=%u (raw=0x%05x)",
437 		      __entry->dcp,
438 		      __entry->nits >> 16,
439 		      __entry->nits
440 	    )
441 );
442 
443 #define show_eotf(eotf)					\
444 	__print_symbolic(eotf, { 0, "SDR gamma"},	\
445 			       { 1, "HDR gamma"},	\
446 			       { 2, "ST 2084 (PQ)"},	\
447 			       { 3, "BT.2100 (HLG)"},	\
448 			       { 4, "unexpected"})
449 
450 #define show_encoding(enc)							\
451 	__print_symbolic(enc, { 0, "RGB"},					\
452 			      { 1, "YUV 4:2:0"},				\
453 			      { 3, "YUV 4:2:2"},				\
454 			      { 2, "YUV 4:4:4"},				\
455 			      { 4, "DolbyVision (native)"},			\
456 			      { 5, "DolbyVision (HDMI)"},			\
457 			      { 6, "YCbCr 4:2:2 (DP tunnel)"},			\
458 			      { 7, "YCbCr 4:2:2 (HDMI tunnel)"},		\
459 			      { 8, "DolbyVision LL YCbCr 4:2:2"},		\
460 			      { 9, "DolbyVision LL YCbCr 4:2:2 (DP)"},		\
461 			      {10, "DolbyVision LL YCbCr 4:2:2 (HDMI)"},	\
462 			      {11, "DolbyVision LL YCbCr 4:4:4"},		\
463 			      {12, "DolbyVision LL RGB 4:2:2"},			\
464 			      {13, "GRGB as YCbCr422 (Even line blue)"},	\
465 			      {14, "GRGB as YCbCr422 (Even line red)"},		\
466 			      {15, "unexpected"})
467 
468 #define show_colorimetry(col)					\
469 	__print_symbolic(col, { 0, "SMPTE 170M/BT.601"},	\
470 			      { 1, "BT.701"},			\
471 			      { 2, "xvYCC601"},			\
472 			      { 3, "xvYCC709"},			\
473 			      { 4, "sYCC601"},			\
474 			      { 5, "AdobeYCC601"},		\
475 			      { 6, "BT.2020 (c)"},		\
476 			      { 7, "BT.2020 (nc)"},		\
477 			      { 8, "DolbyVision VSVDB"},	\
478 			      { 9, "BT.2020 (RGB)"},		\
479 			      {10, "sRGB"},			\
480 			      {11, "scRGB"},			\
481 			      {12, "scRGBfixed"},		\
482 			      {13, "AdobeRGB"},			\
483 			      {14, "DCI-P3 (D65)"},		\
484 			      {15, "DCI-P3 (Theater)"},		\
485 			      {16, "Default RGB"},		\
486 			      {17, "unexpected"})
487 
488 #define show_range(range)				\
489 	__print_symbolic(range, { 0, "Full"},		\
490 				{ 1, "Limited"},	\
491 				{ 2, "unexpected"})
492 
493 TRACE_EVENT(iomfb_color_mode,
494 	    TP_PROTO(struct apple_dcp *dcp, u32 id, u32 score, u32 depth,
495 		     u32 colorimetry, u32 eotf, u32 range, u32 pixel_enc),
496 	    TP_ARGS(dcp, id, score, depth, colorimetry, eotf, range, pixel_enc),
497 	    TP_STRUCT__entry(
498 			     __field(u64, dcp)
499 			     __field(u32, id)
500 			     __field(u32, score)
501 			     __field(u32, depth)
502 			     __field(u32, colorimetry)
503 			     __field(u32, eotf)
504 			     __field(u32, range)
505 			     __field(u32, pixel_enc)
506 	    ),
507 	    TP_fast_assign(
508 			   __entry->dcp = (u64)dcp;
509 			   __entry->id = id;
510 			   __entry->score = score;
511 			   __entry->depth = depth;
512 			   __entry->colorimetry = min_t(u32, colorimetry, 17U);
513 			   __entry->eotf = min_t(u32, eotf, 4U);
514 			   __entry->range = min_t(u32, range, 2U);
515 			   __entry->pixel_enc = min_t(u32, pixel_enc, 15U);
516 	    ),
517 	    TP_printk("dcp=%llx, id=%u, score=%u,  depth=%u, colorimetry=%s, eotf=%s, range=%s, pixel_enc=%s",
518 		      __entry->dcp,
519 		      __entry->id,
520 		      __entry->score,
521 		      __entry->depth,
522 		      show_colorimetry(__entry->colorimetry),
523 		      show_eotf(__entry->eotf),
524 		      show_range(__entry->range),
525 		      show_encoding(__entry->pixel_enc)
526 	    )
527 );
528 
529 TRACE_EVENT(iomfb_timing_mode,
530 	    TP_PROTO(struct apple_dcp *dcp, u32 id, u32 score, u32 width,
531 		     u32 height, u32 clock, u32 color_mode),
532 	    TP_ARGS(dcp, id, score, width, height, clock, color_mode),
533 	    TP_STRUCT__entry(
534 			     __field(u64, dcp)
535 			     __field(u32, id)
536 			     __field(u32, score)
537 			     __field(u32, width)
538 			     __field(u32, height)
539 			     __field(u32, clock)
540 			     __field(u32, color_mode)
541 	    ),
542 	    TP_fast_assign(
543 			   __entry->dcp = (u64)dcp;
544 			   __entry->id = id;
545 			   __entry->score = score;
546 			   __entry->width = width;
547 			   __entry->height = height;
548 			   __entry->clock = clock;
549 			   __entry->color_mode = color_mode;
550 	    ),
551 	    TP_printk("dcp=%llx, id=%u, score=%u,  %ux%u@%u.%u, color_mode=%u",
552 		      __entry->dcp,
553 		      __entry->id,
554 		      __entry->score,
555 		      __entry->width,
556 		      __entry->height,
557 		      __entry->clock >> 16,
558 		      ((__entry->clock & 0xffff) * 1000) >> 16,
559 		      __entry->color_mode
560 	    )
561 );
562 
563 TRACE_EVENT(avep_sound_mode,
564 	    TP_PROTO(struct apple_dcp *dcp, u32 rates, u64 formats, unsigned int nchans),
565 	    TP_ARGS(dcp, rates, formats, nchans),
566 	    TP_STRUCT__entry(
567 			     __field(u64, dcp)
568 			     __field(u32, rates)
569 			     __field(u64, formats)
570 			     __field(unsigned int, nchans)
571 	    ),
572 	    TP_fast_assign(
573 			   __entry->dcp = (u64)dcp;
574 			   __entry->rates = rates;
575 			   __entry->formats = formats;
576 			   __entry->nchans = nchans;
577 	    ),
578 	    TP_printk("dcp=%llx, rates=%#x, formats=%#llx, nchans=%#x",
579 		      __entry->dcp,
580 		      __entry->rates,
581 		      __entry->formats,
582 		      __entry->nchans
583 	    )
584 );
585 
586 #endif /* _TRACE_DCP_H */
587 
588 /* This part must be outside protection */
589 
590 #undef TRACE_INCLUDE_FILE
591 #define TRACE_INCLUDE_FILE trace
592 
593 #undef TRACE_INCLUDE_PATH
594 #define TRACE_INCLUDE_PATH .
595 
596 #include <trace/define_trace.h>
597