]> Git Repo - linux.git/blob - drivers/media/platform/raspberrypi/rp1-cfe/cfe-trace.h
Linux 6.14-rc3
[linux.git] / drivers / media / platform / raspberrypi / rp1-cfe / cfe-trace.h
1 /* SPDX-License-Identifier: GPL-2.0 */
2 /*
3  * Copyright (c) 2024 Raspberry Pi Ltd.
4  * Copyright (c) 2024 Ideas on Board Oy
5  */
6
7 #undef TRACE_SYSTEM
8 #define TRACE_SYSTEM cfe
9
10 #if !defined(_CFE_TRACE_H) || defined(TRACE_HEADER_MULTI_READ)
11 #define _CFE_TRACE_H
12
13 #include <linux/tracepoint.h>
14 #include <media/videobuf2-v4l2.h>
15
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),
19         TP_STRUCT__entry(
20                 __field(u32, node_id)
21                 __field(u32, buf_idx)
22                 __field(u32, queue_id)
23         ),
24         TP_fast_assign(
25                 __entry->node_id = node_id;
26                 __entry->buf_idx = buf_idx;
27                 __entry->queue_id = queue_id;
28         ),
29         TP_printk("node=%u buf=%u, queue=%u", __entry->node_id,
30                   __entry->buf_idx, __entry->queue_id)
31 );
32
33 DECLARE_EVENT_CLASS(cfe_buffer_template,
34         TP_PROTO(u32 node_id, struct vb2_buffer *buf),
35         TP_ARGS(node_id, buf),
36         TP_STRUCT__entry(
37                 __field(u32, node_id)
38                 __field(u32, buf_idx)
39         ),
40         TP_fast_assign(
41                 __entry->node_id = node_id;
42                 __entry->buf_idx = buf->index;
43         ),
44         TP_printk("node=%u buf=%u", __entry->node_id, __entry->buf_idx)
45 );
46
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));
50
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),
54         TP_STRUCT__entry(
55                 __field(u32, node_id)
56                 __field(u32, buf_idx)
57                 __field(bool, schedule_now)
58         ),
59         TP_fast_assign(
60                 __entry->node_id = node_id;
61                 __entry->buf_idx = buf->index;
62                 __entry->schedule_now = schedule_now;
63         ),
64         TP_printk("node=%u buf=%u%s", __entry->node_id, __entry->buf_idx,
65                   __entry->schedule_now ? " schedule immediately" : "")
66 );
67
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));
71
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));
75
76 TRACE_EVENT(cfe_buffer_complete,
77         TP_PROTO(u32 node_id, struct vb2_v4l2_buffer *buf),
78         TP_ARGS(node_id, buf),
79         TP_STRUCT__entry(
80                 __field(u32, node_id)
81                 __field(u32, buf_idx)
82                 __field(u32, seq)
83                 __field(u64, ts)
84         ),
85         TP_fast_assign(
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;
90         ),
91         TP_printk("node=%u buf=%u seq=%u ts=%llu", __entry->node_id,
92                   __entry->buf_idx, __entry->seq, __entry->ts)
93 );
94
95 TRACE_EVENT(cfe_frame_start,
96         TP_PROTO(u32 node_id, u32 fs_count),
97         TP_ARGS(node_id, fs_count),
98         TP_STRUCT__entry(
99                 __field(u32, node_id)
100                 __field(u32, fs_count)
101         ),
102         TP_fast_assign(
103                 __entry->node_id = node_id;
104                 __entry->fs_count = fs_count;
105         ),
106         TP_printk("node=%u fs_count=%u", __entry->node_id, __entry->fs_count)
107 );
108
109 TRACE_EVENT(cfe_frame_end,
110         TP_PROTO(u32 node_id, u32 fs_count),
111         TP_ARGS(node_id, fs_count),
112         TP_STRUCT__entry(
113                 __field(u32, node_id)
114                 __field(u32, fs_count)
115         ),
116         TP_fast_assign(
117                 __entry->node_id = node_id;
118                 __entry->fs_count = fs_count;
119         ),
120         TP_printk("node=%u fs_count=%u", __entry->node_id, __entry->fs_count)
121 );
122
123 TRACE_EVENT(cfe_prepare_next_job,
124         TP_PROTO(bool fe_enabled),
125         TP_ARGS(fe_enabled),
126         TP_STRUCT__entry(
127                 __field(bool, fe_enabled)
128         ),
129         TP_fast_assign(
130                 __entry->fe_enabled = fe_enabled;
131         ),
132         TP_printk("fe_enabled=%u", __entry->fe_enabled)
133 );
134
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))
141
142 TRACE_EVENT(csi2_irq,
143         TP_PROTO(u32 channel, u32 status, u32 dbg),
144         TP_ARGS(channel, status, dbg),
145         TP_STRUCT__entry(
146                 __field(u32, channel)
147                 __field(u32, status)
148                 __field(u32, dbg)
149         ),
150         TP_fast_assign(
151                 __entry->channel = channel;
152                 __entry->status = status;
153                 __entry->dbg = dbg;
154         ),
155         TP_printk("ch=%u flags=[ %s%s%s%s%s] frame=%u line=%u\n",
156                   __entry->channel,
157                   (__entry->status & CSI2_STATUS_IRQ_FS(__entry->channel)) ?
158                         "FS " : "",
159                   (__entry->status & CSI2_STATUS_IRQ_FE(__entry->channel)) ?
160                         "FE " : "",
161                   (__entry->status & CSI2_STATUS_IRQ_FE_ACK(__entry->channel)) ?
162                         "FE_ACK " : "",
163                   (__entry->status & CSI2_STATUS_IRQ_LE(__entry->channel)) ?
164                         "LE " : "",
165                   (__entry->status & CSI2_STATUS_IRQ_LE_ACK(__entry->channel)) ?
166                         "LE_ACK " : "",
167                   __entry->dbg >> 16, __entry->dbg & 0xffff)
168 );
169
170 TRACE_EVENT(fe_irq,
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),
174         TP_STRUCT__entry(
175                 __field(u32, status)
176                 __field(u32, output_status)
177                 __field(u32, frame_status)
178                 __field(u32, error_status)
179                 __field(u32, int_status)
180         ),
181         TP_fast_assign(
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;
187         ),
188         TP_printk("status 0x%x out_status 0x%x frame_status 0x%x error_status 0x%x int_status 0x%x",
189                   __entry->status,
190                   __entry->output_status,
191                   __entry->frame_status,
192                   __entry->error_status,
193                   __entry->int_status)
194 );
195
196 #endif /* _CFE_TRACE_H */
197
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>
This page took 0.043857 seconds and 4 git commands to generate.