1 /* SPDX-License-Identifier: GPL-2.0 */
3 * Copyright (c) 2024 Raspberry Pi Ltd.
4 * Copyright (c) 2024 Ideas on Board Oy
8 #define TRACE_SYSTEM cfe
10 #if !defined(_CFE_TRACE_H) || defined(TRACE_HEADER_MULTI_READ)
13 #include <linux/tracepoint.h>
14 #include <media/videobuf2-v4l2.h>
16 TRACE_EVENT(cfe_return_buffer,
17 TP_PROTO(u32 node_id, u32 buf_idx, u32 queue_id),
18 TP_ARGS(node_id, buf_idx, queue_id),
22 __field(u32, queue_id)
25 __entry->node_id = node_id;
26 __entry->buf_idx = buf_idx;
27 __entry->queue_id = queue_id;
29 TP_printk("node=%u buf=%u, queue=%u", __entry->node_id,
30 __entry->buf_idx, __entry->queue_id)
33 DECLARE_EVENT_CLASS(cfe_buffer_template,
34 TP_PROTO(u32 node_id, struct vb2_buffer *buf),
35 TP_ARGS(node_id, buf),
41 __entry->node_id = node_id;
42 __entry->buf_idx = buf->index;
44 TP_printk("node=%u buf=%u", __entry->node_id, __entry->buf_idx)
47 DEFINE_EVENT(cfe_buffer_template, cfe_buffer_prepare,
48 TP_PROTO(u32 node_id, struct vb2_buffer *buf),
49 TP_ARGS(node_id, buf));
51 TRACE_EVENT(cfe_buffer_queue,
52 TP_PROTO(u32 node_id, struct vb2_buffer *buf, bool schedule_now),
53 TP_ARGS(node_id, buf, schedule_now),
57 __field(bool, schedule_now)
60 __entry->node_id = node_id;
61 __entry->buf_idx = buf->index;
62 __entry->schedule_now = schedule_now;
64 TP_printk("node=%u buf=%u%s", __entry->node_id, __entry->buf_idx,
65 __entry->schedule_now ? " schedule immediately" : "")
68 DEFINE_EVENT(cfe_buffer_template, cfe_csi2_schedule,
69 TP_PROTO(u32 node_id, struct vb2_buffer *buf),
70 TP_ARGS(node_id, buf));
72 DEFINE_EVENT(cfe_buffer_template, cfe_fe_schedule,
73 TP_PROTO(u32 node_id, struct vb2_buffer *buf),
74 TP_ARGS(node_id, buf));
76 TRACE_EVENT(cfe_buffer_complete,
77 TP_PROTO(u32 node_id, struct vb2_v4l2_buffer *buf),
78 TP_ARGS(node_id, buf),
86 __entry->node_id = node_id;
87 __entry->buf_idx = buf->vb2_buf.index;
88 __entry->seq = buf->sequence;
89 __entry->ts = buf->vb2_buf.timestamp;
91 TP_printk("node=%u buf=%u seq=%u ts=%llu", __entry->node_id,
92 __entry->buf_idx, __entry->seq, __entry->ts)
95 TRACE_EVENT(cfe_frame_start,
96 TP_PROTO(u32 node_id, u32 fs_count),
97 TP_ARGS(node_id, fs_count),
100 __field(u32, fs_count)
103 __entry->node_id = node_id;
104 __entry->fs_count = fs_count;
106 TP_printk("node=%u fs_count=%u", __entry->node_id, __entry->fs_count)
109 TRACE_EVENT(cfe_frame_end,
110 TP_PROTO(u32 node_id, u32 fs_count),
111 TP_ARGS(node_id, fs_count),
113 __field(u32, node_id)
114 __field(u32, fs_count)
117 __entry->node_id = node_id;
118 __entry->fs_count = fs_count;
120 TP_printk("node=%u fs_count=%u", __entry->node_id, __entry->fs_count)
123 TRACE_EVENT(cfe_prepare_next_job,
124 TP_PROTO(bool fe_enabled),
127 __field(bool, fe_enabled)
130 __entry->fe_enabled = fe_enabled;
132 TP_printk("fe_enabled=%u", __entry->fe_enabled)
135 /* These are copied from csi2.c */
136 #define CSI2_STATUS_IRQ_FS(x) (BIT(0) << (x))
137 #define CSI2_STATUS_IRQ_FE(x) (BIT(4) << (x))
138 #define CSI2_STATUS_IRQ_FE_ACK(x) (BIT(8) << (x))
139 #define CSI2_STATUS_IRQ_LE(x) (BIT(12) << (x))
140 #define CSI2_STATUS_IRQ_LE_ACK(x) (BIT(16) << (x))
142 TRACE_EVENT(csi2_irq,
143 TP_PROTO(u32 channel, u32 status, u32 dbg),
144 TP_ARGS(channel, status, dbg),
146 __field(u32, channel)
151 __entry->channel = channel;
152 __entry->status = status;
155 TP_printk("ch=%u flags=[ %s%s%s%s%s] frame=%u line=%u\n",
157 (__entry->status & CSI2_STATUS_IRQ_FS(__entry->channel)) ?
159 (__entry->status & CSI2_STATUS_IRQ_FE(__entry->channel)) ?
161 (__entry->status & CSI2_STATUS_IRQ_FE_ACK(__entry->channel)) ?
163 (__entry->status & CSI2_STATUS_IRQ_LE(__entry->channel)) ?
165 (__entry->status & CSI2_STATUS_IRQ_LE_ACK(__entry->channel)) ?
167 __entry->dbg >> 16, __entry->dbg & 0xffff)
171 TP_PROTO(u32 status, u32 output_status, u32 frame_status,
172 u32 error_status, u32 int_status),
173 TP_ARGS(status, output_status, frame_status, error_status, int_status),
176 __field(u32, output_status)
177 __field(u32, frame_status)
178 __field(u32, error_status)
179 __field(u32, int_status)
182 __entry->status = status;
183 __entry->output_status = output_status;
184 __entry->frame_status = frame_status;
185 __entry->error_status = error_status;
186 __entry->int_status = int_status;
188 TP_printk("status 0x%x out_status 0x%x frame_status 0x%x error_status 0x%x int_status 0x%x",
190 __entry->output_status,
191 __entry->frame_status,
192 __entry->error_status,
196 #endif /* _CFE_TRACE_H */
198 /* This part must be outside protection */
199 #undef TRACE_INCLUDE_PATH
200 #define TRACE_INCLUDE_PATH .
201 #define TRACE_INCLUDE_FILE ../../drivers/media/platform/raspberrypi/rp1-cfe/cfe-trace
202 #include <trace/define_trace.h>