1 /* SPDX-License-Identifier: GPL-2.0-or-later */
2 /*
3  * include/trace/events/host1x.h
4  *
5  * host1x event logging to ftrace.
6  *
7  * Copyright (c) 2010-2013, NVIDIA Corporation.
8  */
9 
10 #undef TRACE_SYSTEM
11 #define TRACE_SYSTEM host1x
12 
13 #if !defined(_TRACE_HOST1X_H) || defined(TRACE_HEADER_MULTI_READ)
14 #define _TRACE_HOST1X_H
15 
16 #include <linux/ktime.h>
17 #include <linux/tracepoint.h>
18 
19 struct host1x_bo;
20 
21 DECLARE_EVENT_CLASS(host1x,
22 	TP_PROTO(const char *name),
23 	TP_ARGS(name),
24 	TP_STRUCT__entry(__field(const char *, name)),
25 	TP_fast_assign(__entry->name = name;),
26 	TP_printk("name=%s", __entry->name)
27 );
28 
29 DEFINE_EVENT(host1x, host1x_channel_open,
30 	TP_PROTO(const char *name),
31 	TP_ARGS(name)
32 );
33 
34 DEFINE_EVENT(host1x, host1x_channel_release,
35 	TP_PROTO(const char *name),
36 	TP_ARGS(name)
37 );
38 
39 DEFINE_EVENT(host1x, host1x_cdma_begin,
40 	TP_PROTO(const char *name),
41 	TP_ARGS(name)
42 );
43 
44 DEFINE_EVENT(host1x, host1x_cdma_end,
45 	TP_PROTO(const char *name),
46 	TP_ARGS(name)
47 );
48 
49 TRACE_EVENT(host1x_cdma_push,
50 	TP_PROTO(const char *name, u32 op1, u32 op2),
51 
52 	TP_ARGS(name, op1, op2),
53 
54 	TP_STRUCT__entry(
55 		__field(const char *, name)
56 		__field(u32, op1)
57 		__field(u32, op2)
58 	),
59 
60 	TP_fast_assign(
61 		__entry->name = name;
62 		__entry->op1 = op1;
63 		__entry->op2 = op2;
64 	),
65 
66 	TP_printk("name=%s, op1=%08x, op2=%08x",
67 		__entry->name, __entry->op1, __entry->op2)
68 );
69 
70 TRACE_EVENT(host1x_cdma_push_wide,
71 	TP_PROTO(const char *name, u32 op1, u32 op2, u32 op3, u32 op4),
72 
73 	TP_ARGS(name, op1, op2, op3, op4),
74 
75 	TP_STRUCT__entry(
76 		__field(const char *, name)
77 		__field(u32, op1)
78 		__field(u32, op2)
79 		__field(u32, op3)
80 		__field(u32, op4)
81 	),
82 
83 	TP_fast_assign(
84 		__entry->name = name;
85 		__entry->op1 = op1;
86 		__entry->op2 = op2;
87 		__entry->op3 = op3;
88 		__entry->op4 = op4;
89 	),
90 
91 	TP_printk("name=%s, op1=%08x, op2=%08x, op3=%08x op4=%08x",
92 		__entry->name, __entry->op1, __entry->op2, __entry->op3,
93 		__entry->op4)
94 );
95 
96 TRACE_EVENT(host1x_cdma_push_gather,
97 	TP_PROTO(const char *name, struct host1x_bo *bo,
98 			u32 words, u32 offset, void *cmdbuf),
99 
100 	TP_ARGS(name, bo, words, offset, cmdbuf),
101 
102 	TP_STRUCT__entry(
103 		__field(const char *, name)
104 		__field(struct host1x_bo *, bo)
105 		__field(u32, words)
106 		__field(u32, offset)
107 		__field(bool, cmdbuf)
108 		__dynamic_array(u32, cmdbuf, words)
109 	),
110 
111 	TP_fast_assign(
112 		if (cmdbuf) {
113 			memcpy(__get_dynamic_array(cmdbuf), cmdbuf+offset,
114 					words * sizeof(u32));
115 		}
116 		__entry->cmdbuf = cmdbuf;
117 		__entry->name = name;
118 		__entry->bo = bo;
119 		__entry->words = words;
120 		__entry->offset = offset;
121 	),
122 
123 	TP_printk("name=%s, bo=%p, words=%u, offset=%d, contents=[%s]",
124 	  __entry->name, __entry->bo,
125 	  __entry->words, __entry->offset,
126 	  __print_hex(__get_dynamic_array(cmdbuf),
127 		  __entry->cmdbuf ? __entry->words * 4 : 0))
128 );
129 
130 TRACE_EVENT(host1x_channel_submit,
131 	TP_PROTO(const char *name, u32 cmdbufs, u32 relocs, u32 syncpt_id,
132 		 u32 syncpt_incrs),
133 
134 	TP_ARGS(name, cmdbufs, relocs, syncpt_id, syncpt_incrs),
135 
136 	TP_STRUCT__entry(
137 		__field(const char *, name)
138 		__field(u32, cmdbufs)
139 		__field(u32, relocs)
140 		__field(u32, syncpt_id)
141 		__field(u32, syncpt_incrs)
142 	),
143 
144 	TP_fast_assign(
145 		__entry->name = name;
146 		__entry->cmdbufs = cmdbufs;
147 		__entry->relocs = relocs;
148 		__entry->syncpt_id = syncpt_id;
149 		__entry->syncpt_incrs = syncpt_incrs;
150 	),
151 
152 	TP_printk("name=%s, cmdbufs=%u, relocs=%u, syncpt_id=%u, "
153 		  "syncpt_incrs=%u",
154 		  __entry->name, __entry->cmdbufs, __entry->relocs,
155 		  __entry->syncpt_id, __entry->syncpt_incrs)
156 );
157 
158 TRACE_EVENT(host1x_channel_submitted,
159 	TP_PROTO(const char *name, u32 syncpt_base, u32 syncpt_max),
160 
161 	TP_ARGS(name, syncpt_base, syncpt_max),
162 
163 	TP_STRUCT__entry(
164 		__field(const char *, name)
165 		__field(u32, syncpt_base)
166 		__field(u32, syncpt_max)
167 	),
168 
169 	TP_fast_assign(
170 		__entry->name = name;
171 		__entry->syncpt_base = syncpt_base;
172 		__entry->syncpt_max = syncpt_max;
173 	),
174 
175 	TP_printk("name=%s, syncpt_base=%d, syncpt_max=%d",
176 		__entry->name, __entry->syncpt_base, __entry->syncpt_max)
177 );
178 
179 TRACE_EVENT(host1x_channel_submit_complete,
180 	TP_PROTO(const char *name, int count, u32 thresh),
181 
182 	TP_ARGS(name, count, thresh),
183 
184 	TP_STRUCT__entry(
185 		__field(const char *, name)
186 		__field(int, count)
187 		__field(u32, thresh)
188 	),
189 
190 	TP_fast_assign(
191 		__entry->name = name;
192 		__entry->count = count;
193 		__entry->thresh = thresh;
194 	),
195 
196 	TP_printk("name=%s, count=%d, thresh=%d",
197 		__entry->name, __entry->count, __entry->thresh)
198 );
199 
200 TRACE_EVENT(host1x_wait_cdma,
201 	TP_PROTO(const char *name, u32 eventid),
202 
203 	TP_ARGS(name, eventid),
204 
205 	TP_STRUCT__entry(
206 		__field(const char *, name)
207 		__field(u32, eventid)
208 	),
209 
210 	TP_fast_assign(
211 		__entry->name = name;
212 		__entry->eventid = eventid;
213 	),
214 
215 	TP_printk("name=%s, event=%d", __entry->name, __entry->eventid)
216 );
217 
218 TRACE_EVENT(host1x_syncpt_load_min,
219 	TP_PROTO(u32 id, u32 val),
220 
221 	TP_ARGS(id, val),
222 
223 	TP_STRUCT__entry(
224 		__field(u32, id)
225 		__field(u32, val)
226 	),
227 
228 	TP_fast_assign(
229 		__entry->id = id;
230 		__entry->val = val;
231 	),
232 
233 	TP_printk("id=%d, val=%d", __entry->id, __entry->val)
234 );
235 
236 TRACE_EVENT(host1x_syncpt_wait_check,
237 	TP_PROTO(struct host1x_bo *bo, u32 offset, u32 syncpt_id, u32 thresh,
238 		 u32 min),
239 
240 	TP_ARGS(bo, offset, syncpt_id, thresh, min),
241 
242 	TP_STRUCT__entry(
243 		__field(struct host1x_bo *, bo)
244 		__field(u32, offset)
245 		__field(u32, syncpt_id)
246 		__field(u32, thresh)
247 		__field(u32, min)
248 	),
249 
250 	TP_fast_assign(
251 		__entry->bo = bo;
252 		__entry->offset = offset;
253 		__entry->syncpt_id = syncpt_id;
254 		__entry->thresh = thresh;
255 		__entry->min = min;
256 	),
257 
258 	TP_printk("bo=%p, offset=%05x, id=%d, thresh=%d, current=%d",
259 		__entry->bo, __entry->offset,
260 		__entry->syncpt_id, __entry->thresh,
261 		__entry->min)
262 );
263 
264 #endif /*  _TRACE_HOST1X_H */
265 
266 /* This part must be outside protection */
267 #include <trace/define_trace.h>
268