1/*	$NetBSD: radeon_trace.h,v 1.5 2021/12/18 23:45:43 riastradh Exp $	*/
2
3/* SPDX-License-Identifier: MIT */
4#if !defined(_RADEON_TRACE_H) || defined(TRACE_HEADER_MULTI_READ)
5#define _RADEON_TRACE_H_
6
7#include <linux/stringify.h>
8#include <linux/tracepoint.h>
9#include <linux/types.h>
10
11#include <drm/drm_file.h>
12
13#undef TRACE_SYSTEM
14#define TRACE_SYSTEM radeon
15#define TRACE_INCLUDE_FILE radeon_trace
16
17TRACE_EVENT(radeon_bo_create,
18	    TP_PROTO(struct radeon_bo *bo),
19	    TP_ARGS(bo),
20	    TP_STRUCT__entry(
21			     __field(struct radeon_bo *, bo)
22			     __field(u32, pages)
23			     ),
24
25	    TP_fast_assign(
26			   __entry->bo = bo;
27			   __entry->pages = bo->tbo.num_pages;
28			   ),
29	    TP_printk("bo=%p, pages=%u", __entry->bo, __entry->pages)
30);
31
32TRACE_EVENT(radeon_cs,
33	    TP_PROTO(struct radeon_cs_parser *p),
34	    TP_ARGS(p),
35	    TP_STRUCT__entry(
36			     __field(u32, ring)
37			     __field(u32, dw)
38			     __field(u32, fences)
39			     ),
40
41	    TP_fast_assign(
42			   __entry->ring = p->ring;
43			   __entry->dw = p->chunk_ib->length_dw;
44			   __entry->fences = radeon_fence_count_emitted(
45				p->rdev, p->ring);
46			   ),
47	    TP_printk("ring=%u, dw=%u, fences=%u",
48		      __entry->ring, __entry->dw,
49		      __entry->fences)
50);
51
52TRACE_EVENT(radeon_vm_grab_id,
53	    TP_PROTO(unsigned vmid, int ring),
54	    TP_ARGS(vmid, ring),
55	    TP_STRUCT__entry(
56			     __field(u32, vmid)
57			     __field(u32, ring)
58			     ),
59
60	    TP_fast_assign(
61			   __entry->vmid = vmid;
62			   __entry->ring = ring;
63			   ),
64	    TP_printk("vmid=%u, ring=%u", __entry->vmid, __entry->ring)
65);
66
67TRACE_EVENT(radeon_vm_bo_update,
68	    TP_PROTO(struct radeon_bo_va *bo_va),
69	    TP_ARGS(bo_va),
70	    TP_STRUCT__entry(
71			     __field(u64, soffset)
72			     __field(u64, eoffset)
73			     __field(u32, flags)
74			     ),
75
76	    TP_fast_assign(
77			   __entry->soffset = bo_va->it.start;
78			   __entry->eoffset = bo_va->it.last + 1;
79			   __entry->flags = bo_va->flags;
80			   ),
81	    TP_printk("soffs=%010llx, eoffs=%010llx, flags=%08x",
82		      __entry->soffset, __entry->eoffset, __entry->flags)
83);
84
85TRACE_EVENT(radeon_vm_set_page,
86	    TP_PROTO(uint64_t pe, uint64_t addr, unsigned count,
87		     uint32_t incr, uint32_t flags),
88	    TP_ARGS(pe, addr, count, incr, flags),
89	    TP_STRUCT__entry(
90			     __field(u64, pe)
91			     __field(u64, addr)
92			     __field(u32, count)
93			     __field(u32, incr)
94			     __field(u32, flags)
95			     ),
96
97	    TP_fast_assign(
98			   __entry->pe = pe;
99			   __entry->addr = addr;
100			   __entry->count = count;
101			   __entry->incr = incr;
102			   __entry->flags = flags;
103			   ),
104	    TP_printk("pe=%010Lx, addr=%010Lx, incr=%u, flags=%08x, count=%u",
105		      __entry->pe, __entry->addr, __entry->incr,
106		      __entry->flags, __entry->count)
107);
108
109TRACE_EVENT(radeon_vm_flush,
110	    TP_PROTO(uint64_t pd_addr, unsigned ring, unsigned id),
111	    TP_ARGS(pd_addr, ring, id),
112	    TP_STRUCT__entry(
113			     __field(u64, pd_addr)
114			     __field(u32, ring)
115			     __field(u32, id)
116			     ),
117
118	    TP_fast_assign(
119			   __entry->pd_addr = pd_addr;
120			   __entry->ring = ring;
121			   __entry->id = id;
122			   ),
123	    TP_printk("pd_addr=%010Lx, ring=%u, id=%u",
124		      __entry->pd_addr, __entry->ring, __entry->id)
125);
126
127DECLARE_EVENT_CLASS(radeon_fence_request,
128
129	    TP_PROTO(struct drm_device *dev, int ring, u32 seqno),
130
131	    TP_ARGS(dev, ring, seqno),
132
133	    TP_STRUCT__entry(
134			     __field(u32, dev)
135			     __field(int, ring)
136			     __field(u32, seqno)
137			     ),
138
139	    TP_fast_assign(
140			   __entry->dev = dev->primary->index;
141			   __entry->ring = ring;
142			   __entry->seqno = seqno;
143			   ),
144
145	    TP_printk("dev=%u, ring=%d, seqno=%u",
146		      __entry->dev, __entry->ring, __entry->seqno)
147);
148
149DEFINE_EVENT(radeon_fence_request, radeon_fence_emit,
150
151	    TP_PROTO(struct drm_device *dev, int ring, u32 seqno),
152
153	    TP_ARGS(dev, ring, seqno)
154);
155
156DEFINE_EVENT(radeon_fence_request, radeon_fence_wait_begin,
157
158	    TP_PROTO(struct drm_device *dev, int ring, u32 seqno),
159
160	    TP_ARGS(dev, ring, seqno)
161);
162
163DEFINE_EVENT(radeon_fence_request, radeon_fence_wait_end,
164
165	    TP_PROTO(struct drm_device *dev, int ring, u32 seqno),
166
167	    TP_ARGS(dev, ring, seqno)
168);
169
170DECLARE_EVENT_CLASS(radeon_semaphore_request,
171
172	    TP_PROTO(int ring, struct radeon_semaphore *sem),
173
174	    TP_ARGS(ring, sem),
175
176	    TP_STRUCT__entry(
177			     __field(int, ring)
178			     __field(signed, waiters)
179			     __field(uint64_t, gpu_addr)
180			     ),
181
182	    TP_fast_assign(
183			   __entry->ring = ring;
184			   __entry->waiters = sem->waiters;
185			   __entry->gpu_addr = sem->gpu_addr;
186			   ),
187
188	    TP_printk("ring=%u, waiters=%d, addr=%010Lx", __entry->ring,
189		      __entry->waiters, __entry->gpu_addr)
190);
191
192DEFINE_EVENT(radeon_semaphore_request, radeon_semaphore_signale,
193
194	    TP_PROTO(int ring, struct radeon_semaphore *sem),
195
196	    TP_ARGS(ring, sem)
197);
198
199DEFINE_EVENT(radeon_semaphore_request, radeon_semaphore_wait,
200
201	    TP_PROTO(int ring, struct radeon_semaphore *sem),
202
203	    TP_ARGS(ring, sem)
204);
205
206#endif
207
208/* This part must be outside protection */
209#undef TRACE_INCLUDE_PATH
210#define TRACE_INCLUDE_PATH ../../drivers/gpu/drm/radeon
211#include <trace/define_trace.h>
212