xref: /linux/sound/soc/intel/avs/trace.h (revision 1260ed77798502de9c98020040d2995008de10cc)
169b23b39SCezary Rojewski /* SPDX-License-Identifier: GPL-2.0 */
269b23b39SCezary Rojewski #undef TRACE_SYSTEM
369b23b39SCezary Rojewski #define TRACE_SYSTEM intel_avs
469b23b39SCezary Rojewski 
569b23b39SCezary Rojewski #if !defined(_TRACE_INTEL_AVS_H) || defined(TRACE_HEADER_MULTI_READ)
669b23b39SCezary Rojewski #define _TRACE_INTEL_AVS_H
769b23b39SCezary Rojewski 
869b23b39SCezary Rojewski #include <linux/types.h>
969b23b39SCezary Rojewski #include <linux/tracepoint.h>
1069b23b39SCezary Rojewski 
1169b23b39SCezary Rojewski TRACE_EVENT(avs_dsp_core_op,
1269b23b39SCezary Rojewski 
1369b23b39SCezary Rojewski 	TP_PROTO(unsigned int reg, unsigned int mask, const char *op, bool flag),
1469b23b39SCezary Rojewski 
1569b23b39SCezary Rojewski 	TP_ARGS(reg, mask, op, flag),
1669b23b39SCezary Rojewski 
1769b23b39SCezary Rojewski 	TP_STRUCT__entry(
1869b23b39SCezary Rojewski 		__field(unsigned int,	reg	)
1969b23b39SCezary Rojewski 		__field(unsigned int,	mask	)
2069b23b39SCezary Rojewski 		__string(op,		op	)
2169b23b39SCezary Rojewski 		__field(bool,		flag	)
2269b23b39SCezary Rojewski 	),
2369b23b39SCezary Rojewski 
2469b23b39SCezary Rojewski 	TP_fast_assign(
2569b23b39SCezary Rojewski 		__entry->reg = reg;
2669b23b39SCezary Rojewski 		__entry->mask = mask;
272c92ca84SSteven Rostedt (Google) 		__assign_str(op);
2869b23b39SCezary Rojewski 		__entry->flag = flag;
2969b23b39SCezary Rojewski 	),
3069b23b39SCezary Rojewski 
3169b23b39SCezary Rojewski 	TP_printk("%s: %d, core mask: 0x%X, prev state: 0x%08X",
3269b23b39SCezary Rojewski 		  __get_str(op), __entry->flag, __entry->mask, __entry->reg)
3369b23b39SCezary Rojewski );
3469b23b39SCezary Rojewski 
3569b23b39SCezary Rojewski #ifndef __TRACE_INTEL_AVS_TRACE_HELPER
3669b23b39SCezary Rojewski #define __TRACE_INTEL_AVS_TRACE_HELPER
3769b23b39SCezary Rojewski 
3869b23b39SCezary Rojewski void trace_avs_msg_payload(const void *data, size_t size);
3969b23b39SCezary Rojewski 
40*ef724707SCezary Rojewski #define trace_avs_request(msg, sts, lec) \
4169b23b39SCezary Rojewski ({ \
42*ef724707SCezary Rojewski 	trace_avs_ipc_request_msg((msg)->header, sts, lec); \
4369b23b39SCezary Rojewski 	trace_avs_msg_payload((msg)->data, (msg)->size); \
4469b23b39SCezary Rojewski })
4569b23b39SCezary Rojewski 
46*ef724707SCezary Rojewski #define trace_avs_reply(msg, sts, lec) \
4769b23b39SCezary Rojewski ({ \
48*ef724707SCezary Rojewski 	trace_avs_ipc_reply_msg((msg)->header, sts, lec); \
4969b23b39SCezary Rojewski 	trace_avs_msg_payload((msg)->data, (msg)->size); \
5069b23b39SCezary Rojewski })
5169b23b39SCezary Rojewski 
52*ef724707SCezary Rojewski #define trace_avs_notify(msg, sts, lec) \
5369b23b39SCezary Rojewski ({ \
54*ef724707SCezary Rojewski 	trace_avs_ipc_notify_msg((msg)->header, sts, lec); \
5569b23b39SCezary Rojewski 	trace_avs_msg_payload((msg)->data, (msg)->size); \
5669b23b39SCezary Rojewski })
5769b23b39SCezary Rojewski #endif
5869b23b39SCezary Rojewski 
5969b23b39SCezary Rojewski DECLARE_EVENT_CLASS(avs_ipc_msg_hdr,
6069b23b39SCezary Rojewski 
61*ef724707SCezary Rojewski 	TP_PROTO(u64 header, u32 sts, u32 lec),
6269b23b39SCezary Rojewski 
63*ef724707SCezary Rojewski 	TP_ARGS(header, sts, lec),
6469b23b39SCezary Rojewski 
6569b23b39SCezary Rojewski 	TP_STRUCT__entry(
6669b23b39SCezary Rojewski 		__field(u64,	header)
67*ef724707SCezary Rojewski 		__field(u32,	sts)
68*ef724707SCezary Rojewski 		__field(u32,	lec)
6969b23b39SCezary Rojewski 	),
7069b23b39SCezary Rojewski 
7169b23b39SCezary Rojewski 	TP_fast_assign(
7269b23b39SCezary Rojewski 		__entry->header = header;
73*ef724707SCezary Rojewski 		__entry->sts = sts;
74*ef724707SCezary Rojewski 		__entry->lec = lec;
7569b23b39SCezary Rojewski 	),
7669b23b39SCezary Rojewski 
7769b23b39SCezary Rojewski 	TP_printk("primary: 0x%08X, extension: 0x%08X,\n"
78*ef724707SCezary Rojewski 		  "status: 0x%08X, error: 0x%08X",
7969b23b39SCezary Rojewski 		  lower_32_bits(__entry->header), upper_32_bits(__entry->header),
80*ef724707SCezary Rojewski 		  __entry->sts, __entry->lec)
8169b23b39SCezary Rojewski );
8269b23b39SCezary Rojewski 
8369b23b39SCezary Rojewski DEFINE_EVENT(avs_ipc_msg_hdr, avs_ipc_request_msg,
84*ef724707SCezary Rojewski 	TP_PROTO(u64 header, u32 sts, u32 lec),
85*ef724707SCezary Rojewski 	TP_ARGS(header, sts, lec)
8669b23b39SCezary Rojewski );
8769b23b39SCezary Rojewski 
8869b23b39SCezary Rojewski DEFINE_EVENT(avs_ipc_msg_hdr, avs_ipc_reply_msg,
89*ef724707SCezary Rojewski 	TP_PROTO(u64 header, u32 sts, u32 lec),
90*ef724707SCezary Rojewski 	TP_ARGS(header, sts, lec)
9169b23b39SCezary Rojewski );
9269b23b39SCezary Rojewski 
9369b23b39SCezary Rojewski DEFINE_EVENT(avs_ipc_msg_hdr, avs_ipc_notify_msg,
94*ef724707SCezary Rojewski 	TP_PROTO(u64 header, u32 sts, u32 lec),
95*ef724707SCezary Rojewski 	TP_ARGS(header, sts, lec)
9669b23b39SCezary Rojewski );
9769b23b39SCezary Rojewski 
9869b23b39SCezary Rojewski TRACE_EVENT_CONDITION(avs_ipc_msg_payload,
9969b23b39SCezary Rojewski 
10069b23b39SCezary Rojewski 	TP_PROTO(const u8 *data, size_t size, size_t offset, size_t total),
10169b23b39SCezary Rojewski 
10269b23b39SCezary Rojewski 	TP_ARGS(data, size, offset, total),
10369b23b39SCezary Rojewski 
10469b23b39SCezary Rojewski 	TP_CONDITION(data && size),
10569b23b39SCezary Rojewski 
10669b23b39SCezary Rojewski 	TP_STRUCT__entry(
10769b23b39SCezary Rojewski 		__dynamic_array(u8,	buf,	size	)
10869b23b39SCezary Rojewski 		__field(size_t,		offset		)
10969b23b39SCezary Rojewski 		__field(size_t,		pos		)
11069b23b39SCezary Rojewski 		__field(size_t,		total		)
11169b23b39SCezary Rojewski 	),
11269b23b39SCezary Rojewski 
11369b23b39SCezary Rojewski 	TP_fast_assign(
11469b23b39SCezary Rojewski 		memcpy(__get_dynamic_array(buf), data + offset, size);
11569b23b39SCezary Rojewski 		__entry->offset = offset;
11669b23b39SCezary Rojewski 		__entry->pos = offset + size;
11769b23b39SCezary Rojewski 		__entry->total = total;
11869b23b39SCezary Rojewski 	),
11969b23b39SCezary Rojewski 
12069b23b39SCezary Rojewski 	TP_printk("range %zu-%zu out of %zu bytes%s",
12169b23b39SCezary Rojewski 		  __entry->offset, __entry->pos, __entry->total,
12269b23b39SCezary Rojewski 		  __print_hex_dump("", DUMP_PREFIX_NONE, 16, 4,
12369b23b39SCezary Rojewski 				   __get_dynamic_array(buf),
12469b23b39SCezary Rojewski 				   __get_dynamic_array_len(buf), false))
12569b23b39SCezary Rojewski );
12669b23b39SCezary Rojewski 
12769b23b39SCezary Rojewski TRACE_EVENT(avs_d0ix,
12869b23b39SCezary Rojewski 
12969b23b39SCezary Rojewski 	TP_PROTO(const char *op, bool proceed, u64 header),
13069b23b39SCezary Rojewski 
13169b23b39SCezary Rojewski 	TP_ARGS(op, proceed, header),
13269b23b39SCezary Rojewski 
13369b23b39SCezary Rojewski 	TP_STRUCT__entry(
13469b23b39SCezary Rojewski 		__string(op,	op	)
13569b23b39SCezary Rojewski 		__field(bool,	proceed	)
13669b23b39SCezary Rojewski 		__field(u64,	header	)
13769b23b39SCezary Rojewski 	),
13869b23b39SCezary Rojewski 
13969b23b39SCezary Rojewski 	TP_fast_assign(
1402c92ca84SSteven Rostedt (Google) 		__assign_str(op);
14169b23b39SCezary Rojewski 		__entry->proceed = proceed;
14269b23b39SCezary Rojewski 		__entry->header = header;
14369b23b39SCezary Rojewski 	),
14469b23b39SCezary Rojewski 
14569b23b39SCezary Rojewski 	TP_printk("%s%s for request: 0x%08X 0x%08X",
14669b23b39SCezary Rojewski 		  __entry->proceed ? "" : "ignore ", __get_str(op),
14769b23b39SCezary Rojewski 		  lower_32_bits(__entry->header), upper_32_bits(__entry->header))
14869b23b39SCezary Rojewski );
14969b23b39SCezary Rojewski 
15069b23b39SCezary Rojewski #endif /* _TRACE_INTEL_AVS_H */
15169b23b39SCezary Rojewski 
15269b23b39SCezary Rojewski /* This part must be outside protection */
15369b23b39SCezary Rojewski #undef TRACE_INCLUDE_PATH
15469b23b39SCezary Rojewski #define TRACE_INCLUDE_PATH .
15569b23b39SCezary Rojewski #define TRACE_INCLUDE_FILE trace
15669b23b39SCezary Rojewski #include <trace/define_trace.h>
157