1 /* SPDX-License-Identifier: GPL-2.0 */
2 #if !defined(_MSM_GPU_TRACE_H_) || defined(TRACE_HEADER_MULTI_READ)
3 #define _MSM_GPU_TRACE_H_
4 
5 #include <linux/tracepoint.h>
6 
7 #undef TRACE_SYSTEM
8 #define TRACE_SYSTEM drm_msm_gpu
9 #define TRACE_INCLUDE_FILE msm_gpu_trace
10 
11 TRACE_EVENT(msm_gpu_submit,
12 	    TP_PROTO(pid_t pid, u32 ringid, u32 id, u32 nr_bos, u32 nr_cmds),
13 	    TP_ARGS(pid, ringid, id, nr_bos, nr_cmds),
14 	    TP_STRUCT__entry(
15 		    __field(pid_t, pid)
16 		    __field(u32, id)
17 		    __field(u32, ringid)
18 		    __field(u32, nr_cmds)
19 		    __field(u32, nr_bos)
20 		    ),
21 	    TP_fast_assign(
22 		    __entry->pid = pid;
23 		    __entry->id = id;
24 		    __entry->ringid = ringid;
25 		    __entry->nr_bos = nr_bos;
26 		    __entry->nr_cmds = nr_cmds
27 		    ),
28 	    TP_printk("id=%d pid=%d ring=%d bos=%d cmds=%d",
29 		    __entry->id, __entry->pid, __entry->ringid,
30 		    __entry->nr_bos, __entry->nr_cmds)
31 );
32 
33 TRACE_EVENT(msm_gpu_submit_flush,
34 	    TP_PROTO(struct msm_gem_submit *submit, u64 ticks),
35 	    TP_ARGS(submit, ticks),
36 	    TP_STRUCT__entry(
37 		    __field(pid_t, pid)
38 		    __field(u32, id)
39 		    __field(u32, ringid)
40 		    __field(u32, seqno)
41 		    __field(u64, ticks)
42 		    ),
43 	    TP_fast_assign(
44 		    __entry->pid = pid_nr(submit->pid);
45 		    __entry->id = submit->ident;
46 		    __entry->ringid = submit->ring->id;
47 		    __entry->seqno = submit->seqno;
48 		    __entry->ticks = ticks;
49 		    ),
50 	    TP_printk("id=%d pid=%d ring=%d:%d ticks=%lld",
51 		    __entry->id, __entry->pid, __entry->ringid, __entry->seqno,
52 		    __entry->ticks)
53 );
54 
55 
56 TRACE_EVENT(msm_gpu_submit_retired,
57 	    TP_PROTO(struct msm_gem_submit *submit, u64 elapsed, u64 clock,
58 		    u64 start, u64 end),
59 	    TP_ARGS(submit, elapsed, clock, start, end),
60 	    TP_STRUCT__entry(
61 		    __field(pid_t, pid)
62 		    __field(u32, id)
63 		    __field(u32, ringid)
64 		    __field(u32, seqno)
65 		    __field(u64, elapsed)
66 		    __field(u64, clock)
67 		    __field(u64, start_ticks)
68 		    __field(u64, end_ticks)
69 		    ),
70 	    TP_fast_assign(
71 		    __entry->pid = pid_nr(submit->pid);
72 		    __entry->id = submit->ident;
73 		    __entry->ringid = submit->ring->id;
74 		    __entry->seqno = submit->seqno;
75 		    __entry->elapsed = elapsed;
76 		    __entry->clock = clock;
77 		    __entry->start_ticks = start;
78 		    __entry->end_ticks = end;
79 		    ),
80 	    TP_printk("id=%d pid=%d ring=%d:%d elapsed=%lld ns mhz=%lld start=%lld end=%lld",
81 		    __entry->id, __entry->pid, __entry->ringid, __entry->seqno,
82 		    __entry->elapsed, __entry->clock,
83 		    __entry->start_ticks, __entry->end_ticks)
84 );
85 
86 
87 TRACE_EVENT(msm_gpu_freq_change,
88 		TP_PROTO(u32 freq),
89 		TP_ARGS(freq),
90 		TP_STRUCT__entry(
91 			__field(u32, freq)
92 			),
93 		TP_fast_assign(
94 			/* trace freq in MHz to match intel_gpu_freq_change, to make life easier
95 			 * for userspace
96 			 */
97 			__entry->freq = DIV_ROUND_UP(freq, 1000000);
98 			),
99 		TP_printk("new_freq=%u", __entry->freq)
100 );
101 
102 
103 TRACE_EVENT(msm_gmu_freq_change,
104 		TP_PROTO(u32 freq, u32 perf_index),
105 		TP_ARGS(freq, perf_index),
106 		TP_STRUCT__entry(
107 			__field(u32, freq)
108 			__field(u32, perf_index)
109 			),
110 		TP_fast_assign(
111 			__entry->freq = freq;
112 			__entry->perf_index = perf_index;
113 			),
114 		TP_printk("freq=%u, perf_index=%u", __entry->freq, __entry->perf_index)
115 );
116 
117 
118 TRACE_EVENT(msm_gem_purge,
119 		TP_PROTO(u32 bytes),
120 		TP_ARGS(bytes),
121 		TP_STRUCT__entry(
122 			__field(u32, bytes)
123 			),
124 		TP_fast_assign(
125 			__entry->bytes = bytes;
126 			),
127 		TP_printk("Purging %u bytes", __entry->bytes)
128 );
129 
130 
131 TRACE_EVENT(msm_gem_evict,
132 		TP_PROTO(u32 bytes),
133 		TP_ARGS(bytes),
134 		TP_STRUCT__entry(
135 			__field(u32, bytes)
136 			),
137 		TP_fast_assign(
138 			__entry->bytes = bytes;
139 			),
140 		TP_printk("Evicting %u bytes", __entry->bytes)
141 );
142 
143 
144 TRACE_EVENT(msm_gem_purge_vmaps,
145 		TP_PROTO(u32 unmapped),
146 		TP_ARGS(unmapped),
147 		TP_STRUCT__entry(
148 			__field(u32, unmapped)
149 			),
150 		TP_fast_assign(
151 			__entry->unmapped = unmapped;
152 			),
153 		TP_printk("Purging %u vmaps", __entry->unmapped)
154 );
155 
156 
157 TRACE_EVENT(msm_gpu_suspend,
158 		TP_PROTO(int dummy),
159 		TP_ARGS(dummy),
160 		TP_STRUCT__entry(
161 			__field(u32, dummy)
162 			),
163 		TP_fast_assign(
164 			__entry->dummy = dummy;
165 			),
166 		TP_printk("%u", __entry->dummy)
167 );
168 
169 
170 TRACE_EVENT(msm_gpu_resume,
171 		TP_PROTO(int dummy),
172 		TP_ARGS(dummy),
173 		TP_STRUCT__entry(
174 			__field(u32, dummy)
175 			),
176 		TP_fast_assign(
177 			__entry->dummy = dummy;
178 			),
179 		TP_printk("%u", __entry->dummy)
180 );
181 
182 #endif
183 
184 #undef TRACE_INCLUDE_PATH
185 #define TRACE_INCLUDE_PATH ../../drivers/gpu/drm/msm
186 #include <trace/define_trace.h>
187