14241db42SJordan Crouse /* SPDX-License-Identifier: GPL-2.0 */
24241db42SJordan Crouse #if !defined(_MSM_GPU_TRACE_H_) || defined(TRACE_HEADER_MULTI_READ)
34241db42SJordan Crouse #define _MSM_GPU_TRACE_H_
44241db42SJordan Crouse 
54241db42SJordan Crouse #include <linux/tracepoint.h>
64241db42SJordan Crouse 
74241db42SJordan Crouse #undef TRACE_SYSTEM
8d934a712SRob Clark #define TRACE_SYSTEM drm_msm_gpu
94241db42SJordan Crouse #define TRACE_INCLUDE_FILE msm_gpu_trace
104241db42SJordan Crouse 
114241db42SJordan Crouse TRACE_EVENT(msm_gpu_submit,
124241db42SJordan Crouse 	    TP_PROTO(pid_t pid, u32 ringid, u32 id, u32 nr_bos, u32 nr_cmds),
134241db42SJordan Crouse 	    TP_ARGS(pid, ringid, id, nr_bos, nr_cmds),
144241db42SJordan Crouse 	    TP_STRUCT__entry(
154241db42SJordan Crouse 		    __field(pid_t, pid)
164241db42SJordan Crouse 		    __field(u32, id)
174241db42SJordan Crouse 		    __field(u32, ringid)
184241db42SJordan Crouse 		    __field(u32, nr_cmds)
194241db42SJordan Crouse 		    __field(u32, nr_bos)
204241db42SJordan Crouse 		    ),
214241db42SJordan Crouse 	    TP_fast_assign(
224241db42SJordan Crouse 		    __entry->pid = pid;
234241db42SJordan Crouse 		    __entry->id = id;
244241db42SJordan Crouse 		    __entry->ringid = ringid;
254241db42SJordan Crouse 		    __entry->nr_bos = nr_bos;
264241db42SJordan Crouse 		    __entry->nr_cmds = nr_cmds
274241db42SJordan Crouse 		    ),
284241db42SJordan Crouse 	    TP_printk("id=%d pid=%d ring=%d bos=%d cmds=%d",
294241db42SJordan Crouse 		    __entry->id, __entry->pid, __entry->ringid,
304241db42SJordan Crouse 		    __entry->nr_bos, __entry->nr_cmds)
314241db42SJordan Crouse );
324241db42SJordan Crouse 
334241db42SJordan Crouse TRACE_EVENT(msm_gpu_submit_flush,
344241db42SJordan Crouse 	    TP_PROTO(struct msm_gem_submit *submit, u64 ticks),
354241db42SJordan Crouse 	    TP_ARGS(submit, ticks),
364241db42SJordan Crouse 	    TP_STRUCT__entry(
374241db42SJordan Crouse 		    __field(pid_t, pid)
384241db42SJordan Crouse 		    __field(u32, id)
394241db42SJordan Crouse 		    __field(u32, ringid)
404241db42SJordan Crouse 		    __field(u32, seqno)
414241db42SJordan Crouse 		    __field(u64, ticks)
424241db42SJordan Crouse 		    ),
434241db42SJordan Crouse 	    TP_fast_assign(
444241db42SJordan Crouse 		    __entry->pid = pid_nr(submit->pid);
454241db42SJordan Crouse 		    __entry->id = submit->ident;
464241db42SJordan Crouse 		    __entry->ringid = submit->ring->id;
474241db42SJordan Crouse 		    __entry->seqno = submit->seqno;
484241db42SJordan Crouse 		    __entry->ticks = ticks;
494241db42SJordan Crouse 		    ),
504241db42SJordan Crouse 	    TP_printk("id=%d pid=%d ring=%d:%d ticks=%lld",
514241db42SJordan Crouse 		    __entry->id, __entry->pid, __entry->ringid, __entry->seqno,
524241db42SJordan Crouse 		    __entry->ticks)
534241db42SJordan Crouse );
544241db42SJordan Crouse 
554241db42SJordan Crouse 
564241db42SJordan Crouse TRACE_EVENT(msm_gpu_submit_retired,
574241db42SJordan Crouse 	    TP_PROTO(struct msm_gem_submit *submit, u64 elapsed, u64 clock,
584241db42SJordan Crouse 		    u64 start, u64 end),
594241db42SJordan Crouse 	    TP_ARGS(submit, elapsed, clock, start, end),
604241db42SJordan Crouse 	    TP_STRUCT__entry(
614241db42SJordan Crouse 		    __field(pid_t, pid)
624241db42SJordan Crouse 		    __field(u32, id)
634241db42SJordan Crouse 		    __field(u32, ringid)
644241db42SJordan Crouse 		    __field(u32, seqno)
654241db42SJordan Crouse 		    __field(u64, elapsed)
664241db42SJordan Crouse 		    __field(u64, clock)
674241db42SJordan Crouse 		    __field(u64, start_ticks)
684241db42SJordan Crouse 		    __field(u64, end_ticks)
694241db42SJordan Crouse 		    ),
704241db42SJordan Crouse 	    TP_fast_assign(
714241db42SJordan Crouse 		    __entry->pid = pid_nr(submit->pid);
724241db42SJordan Crouse 		    __entry->id = submit->ident;
734241db42SJordan Crouse 		    __entry->ringid = submit->ring->id;
744241db42SJordan Crouse 		    __entry->seqno = submit->seqno;
754241db42SJordan Crouse 		    __entry->elapsed = elapsed;
764241db42SJordan Crouse 		    __entry->clock = clock;
774241db42SJordan Crouse 		    __entry->start_ticks = start;
784241db42SJordan Crouse 		    __entry->end_ticks = end;
794241db42SJordan Crouse 		    ),
804241db42SJordan Crouse 	    TP_printk("id=%d pid=%d ring=%d:%d elapsed=%lld ns mhz=%lld start=%lld end=%lld",
814241db42SJordan Crouse 		    __entry->id, __entry->pid, __entry->ringid, __entry->seqno,
824241db42SJordan Crouse 		    __entry->elapsed, __entry->clock,
834241db42SJordan Crouse 		    __entry->start_ticks, __entry->end_ticks)
844241db42SJordan Crouse );
854241db42SJordan Crouse 
8674c0a69cSRob Clark 
8774c0a69cSRob Clark TRACE_EVENT(msm_gpu_freq_change,
8874c0a69cSRob Clark 		TP_PROTO(u32 freq),
8974c0a69cSRob Clark 		TP_ARGS(freq),
9074c0a69cSRob Clark 		TP_STRUCT__entry(
9174c0a69cSRob Clark 			__field(u32, freq)
9274c0a69cSRob Clark 			),
9374c0a69cSRob Clark 		TP_fast_assign(
9474c0a69cSRob Clark 			/* trace freq in MHz to match intel_gpu_freq_change, to make life easier
9574c0a69cSRob Clark 			 * for userspace
9674c0a69cSRob Clark 			 */
9774c0a69cSRob Clark 			__entry->freq = DIV_ROUND_UP(freq, 1000000);
9874c0a69cSRob Clark 			),
9974c0a69cSRob Clark 		TP_printk("new_freq=%u", __entry->freq)
10074c0a69cSRob Clark );
10174c0a69cSRob Clark 
10274c0a69cSRob Clark 
10374c0a69cSRob Clark TRACE_EVENT(msm_gmu_freq_change,
10474c0a69cSRob Clark 		TP_PROTO(u32 freq, u32 perf_index),
10574c0a69cSRob Clark 		TP_ARGS(freq, perf_index),
10674c0a69cSRob Clark 		TP_STRUCT__entry(
10774c0a69cSRob Clark 			__field(u32, freq)
10874c0a69cSRob Clark 			__field(u32, perf_index)
10974c0a69cSRob Clark 			),
11074c0a69cSRob Clark 		TP_fast_assign(
11174c0a69cSRob Clark 			__entry->freq = freq;
11274c0a69cSRob Clark 			__entry->perf_index = perf_index;
11374c0a69cSRob Clark 			),
11474c0a69cSRob Clark 		TP_printk("freq=%u, perf_index=%u", __entry->freq, __entry->perf_index)
11574c0a69cSRob Clark );
11674c0a69cSRob Clark 
117fdf38426SRob Clark 
118dd2f0d78SRob Clark TRACE_EVENT(msm_gem_shrink,
119*025d2723SRob Clark 		TP_PROTO(u32 nr_to_scan, u32 purged, u32 evicted,
120*025d2723SRob Clark 			 u32 active_purged, u32 active_evicted),
121*025d2723SRob Clark 		TP_ARGS(nr_to_scan, purged, evicted, active_purged, active_evicted),
122fdf38426SRob Clark 		TP_STRUCT__entry(
123dd2f0d78SRob Clark 			__field(u32, nr_to_scan)
124dd2f0d78SRob Clark 			__field(u32, purged)
125dd2f0d78SRob Clark 			__field(u32, evicted)
126*025d2723SRob Clark 			__field(u32, active_purged)
127*025d2723SRob Clark 			__field(u32, active_evicted)
128fdf38426SRob Clark 			),
129fdf38426SRob Clark 		TP_fast_assign(
130dd2f0d78SRob Clark 			__entry->nr_to_scan = nr_to_scan;
131dd2f0d78SRob Clark 			__entry->purged = purged;
132dd2f0d78SRob Clark 			__entry->evicted = evicted;
133*025d2723SRob Clark 			__entry->active_purged = active_purged;
134*025d2723SRob Clark 			__entry->active_evicted = active_evicted;
135fdf38426SRob Clark 			),
136*025d2723SRob Clark 		TP_printk("nr_to_scan=%u pg, purged=%u pg, evicted=%u pg, active_purged=%u pg, active_evicted=%u pg",
137*025d2723SRob Clark 			  __entry->nr_to_scan, __entry->purged, __entry->evicted,
138*025d2723SRob Clark 			  __entry->active_purged, __entry->active_evicted)
13963f17ef8SRob Clark );
14063f17ef8SRob Clark 
14163f17ef8SRob Clark 
142fdf38426SRob Clark TRACE_EVENT(msm_gem_purge_vmaps,
143fdf38426SRob Clark 		TP_PROTO(u32 unmapped),
144fdf38426SRob Clark 		TP_ARGS(unmapped),
145fdf38426SRob Clark 		TP_STRUCT__entry(
146fdf38426SRob Clark 			__field(u32, unmapped)
147fdf38426SRob Clark 			),
148fdf38426SRob Clark 		TP_fast_assign(
149fdf38426SRob Clark 			__entry->unmapped = unmapped;
150fdf38426SRob Clark 			),
151fdf38426SRob Clark 		TP_printk("Purging %u vmaps", __entry->unmapped)
152fdf38426SRob Clark );
153fdf38426SRob Clark 
154ec1cb6e4SRob Clark 
155ec1cb6e4SRob Clark TRACE_EVENT(msm_gpu_suspend,
156ec1cb6e4SRob Clark 		TP_PROTO(int dummy),
157ec1cb6e4SRob Clark 		TP_ARGS(dummy),
158ec1cb6e4SRob Clark 		TP_STRUCT__entry(
159ec1cb6e4SRob Clark 			__field(u32, dummy)
160ec1cb6e4SRob Clark 			),
161ec1cb6e4SRob Clark 		TP_fast_assign(
162ec1cb6e4SRob Clark 			__entry->dummy = dummy;
163ec1cb6e4SRob Clark 			),
164ec1cb6e4SRob Clark 		TP_printk("%u", __entry->dummy)
165ec1cb6e4SRob Clark );
166ec1cb6e4SRob Clark 
167ec1cb6e4SRob Clark 
168ec1cb6e4SRob Clark TRACE_EVENT(msm_gpu_resume,
169ec1cb6e4SRob Clark 		TP_PROTO(int dummy),
170ec1cb6e4SRob Clark 		TP_ARGS(dummy),
171ec1cb6e4SRob Clark 		TP_STRUCT__entry(
172ec1cb6e4SRob Clark 			__field(u32, dummy)
173ec1cb6e4SRob Clark 			),
174ec1cb6e4SRob Clark 		TP_fast_assign(
175ec1cb6e4SRob Clark 			__entry->dummy = dummy;
176ec1cb6e4SRob Clark 			),
177ec1cb6e4SRob Clark 		TP_printk("%u", __entry->dummy)
178ec1cb6e4SRob Clark );
179ec1cb6e4SRob Clark 
1804241db42SJordan Crouse #endif
1814241db42SJordan Crouse 
1824241db42SJordan Crouse #undef TRACE_INCLUDE_PATH
1834241db42SJordan Crouse #define TRACE_INCLUDE_PATH ../../drivers/gpu/drm/msm
1844241db42SJordan Crouse #include <trace/define_trace.h>
185