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