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