xref: /linux/drivers/media/platform/raspberrypi/rp1-cfe/cfe-trace.h (revision c771600c6af14749609b49565ffb4cac2959710d)
1*6edb685aSTomi Valkeinen /* SPDX-License-Identifier: GPL-2.0 */
2*6edb685aSTomi Valkeinen /*
3*6edb685aSTomi Valkeinen  * Copyright (c) 2024 Raspberry Pi Ltd.
4*6edb685aSTomi Valkeinen  * Copyright (c) 2024 Ideas on Board Oy
5*6edb685aSTomi Valkeinen  */
6*6edb685aSTomi Valkeinen 
7*6edb685aSTomi Valkeinen #undef TRACE_SYSTEM
8*6edb685aSTomi Valkeinen #define TRACE_SYSTEM cfe
9*6edb685aSTomi Valkeinen 
10*6edb685aSTomi Valkeinen #if !defined(_CFE_TRACE_H) || defined(TRACE_HEADER_MULTI_READ)
11*6edb685aSTomi Valkeinen #define _CFE_TRACE_H
12*6edb685aSTomi Valkeinen 
13*6edb685aSTomi Valkeinen #include <linux/tracepoint.h>
14*6edb685aSTomi Valkeinen #include <media/videobuf2-v4l2.h>
15*6edb685aSTomi Valkeinen 
16*6edb685aSTomi Valkeinen TRACE_EVENT(cfe_return_buffer,
17*6edb685aSTomi Valkeinen 	TP_PROTO(u32 node_id, u32 buf_idx, u32 queue_id),
18*6edb685aSTomi Valkeinen 	TP_ARGS(node_id, buf_idx, queue_id),
19*6edb685aSTomi Valkeinen 	TP_STRUCT__entry(
20*6edb685aSTomi Valkeinen 		__field(u32, node_id)
21*6edb685aSTomi Valkeinen 		__field(u32, buf_idx)
22*6edb685aSTomi Valkeinen 		__field(u32, queue_id)
23*6edb685aSTomi Valkeinen 	),
24*6edb685aSTomi Valkeinen 	TP_fast_assign(
25*6edb685aSTomi Valkeinen 		__entry->node_id = node_id;
26*6edb685aSTomi Valkeinen 		__entry->buf_idx = buf_idx;
27*6edb685aSTomi Valkeinen 		__entry->queue_id = queue_id;
28*6edb685aSTomi Valkeinen 	),
29*6edb685aSTomi Valkeinen 	TP_printk("node=%u buf=%u, queue=%u", __entry->node_id,
30*6edb685aSTomi Valkeinen 		  __entry->buf_idx, __entry->queue_id)
31*6edb685aSTomi Valkeinen );
32*6edb685aSTomi Valkeinen 
33*6edb685aSTomi Valkeinen DECLARE_EVENT_CLASS(cfe_buffer_template,
34*6edb685aSTomi Valkeinen 	TP_PROTO(u32 node_id, struct vb2_buffer *buf),
35*6edb685aSTomi Valkeinen 	TP_ARGS(node_id, buf),
36*6edb685aSTomi Valkeinen 	TP_STRUCT__entry(
37*6edb685aSTomi Valkeinen 		__field(u32, node_id)
38*6edb685aSTomi Valkeinen 		__field(u32, buf_idx)
39*6edb685aSTomi Valkeinen 	),
40*6edb685aSTomi Valkeinen 	TP_fast_assign(
41*6edb685aSTomi Valkeinen 		__entry->node_id = node_id;
42*6edb685aSTomi Valkeinen 		__entry->buf_idx = buf->index;
43*6edb685aSTomi Valkeinen 	),
44*6edb685aSTomi Valkeinen 	TP_printk("node=%u buf=%u", __entry->node_id, __entry->buf_idx)
45*6edb685aSTomi Valkeinen );
46*6edb685aSTomi Valkeinen 
47*6edb685aSTomi Valkeinen DEFINE_EVENT(cfe_buffer_template, cfe_buffer_prepare,
48*6edb685aSTomi Valkeinen 	TP_PROTO(u32 node_id, struct vb2_buffer *buf),
49*6edb685aSTomi Valkeinen 	TP_ARGS(node_id, buf));
50*6edb685aSTomi Valkeinen 
51*6edb685aSTomi Valkeinen TRACE_EVENT(cfe_buffer_queue,
52*6edb685aSTomi Valkeinen 	TP_PROTO(u32 node_id, struct vb2_buffer *buf, bool schedule_now),
53*6edb685aSTomi Valkeinen 	TP_ARGS(node_id, buf, schedule_now),
54*6edb685aSTomi Valkeinen 	TP_STRUCT__entry(
55*6edb685aSTomi Valkeinen 		__field(u32, node_id)
56*6edb685aSTomi Valkeinen 		__field(u32, buf_idx)
57*6edb685aSTomi Valkeinen 		__field(bool, schedule_now)
58*6edb685aSTomi Valkeinen 	),
59*6edb685aSTomi Valkeinen 	TP_fast_assign(
60*6edb685aSTomi Valkeinen 		__entry->node_id = node_id;
61*6edb685aSTomi Valkeinen 		__entry->buf_idx = buf->index;
62*6edb685aSTomi Valkeinen 		__entry->schedule_now = schedule_now;
63*6edb685aSTomi Valkeinen 	),
64*6edb685aSTomi Valkeinen 	TP_printk("node=%u buf=%u%s", __entry->node_id, __entry->buf_idx,
65*6edb685aSTomi Valkeinen 		  __entry->schedule_now ? " schedule immediately" : "")
66*6edb685aSTomi Valkeinen );
67*6edb685aSTomi Valkeinen 
68*6edb685aSTomi Valkeinen DEFINE_EVENT(cfe_buffer_template, cfe_csi2_schedule,
69*6edb685aSTomi Valkeinen 	TP_PROTO(u32 node_id, struct vb2_buffer *buf),
70*6edb685aSTomi Valkeinen 	TP_ARGS(node_id, buf));
71*6edb685aSTomi Valkeinen 
72*6edb685aSTomi Valkeinen DEFINE_EVENT(cfe_buffer_template, cfe_fe_schedule,
73*6edb685aSTomi Valkeinen 	TP_PROTO(u32 node_id, struct vb2_buffer *buf),
74*6edb685aSTomi Valkeinen 	TP_ARGS(node_id, buf));
75*6edb685aSTomi Valkeinen 
76*6edb685aSTomi Valkeinen TRACE_EVENT(cfe_buffer_complete,
77*6edb685aSTomi Valkeinen 	TP_PROTO(u32 node_id, struct vb2_v4l2_buffer *buf),
78*6edb685aSTomi Valkeinen 	TP_ARGS(node_id, buf),
79*6edb685aSTomi Valkeinen 	TP_STRUCT__entry(
80*6edb685aSTomi Valkeinen 		__field(u32, node_id)
81*6edb685aSTomi Valkeinen 		__field(u32, buf_idx)
82*6edb685aSTomi Valkeinen 		__field(u32, seq)
83*6edb685aSTomi Valkeinen 		__field(u64, ts)
84*6edb685aSTomi Valkeinen 	),
85*6edb685aSTomi Valkeinen 	TP_fast_assign(
86*6edb685aSTomi Valkeinen 		__entry->node_id = node_id;
87*6edb685aSTomi Valkeinen 		__entry->buf_idx = buf->vb2_buf.index;
88*6edb685aSTomi Valkeinen 		__entry->seq = buf->sequence;
89*6edb685aSTomi Valkeinen 		__entry->ts = buf->vb2_buf.timestamp;
90*6edb685aSTomi Valkeinen 	),
91*6edb685aSTomi Valkeinen 	TP_printk("node=%u buf=%u seq=%u ts=%llu", __entry->node_id,
92*6edb685aSTomi Valkeinen 		  __entry->buf_idx, __entry->seq, __entry->ts)
93*6edb685aSTomi Valkeinen );
94*6edb685aSTomi Valkeinen 
95*6edb685aSTomi Valkeinen TRACE_EVENT(cfe_frame_start,
96*6edb685aSTomi Valkeinen 	TP_PROTO(u32 node_id, u32 fs_count),
97*6edb685aSTomi Valkeinen 	TP_ARGS(node_id, fs_count),
98*6edb685aSTomi Valkeinen 	TP_STRUCT__entry(
99*6edb685aSTomi Valkeinen 		__field(u32, node_id)
100*6edb685aSTomi Valkeinen 		__field(u32, fs_count)
101*6edb685aSTomi Valkeinen 	),
102*6edb685aSTomi Valkeinen 	TP_fast_assign(
103*6edb685aSTomi Valkeinen 		__entry->node_id = node_id;
104*6edb685aSTomi Valkeinen 		__entry->fs_count = fs_count;
105*6edb685aSTomi Valkeinen 	),
106*6edb685aSTomi Valkeinen 	TP_printk("node=%u fs_count=%u", __entry->node_id, __entry->fs_count)
107*6edb685aSTomi Valkeinen );
108*6edb685aSTomi Valkeinen 
109*6edb685aSTomi Valkeinen TRACE_EVENT(cfe_frame_end,
110*6edb685aSTomi Valkeinen 	TP_PROTO(u32 node_id, u32 fs_count),
111*6edb685aSTomi Valkeinen 	TP_ARGS(node_id, fs_count),
112*6edb685aSTomi Valkeinen 	TP_STRUCT__entry(
113*6edb685aSTomi Valkeinen 		__field(u32, node_id)
114*6edb685aSTomi Valkeinen 		__field(u32, fs_count)
115*6edb685aSTomi Valkeinen 	),
116*6edb685aSTomi Valkeinen 	TP_fast_assign(
117*6edb685aSTomi Valkeinen 		__entry->node_id = node_id;
118*6edb685aSTomi Valkeinen 		__entry->fs_count = fs_count;
119*6edb685aSTomi Valkeinen 	),
120*6edb685aSTomi Valkeinen 	TP_printk("node=%u fs_count=%u", __entry->node_id, __entry->fs_count)
121*6edb685aSTomi Valkeinen );
122*6edb685aSTomi Valkeinen 
123*6edb685aSTomi Valkeinen TRACE_EVENT(cfe_prepare_next_job,
124*6edb685aSTomi Valkeinen 	TP_PROTO(bool fe_enabled),
125*6edb685aSTomi Valkeinen 	TP_ARGS(fe_enabled),
126*6edb685aSTomi Valkeinen 	TP_STRUCT__entry(
127*6edb685aSTomi Valkeinen 		__field(bool, fe_enabled)
128*6edb685aSTomi Valkeinen 	),
129*6edb685aSTomi Valkeinen 	TP_fast_assign(
130*6edb685aSTomi Valkeinen 		__entry->fe_enabled = fe_enabled;
131*6edb685aSTomi Valkeinen 	),
132*6edb685aSTomi Valkeinen 	TP_printk("fe_enabled=%u", __entry->fe_enabled)
133*6edb685aSTomi Valkeinen );
134*6edb685aSTomi Valkeinen 
135*6edb685aSTomi Valkeinen /* These are copied from csi2.c */
136*6edb685aSTomi Valkeinen #define CSI2_STATUS_IRQ_FS(x)			(BIT(0) << (x))
137*6edb685aSTomi Valkeinen #define CSI2_STATUS_IRQ_FE(x)			(BIT(4) << (x))
138*6edb685aSTomi Valkeinen #define CSI2_STATUS_IRQ_FE_ACK(x)		(BIT(8) << (x))
139*6edb685aSTomi Valkeinen #define CSI2_STATUS_IRQ_LE(x)			(BIT(12) << (x))
140*6edb685aSTomi Valkeinen #define CSI2_STATUS_IRQ_LE_ACK(x)		(BIT(16) << (x))
141*6edb685aSTomi Valkeinen 
142*6edb685aSTomi Valkeinen TRACE_EVENT(csi2_irq,
143*6edb685aSTomi Valkeinen 	TP_PROTO(u32 channel, u32 status, u32 dbg),
144*6edb685aSTomi Valkeinen 	TP_ARGS(channel, status, dbg),
145*6edb685aSTomi Valkeinen 	TP_STRUCT__entry(
146*6edb685aSTomi Valkeinen 		__field(u32, channel)
147*6edb685aSTomi Valkeinen 		__field(u32, status)
148*6edb685aSTomi Valkeinen 		__field(u32, dbg)
149*6edb685aSTomi Valkeinen 	),
150*6edb685aSTomi Valkeinen 	TP_fast_assign(
151*6edb685aSTomi Valkeinen 		__entry->channel = channel;
152*6edb685aSTomi Valkeinen 		__entry->status = status;
153*6edb685aSTomi Valkeinen 		__entry->dbg = dbg;
154*6edb685aSTomi Valkeinen 	),
155*6edb685aSTomi Valkeinen 	TP_printk("ch=%u flags=[ %s%s%s%s%s] frame=%u line=%u\n",
156*6edb685aSTomi Valkeinen 		  __entry->channel,
157*6edb685aSTomi Valkeinen 		  (__entry->status & CSI2_STATUS_IRQ_FS(__entry->channel)) ?
158*6edb685aSTomi Valkeinen 			"FS " : "",
159*6edb685aSTomi Valkeinen 		  (__entry->status & CSI2_STATUS_IRQ_FE(__entry->channel)) ?
160*6edb685aSTomi Valkeinen 			"FE " : "",
161*6edb685aSTomi Valkeinen 		  (__entry->status & CSI2_STATUS_IRQ_FE_ACK(__entry->channel)) ?
162*6edb685aSTomi Valkeinen 			"FE_ACK " : "",
163*6edb685aSTomi Valkeinen 		  (__entry->status & CSI2_STATUS_IRQ_LE(__entry->channel)) ?
164*6edb685aSTomi Valkeinen 			"LE " : "",
165*6edb685aSTomi Valkeinen 		  (__entry->status & CSI2_STATUS_IRQ_LE_ACK(__entry->channel)) ?
166*6edb685aSTomi Valkeinen 			"LE_ACK " : "",
167*6edb685aSTomi Valkeinen 		  __entry->dbg >> 16, __entry->dbg & 0xffff)
168*6edb685aSTomi Valkeinen );
169*6edb685aSTomi Valkeinen 
170*6edb685aSTomi Valkeinen TRACE_EVENT(fe_irq,
171*6edb685aSTomi Valkeinen 	TP_PROTO(u32 status, u32 output_status, u32 frame_status,
172*6edb685aSTomi Valkeinen 		 u32 error_status, u32 int_status),
173*6edb685aSTomi Valkeinen 	TP_ARGS(status, output_status, frame_status, error_status, int_status),
174*6edb685aSTomi Valkeinen 	TP_STRUCT__entry(
175*6edb685aSTomi Valkeinen 		__field(u32, status)
176*6edb685aSTomi Valkeinen 		__field(u32, output_status)
177*6edb685aSTomi Valkeinen 		__field(u32, frame_status)
178*6edb685aSTomi Valkeinen 		__field(u32, error_status)
179*6edb685aSTomi Valkeinen 		__field(u32, int_status)
180*6edb685aSTomi Valkeinen 	),
181*6edb685aSTomi Valkeinen 	TP_fast_assign(
182*6edb685aSTomi Valkeinen 		__entry->status = status;
183*6edb685aSTomi Valkeinen 		__entry->output_status = output_status;
184*6edb685aSTomi Valkeinen 		__entry->frame_status = frame_status;
185*6edb685aSTomi Valkeinen 		__entry->error_status = error_status;
186*6edb685aSTomi Valkeinen 		__entry->int_status = int_status;
187*6edb685aSTomi Valkeinen 	),
188*6edb685aSTomi Valkeinen 	TP_printk("status 0x%x out_status 0x%x frame_status 0x%x error_status 0x%x int_status 0x%x",
189*6edb685aSTomi Valkeinen 		  __entry->status,
190*6edb685aSTomi Valkeinen 		  __entry->output_status,
191*6edb685aSTomi Valkeinen 		  __entry->frame_status,
192*6edb685aSTomi Valkeinen 		  __entry->error_status,
193*6edb685aSTomi Valkeinen 		  __entry->int_status)
194*6edb685aSTomi Valkeinen );
195*6edb685aSTomi Valkeinen 
196*6edb685aSTomi Valkeinen #endif /* _CFE_TRACE_H */
197*6edb685aSTomi Valkeinen 
198*6edb685aSTomi Valkeinen /* This part must be outside protection */
199*6edb685aSTomi Valkeinen #undef TRACE_INCLUDE_PATH
200*6edb685aSTomi Valkeinen #define TRACE_INCLUDE_PATH .
201*6edb685aSTomi Valkeinen #define TRACE_INCLUDE_FILE ../../drivers/media/platform/raspberrypi/rp1-cfe/cfe-trace
202*6edb685aSTomi Valkeinen #include <trace/define_trace.h>
203