xref: /openbmc/linux/drivers/gpu/drm/i915/i915_trace.h (revision df2634f43f5106947f3735a0b61a6527a4b278cd)
1 #if !defined(_I915_TRACE_H_) || defined(TRACE_HEADER_MULTI_READ)
2 #define _I915_TRACE_H_
3 
4 #include <linux/stringify.h>
5 #include <linux/types.h>
6 #include <linux/tracepoint.h>
7 
8 #include <drm/drmP.h>
9 #include "i915_drv.h"
10 
11 #undef TRACE_SYSTEM
12 #define TRACE_SYSTEM i915
13 #define TRACE_SYSTEM_STRING __stringify(TRACE_SYSTEM)
14 #define TRACE_INCLUDE_FILE i915_trace
15 
16 /* object tracking */
17 
18 TRACE_EVENT(i915_gem_object_create,
19 
20 	    TP_PROTO(struct drm_i915_gem_object *obj),
21 
22 	    TP_ARGS(obj),
23 
24 	    TP_STRUCT__entry(
25 			     __field(struct drm_i915_gem_object *, obj)
26 			     __field(u32, size)
27 			     ),
28 
29 	    TP_fast_assign(
30 			   __entry->obj = obj;
31 			   __entry->size = obj->base.size;
32 			   ),
33 
34 	    TP_printk("obj=%p, size=%u", __entry->obj, __entry->size)
35 );
36 
37 TRACE_EVENT(i915_gem_object_bind,
38 
39 	    TP_PROTO(struct drm_i915_gem_object *obj, u32 gtt_offset, bool mappable),
40 
41 	    TP_ARGS(obj, gtt_offset, mappable),
42 
43 	    TP_STRUCT__entry(
44 			     __field(struct drm_i915_gem_object *, obj)
45 			     __field(u32, gtt_offset)
46 			     __field(bool, mappable)
47 			     ),
48 
49 	    TP_fast_assign(
50 			   __entry->obj = obj;
51 			   __entry->gtt_offset = gtt_offset;
52 			   __entry->mappable = mappable;
53 			   ),
54 
55 	    TP_printk("obj=%p, gtt_offset=%08x%s",
56 		      __entry->obj, __entry->gtt_offset,
57 		      __entry->mappable ? ", mappable" : "")
58 );
59 
60 TRACE_EVENT(i915_gem_object_change_domain,
61 
62 	    TP_PROTO(struct drm_i915_gem_object *obj, uint32_t old_read_domains, uint32_t old_write_domain),
63 
64 	    TP_ARGS(obj, old_read_domains, old_write_domain),
65 
66 	    TP_STRUCT__entry(
67 			     __field(struct drm_i915_gem_object *, obj)
68 			     __field(u32, read_domains)
69 			     __field(u32, write_domain)
70 			     ),
71 
72 	    TP_fast_assign(
73 			   __entry->obj = obj;
74 			   __entry->read_domains = obj->base.read_domains | (old_read_domains << 16);
75 			   __entry->write_domain = obj->base.write_domain | (old_write_domain << 16);
76 			   ),
77 
78 	    TP_printk("obj=%p, read=%04x, write=%04x",
79 		      __entry->obj,
80 		      __entry->read_domains, __entry->write_domain)
81 );
82 
83 DECLARE_EVENT_CLASS(i915_gem_object,
84 
85 	    TP_PROTO(struct drm_i915_gem_object *obj),
86 
87 	    TP_ARGS(obj),
88 
89 	    TP_STRUCT__entry(
90 			     __field(struct drm_i915_gem_object *, obj)
91 			     ),
92 
93 	    TP_fast_assign(
94 			   __entry->obj = obj;
95 			   ),
96 
97 	    TP_printk("obj=%p", __entry->obj)
98 );
99 
100 DEFINE_EVENT(i915_gem_object, i915_gem_object_clflush,
101 
102 	    TP_PROTO(struct drm_i915_gem_object *obj),
103 
104 	    TP_ARGS(obj)
105 );
106 
107 DEFINE_EVENT(i915_gem_object, i915_gem_object_unbind,
108 
109 	    TP_PROTO(struct drm_i915_gem_object *obj),
110 
111 	    TP_ARGS(obj)
112 );
113 
114 DEFINE_EVENT(i915_gem_object, i915_gem_object_destroy,
115 
116 	    TP_PROTO(struct drm_i915_gem_object *obj),
117 
118 	    TP_ARGS(obj)
119 );
120 
121 /* batch tracing */
122 
123 TRACE_EVENT(i915_gem_request_submit,
124 
125 	    TP_PROTO(struct drm_device *dev, u32 seqno),
126 
127 	    TP_ARGS(dev, seqno),
128 
129 	    TP_STRUCT__entry(
130 			     __field(u32, dev)
131 			     __field(u32, seqno)
132 			     ),
133 
134 	    TP_fast_assign(
135 			   __entry->dev = dev->primary->index;
136 			   __entry->seqno = seqno;
137 			   i915_trace_irq_get(dev, seqno);
138 			   ),
139 
140 	    TP_printk("dev=%u, seqno=%u", __entry->dev, __entry->seqno)
141 );
142 
143 TRACE_EVENT(i915_gem_request_flush,
144 
145 	    TP_PROTO(struct drm_device *dev, u32 seqno,
146 		     u32 flush_domains, u32 invalidate_domains),
147 
148 	    TP_ARGS(dev, seqno, flush_domains, invalidate_domains),
149 
150 	    TP_STRUCT__entry(
151 			     __field(u32, dev)
152 			     __field(u32, seqno)
153 			     __field(u32, flush_domains)
154 			     __field(u32, invalidate_domains)
155 			     ),
156 
157 	    TP_fast_assign(
158 			   __entry->dev = dev->primary->index;
159 			   __entry->seqno = seqno;
160 			   __entry->flush_domains = flush_domains;
161 			   __entry->invalidate_domains = invalidate_domains;
162 			   ),
163 
164 	    TP_printk("dev=%u, seqno=%u, flush=%04x, invalidate=%04x",
165 		      __entry->dev, __entry->seqno,
166 		      __entry->flush_domains, __entry->invalidate_domains)
167 );
168 
169 DECLARE_EVENT_CLASS(i915_gem_request,
170 
171 	    TP_PROTO(struct drm_device *dev, u32 seqno),
172 
173 	    TP_ARGS(dev, seqno),
174 
175 	    TP_STRUCT__entry(
176 			     __field(u32, dev)
177 			     __field(u32, seqno)
178 			     ),
179 
180 	    TP_fast_assign(
181 			   __entry->dev = dev->primary->index;
182 			   __entry->seqno = seqno;
183 			   ),
184 
185 	    TP_printk("dev=%u, seqno=%u", __entry->dev, __entry->seqno)
186 );
187 
188 DEFINE_EVENT(i915_gem_request, i915_gem_request_complete,
189 
190 	    TP_PROTO(struct drm_device *dev, u32 seqno),
191 
192 	    TP_ARGS(dev, seqno)
193 );
194 
195 DEFINE_EVENT(i915_gem_request, i915_gem_request_retire,
196 
197 	    TP_PROTO(struct drm_device *dev, u32 seqno),
198 
199 	    TP_ARGS(dev, seqno)
200 );
201 
202 DEFINE_EVENT(i915_gem_request, i915_gem_request_wait_begin,
203 
204 	    TP_PROTO(struct drm_device *dev, u32 seqno),
205 
206 	    TP_ARGS(dev, seqno)
207 );
208 
209 DEFINE_EVENT(i915_gem_request, i915_gem_request_wait_end,
210 
211 	    TP_PROTO(struct drm_device *dev, u32 seqno),
212 
213 	    TP_ARGS(dev, seqno)
214 );
215 
216 DECLARE_EVENT_CLASS(i915_ring,
217 
218 	    TP_PROTO(struct drm_device *dev),
219 
220 	    TP_ARGS(dev),
221 
222 	    TP_STRUCT__entry(
223 			     __field(u32, dev)
224 			     ),
225 
226 	    TP_fast_assign(
227 			   __entry->dev = dev->primary->index;
228 			   ),
229 
230 	    TP_printk("dev=%u", __entry->dev)
231 );
232 
233 DEFINE_EVENT(i915_ring, i915_ring_wait_begin,
234 
235 	    TP_PROTO(struct drm_device *dev),
236 
237 	    TP_ARGS(dev)
238 );
239 
240 DEFINE_EVENT(i915_ring, i915_ring_wait_end,
241 
242 	    TP_PROTO(struct drm_device *dev),
243 
244 	    TP_ARGS(dev)
245 );
246 
247 TRACE_EVENT(i915_flip_request,
248 	    TP_PROTO(int plane, struct drm_i915_gem_object *obj),
249 
250 	    TP_ARGS(plane, obj),
251 
252 	    TP_STRUCT__entry(
253 		    __field(int, plane)
254 		    __field(struct drm_i915_gem_object *, obj)
255 		    ),
256 
257 	    TP_fast_assign(
258 		    __entry->plane = plane;
259 		    __entry->obj = obj;
260 		    ),
261 
262 	    TP_printk("plane=%d, obj=%p", __entry->plane, __entry->obj)
263 );
264 
265 TRACE_EVENT(i915_flip_complete,
266 	    TP_PROTO(int plane, struct drm_i915_gem_object *obj),
267 
268 	    TP_ARGS(plane, obj),
269 
270 	    TP_STRUCT__entry(
271 		    __field(int, plane)
272 		    __field(struct drm_i915_gem_object *, obj)
273 		    ),
274 
275 	    TP_fast_assign(
276 		    __entry->plane = plane;
277 		    __entry->obj = obj;
278 		    ),
279 
280 	    TP_printk("plane=%d, obj=%p", __entry->plane, __entry->obj)
281 );
282 
283 TRACE_EVENT(i915_reg_rw,
284            TP_PROTO(int cmd, uint32_t reg, uint64_t val, int len),
285 
286            TP_ARGS(cmd, reg, val, len),
287 
288            TP_STRUCT__entry(
289                    __field(int, cmd)
290                    __field(uint32_t, reg)
291                    __field(uint64_t, val)
292                    __field(int, len)
293                    ),
294 
295            TP_fast_assign(
296                    __entry->cmd = cmd;
297                    __entry->reg = reg;
298                    __entry->val = (uint64_t)val;
299                    __entry->len = len;
300                    ),
301 
302            TP_printk("cmd=%c, reg=0x%x, val=0x%llx, len=%d",
303                      __entry->cmd, __entry->reg, __entry->val, __entry->len)
304 );
305 
306 #endif /* _I915_TRACE_H_ */
307 
308 /* This part must be outside protection */
309 #undef TRACE_INCLUDE_PATH
310 #define TRACE_INCLUDE_PATH .
311 #include <trace/define_trace.h>
312