blob: 7f0fc3ed61aa73e49a8340d6e17673bdc3df2fe2 [file] [log] [blame]
Chris Wilson1c5d22f2009-08-25 11:15:50 +01001#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>
Chris Wilson05394f32010-11-08 19:18:58 +00009#include "i915_drv.h"
Chris Wilson1c5d22f2009-08-25 11:15:50 +010010
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
18TRACE_EVENT(i915_gem_object_create,
19
Chris Wilson05394f32010-11-08 19:18:58 +000020 TP_PROTO(struct drm_i915_gem_object *obj),
Chris Wilson1c5d22f2009-08-25 11:15:50 +010021
22 TP_ARGS(obj),
23
24 TP_STRUCT__entry(
Chris Wilson05394f32010-11-08 19:18:58 +000025 __field(struct drm_i915_gem_object *, obj)
Chris Wilson1c5d22f2009-08-25 11:15:50 +010026 __field(u32, size)
27 ),
28
29 TP_fast_assign(
30 __entry->obj = obj;
Chris Wilson05394f32010-11-08 19:18:58 +000031 __entry->size = obj->base.size;
Chris Wilson1c5d22f2009-08-25 11:15:50 +010032 ),
33
34 TP_printk("obj=%p, size=%u", __entry->obj, __entry->size)
35);
36
37TRACE_EVENT(i915_gem_object_bind,
38
Chris Wilson05394f32010-11-08 19:18:58 +000039 TP_PROTO(struct drm_i915_gem_object *obj, u32 gtt_offset, bool mappable),
Chris Wilson1c5d22f2009-08-25 11:15:50 +010040
Daniel Vetterec57d262010-09-30 23:42:15 +020041 TP_ARGS(obj, gtt_offset, mappable),
Chris Wilson1c5d22f2009-08-25 11:15:50 +010042
43 TP_STRUCT__entry(
Chris Wilson05394f32010-11-08 19:18:58 +000044 __field(struct drm_i915_gem_object *, obj)
Chris Wilson1c5d22f2009-08-25 11:15:50 +010045 __field(u32, gtt_offset)
Daniel Vetterec57d262010-09-30 23:42:15 +020046 __field(bool, mappable)
Chris Wilson1c5d22f2009-08-25 11:15:50 +010047 ),
48
49 TP_fast_assign(
50 __entry->obj = obj;
51 __entry->gtt_offset = gtt_offset;
Daniel Vetterec57d262010-09-30 23:42:15 +020052 __entry->mappable = mappable;
Chris Wilson1c5d22f2009-08-25 11:15:50 +010053 ),
54
Daniel Vetterec57d262010-09-30 23:42:15 +020055 TP_printk("obj=%p, gtt_offset=%08x%s",
56 __entry->obj, __entry->gtt_offset,
57 __entry->mappable ? ", mappable" : "")
Chris Wilson1c5d22f2009-08-25 11:15:50 +010058);
59
Chris Wilson1c5d22f2009-08-25 11:15:50 +010060TRACE_EVENT(i915_gem_object_change_domain,
61
Chris Wilson05394f32010-11-08 19:18:58 +000062 TP_PROTO(struct drm_i915_gem_object *obj, uint32_t old_read_domains, uint32_t old_write_domain),
Chris Wilson1c5d22f2009-08-25 11:15:50 +010063
64 TP_ARGS(obj, old_read_domains, old_write_domain),
65
66 TP_STRUCT__entry(
Chris Wilson05394f32010-11-08 19:18:58 +000067 __field(struct drm_i915_gem_object *, obj)
Chris Wilson1c5d22f2009-08-25 11:15:50 +010068 __field(u32, read_domains)
69 __field(u32, write_domain)
70 ),
71
72 TP_fast_assign(
73 __entry->obj = obj;
Chris Wilson05394f32010-11-08 19:18:58 +000074 __entry->read_domains = obj->base.read_domains | (old_read_domains << 16);
75 __entry->write_domain = obj->base.write_domain | (old_write_domain << 16);
Chris Wilson1c5d22f2009-08-25 11:15:50 +010076 ),
77
78 TP_printk("obj=%p, read=%04x, write=%04x",
79 __entry->obj,
80 __entry->read_domains, __entry->write_domain)
81);
82
Li Zefan903cf202010-03-11 16:41:45 +080083DECLARE_EVENT_CLASS(i915_gem_object,
Chris Wilson1c5d22f2009-08-25 11:15:50 +010084
Chris Wilson05394f32010-11-08 19:18:58 +000085 TP_PROTO(struct drm_i915_gem_object *obj),
Chris Wilson1c5d22f2009-08-25 11:15:50 +010086
87 TP_ARGS(obj),
88
89 TP_STRUCT__entry(
Chris Wilson05394f32010-11-08 19:18:58 +000090 __field(struct drm_i915_gem_object *, obj)
Chris Wilson1c5d22f2009-08-25 11:15:50 +010091 ),
92
93 TP_fast_assign(
94 __entry->obj = obj;
95 ),
96
97 TP_printk("obj=%p", __entry->obj)
98);
99
Li Zefanf41275e2010-05-24 16:25:44 +0800100DEFINE_EVENT(i915_gem_object, i915_gem_object_clflush,
101
Chris Wilson05394f32010-11-08 19:18:58 +0000102 TP_PROTO(struct drm_i915_gem_object *obj),
Li Zefanf41275e2010-05-24 16:25:44 +0800103
104 TP_ARGS(obj)
105);
106
Li Zefan903cf202010-03-11 16:41:45 +0800107DEFINE_EVENT(i915_gem_object, i915_gem_object_unbind,
Chris Wilson1c5d22f2009-08-25 11:15:50 +0100108
Chris Wilson05394f32010-11-08 19:18:58 +0000109 TP_PROTO(struct drm_i915_gem_object *obj),
Chris Wilson1c5d22f2009-08-25 11:15:50 +0100110
Li Zefan903cf202010-03-11 16:41:45 +0800111 TP_ARGS(obj)
112);
Chris Wilson1c5d22f2009-08-25 11:15:50 +0100113
Li Zefan903cf202010-03-11 16:41:45 +0800114DEFINE_EVENT(i915_gem_object, i915_gem_object_destroy,
Chris Wilson1c5d22f2009-08-25 11:15:50 +0100115
Chris Wilson05394f32010-11-08 19:18:58 +0000116 TP_PROTO(struct drm_i915_gem_object *obj),
Chris Wilson1c5d22f2009-08-25 11:15:50 +0100117
Li Zefan903cf202010-03-11 16:41:45 +0800118 TP_ARGS(obj)
Chris Wilson1c5d22f2009-08-25 11:15:50 +0100119);
120
121/* batch tracing */
122
123TRACE_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(
Chris Wilson4f49be52009-09-24 00:23:33 +0100130 __field(u32, dev)
Chris Wilson1c5d22f2009-08-25 11:15:50 +0100131 __field(u32, seqno)
132 ),
133
134 TP_fast_assign(
Chris Wilson4f49be52009-09-24 00:23:33 +0100135 __entry->dev = dev->primary->index;
Chris Wilson1c5d22f2009-08-25 11:15:50 +0100136 __entry->seqno = seqno;
Chris Wilson9d34e5d2009-09-24 05:26:06 +0100137 i915_trace_irq_get(dev, seqno);
Chris Wilson1c5d22f2009-08-25 11:15:50 +0100138 ),
139
Chris Wilson4f49be52009-09-24 00:23:33 +0100140 TP_printk("dev=%u, seqno=%u", __entry->dev, __entry->seqno)
Chris Wilson1c5d22f2009-08-25 11:15:50 +0100141);
142
143TRACE_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(
Chris Wilson4f49be52009-09-24 00:23:33 +0100151 __field(u32, dev)
Chris Wilson1c5d22f2009-08-25 11:15:50 +0100152 __field(u32, seqno)
153 __field(u32, flush_domains)
154 __field(u32, invalidate_domains)
155 ),
156
157 TP_fast_assign(
Chris Wilson4f49be52009-09-24 00:23:33 +0100158 __entry->dev = dev->primary->index;
Chris Wilson1c5d22f2009-08-25 11:15:50 +0100159 __entry->seqno = seqno;
160 __entry->flush_domains = flush_domains;
161 __entry->invalidate_domains = invalidate_domains;
162 ),
163
Chris Wilson4f49be52009-09-24 00:23:33 +0100164 TP_printk("dev=%u, seqno=%u, flush=%04x, invalidate=%04x",
Chris Wilson1c5d22f2009-08-25 11:15:50 +0100165 __entry->dev, __entry->seqno,
166 __entry->flush_domains, __entry->invalidate_domains)
167);
168
Li Zefan903cf202010-03-11 16:41:45 +0800169DECLARE_EVENT_CLASS(i915_gem_request,
Chris Wilson1c5d22f2009-08-25 11:15:50 +0100170
171 TP_PROTO(struct drm_device *dev, u32 seqno),
172
173 TP_ARGS(dev, seqno),
174
175 TP_STRUCT__entry(
Chris Wilson4f49be52009-09-24 00:23:33 +0100176 __field(u32, dev)
Chris Wilson1c5d22f2009-08-25 11:15:50 +0100177 __field(u32, seqno)
178 ),
179
180 TP_fast_assign(
Chris Wilson4f49be52009-09-24 00:23:33 +0100181 __entry->dev = dev->primary->index;
Chris Wilson1c5d22f2009-08-25 11:15:50 +0100182 __entry->seqno = seqno;
183 ),
184
Chris Wilson4f49be52009-09-24 00:23:33 +0100185 TP_printk("dev=%u, seqno=%u", __entry->dev, __entry->seqno)
Chris Wilson1c5d22f2009-08-25 11:15:50 +0100186);
187
Li Zefan903cf202010-03-11 16:41:45 +0800188DEFINE_EVENT(i915_gem_request, i915_gem_request_complete,
Chris Wilson1c5d22f2009-08-25 11:15:50 +0100189
190 TP_PROTO(struct drm_device *dev, u32 seqno),
191
Li Zefan903cf202010-03-11 16:41:45 +0800192 TP_ARGS(dev, seqno)
Chris Wilson1c5d22f2009-08-25 11:15:50 +0100193);
194
Li Zefan903cf202010-03-11 16:41:45 +0800195DEFINE_EVENT(i915_gem_request, i915_gem_request_retire,
Chris Wilson1c5d22f2009-08-25 11:15:50 +0100196
197 TP_PROTO(struct drm_device *dev, u32 seqno),
198
Li Zefan903cf202010-03-11 16:41:45 +0800199 TP_ARGS(dev, seqno)
Chris Wilson1c5d22f2009-08-25 11:15:50 +0100200);
201
Li Zefan903cf202010-03-11 16:41:45 +0800202DEFINE_EVENT(i915_gem_request, i915_gem_request_wait_begin,
Chris Wilson1c5d22f2009-08-25 11:15:50 +0100203
204 TP_PROTO(struct drm_device *dev, u32 seqno),
205
Li Zefan903cf202010-03-11 16:41:45 +0800206 TP_ARGS(dev, seqno)
Chris Wilson1c5d22f2009-08-25 11:15:50 +0100207);
208
Li Zefan903cf202010-03-11 16:41:45 +0800209DEFINE_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
216DECLARE_EVENT_CLASS(i915_ring,
Chris Wilson1c5d22f2009-08-25 11:15:50 +0100217
218 TP_PROTO(struct drm_device *dev),
219
220 TP_ARGS(dev),
221
222 TP_STRUCT__entry(
Chris Wilson4f49be52009-09-24 00:23:33 +0100223 __field(u32, dev)
Chris Wilson1c5d22f2009-08-25 11:15:50 +0100224 ),
225
226 TP_fast_assign(
Chris Wilson4f49be52009-09-24 00:23:33 +0100227 __entry->dev = dev->primary->index;
Chris Wilson1c5d22f2009-08-25 11:15:50 +0100228 ),
229
Chris Wilson4f49be52009-09-24 00:23:33 +0100230 TP_printk("dev=%u", __entry->dev)
Chris Wilson1c5d22f2009-08-25 11:15:50 +0100231);
232
Li Zefan903cf202010-03-11 16:41:45 +0800233DEFINE_EVENT(i915_ring, i915_ring_wait_begin,
Chris Wilson1c5d22f2009-08-25 11:15:50 +0100234
235 TP_PROTO(struct drm_device *dev),
236
Li Zefan903cf202010-03-11 16:41:45 +0800237 TP_ARGS(dev)
238);
Chris Wilson1c5d22f2009-08-25 11:15:50 +0100239
Li Zefan903cf202010-03-11 16:41:45 +0800240DEFINE_EVENT(i915_ring, i915_ring_wait_end,
Chris Wilson1c5d22f2009-08-25 11:15:50 +0100241
Li Zefan903cf202010-03-11 16:41:45 +0800242 TP_PROTO(struct drm_device *dev),
Chris Wilson1c5d22f2009-08-25 11:15:50 +0100243
Li Zefan903cf202010-03-11 16:41:45 +0800244 TP_ARGS(dev)
Chris Wilson1c5d22f2009-08-25 11:15:50 +0100245);
246
Jesse Barnese5510fa2010-07-01 16:48:37 -0700247TRACE_EVENT(i915_flip_request,
Chris Wilson05394f32010-11-08 19:18:58 +0000248 TP_PROTO(int plane, struct drm_i915_gem_object *obj),
Jesse Barnese5510fa2010-07-01 16:48:37 -0700249
250 TP_ARGS(plane, obj),
251
252 TP_STRUCT__entry(
253 __field(int, plane)
Chris Wilson05394f32010-11-08 19:18:58 +0000254 __field(struct drm_i915_gem_object *, obj)
Jesse Barnese5510fa2010-07-01 16:48:37 -0700255 ),
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
265TRACE_EVENT(i915_flip_complete,
Chris Wilson05394f32010-11-08 19:18:58 +0000266 TP_PROTO(int plane, struct drm_i915_gem_object *obj),
Jesse Barnese5510fa2010-07-01 16:48:37 -0700267
268 TP_ARGS(plane, obj),
269
270 TP_STRUCT__entry(
271 __field(int, plane)
Chris Wilson05394f32010-11-08 19:18:58 +0000272 __field(struct drm_i915_gem_object *, obj)
Jesse Barnese5510fa2010-07-01 16:48:37 -0700273 ),
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
Yuanhan Liuba4f01a2010-11-08 17:09:41 +0800283TRACE_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
Chris Wilson1c5d22f2009-08-25 11:15:50 +0100306#endif /* _I915_TRACE_H_ */
307
308/* This part must be outside protection */
309#undef TRACE_INCLUDE_PATH
Peter Cliftona7c54272010-05-03 13:24:41 +0100310#define TRACE_INCLUDE_PATH .
Chris Wilson1c5d22f2009-08-25 11:15:50 +0100311#include <trace/define_trace.h>