xref: /OK3568_Linux_fs/kernel/drivers/gpu/arm/midgard/mali_kbase_tlstream.h (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1*4882a593Smuzhiyun /*
2*4882a593Smuzhiyun  *
3*4882a593Smuzhiyun  * (C) COPYRIGHT 2015-2017 ARM Limited. All rights reserved.
4*4882a593Smuzhiyun  *
5*4882a593Smuzhiyun  * This program is free software and is provided to you under the terms of the
6*4882a593Smuzhiyun  * GNU General Public License version 2 as published by the Free Software
7*4882a593Smuzhiyun  * Foundation, and any use by you of this program is subject to the terms
8*4882a593Smuzhiyun  * of such GNU licence.
9*4882a593Smuzhiyun  *
10*4882a593Smuzhiyun  * A copy of the licence is included with the program, and can also be obtained
11*4882a593Smuzhiyun  * from Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
12*4882a593Smuzhiyun  * Boston, MA  02110-1301, USA.
13*4882a593Smuzhiyun  *
14*4882a593Smuzhiyun  */
15*4882a593Smuzhiyun 
16*4882a593Smuzhiyun 
17*4882a593Smuzhiyun 
18*4882a593Smuzhiyun #if !defined(_KBASE_TLSTREAM_H)
19*4882a593Smuzhiyun #define _KBASE_TLSTREAM_H
20*4882a593Smuzhiyun 
21*4882a593Smuzhiyun #include <mali_kbase.h>
22*4882a593Smuzhiyun 
23*4882a593Smuzhiyun /*****************************************************************************/
24*4882a593Smuzhiyun 
25*4882a593Smuzhiyun /**
26*4882a593Smuzhiyun  * kbase_tlstream_init - initialize timeline infrastructure in kernel
27*4882a593Smuzhiyun  * Return: zero on success, negative number on error
28*4882a593Smuzhiyun  */
29*4882a593Smuzhiyun int kbase_tlstream_init(void);
30*4882a593Smuzhiyun 
31*4882a593Smuzhiyun /**
32*4882a593Smuzhiyun  * kbase_tlstream_term - terminate timeline infrastructure in kernel
33*4882a593Smuzhiyun  *
34*4882a593Smuzhiyun  * Timeline need have to been previously enabled with kbase_tlstream_init().
35*4882a593Smuzhiyun  */
36*4882a593Smuzhiyun void kbase_tlstream_term(void);
37*4882a593Smuzhiyun 
38*4882a593Smuzhiyun /**
39*4882a593Smuzhiyun  * kbase_tlstream_acquire - acquire timeline stream file descriptor
40*4882a593Smuzhiyun  * @kctx:  kernel common context
41*4882a593Smuzhiyun  * @flags: timeline stream flags
42*4882a593Smuzhiyun  *
43*4882a593Smuzhiyun  * This descriptor is meant to be used by userspace timeline to gain access to
44*4882a593Smuzhiyun  * kernel timeline stream. This stream is later broadcasted by user space to the
45*4882a593Smuzhiyun  * timeline client.
46*4882a593Smuzhiyun  * Only one entity can own the descriptor at any given time. Descriptor shall be
47*4882a593Smuzhiyun  * closed if unused. If descriptor cannot be obtained (i.e. when it is already
48*4882a593Smuzhiyun  * being used) return will be a negative value.
49*4882a593Smuzhiyun  *
50*4882a593Smuzhiyun  * Return: file descriptor on success, negative number on error
51*4882a593Smuzhiyun  */
52*4882a593Smuzhiyun int kbase_tlstream_acquire(struct kbase_context *kctx, u32 flags);
53*4882a593Smuzhiyun 
54*4882a593Smuzhiyun /**
55*4882a593Smuzhiyun  * kbase_tlstream_flush_streams - flush timeline streams.
56*4882a593Smuzhiyun  *
57*4882a593Smuzhiyun  * Function will flush pending data in all timeline streams.
58*4882a593Smuzhiyun  */
59*4882a593Smuzhiyun void kbase_tlstream_flush_streams(void);
60*4882a593Smuzhiyun 
61*4882a593Smuzhiyun /**
62*4882a593Smuzhiyun  * kbase_tlstream_reset_body_streams - reset timeline body streams.
63*4882a593Smuzhiyun  *
64*4882a593Smuzhiyun  * Function will discard pending data in all timeline body streams.
65*4882a593Smuzhiyun  */
66*4882a593Smuzhiyun void kbase_tlstream_reset_body_streams(void);
67*4882a593Smuzhiyun 
68*4882a593Smuzhiyun #if MALI_UNIT_TEST
69*4882a593Smuzhiyun /**
70*4882a593Smuzhiyun  * kbase_tlstream_test - start timeline stream data generator
71*4882a593Smuzhiyun  * @tpw_count: number of trace point writers in each context
72*4882a593Smuzhiyun  * @msg_delay: time delay in milliseconds between trace points written by one
73*4882a593Smuzhiyun  *             writer
74*4882a593Smuzhiyun  * @msg_count: number of trace points written by one writer
75*4882a593Smuzhiyun  * @aux_msg:   if non-zero aux messages will be included
76*4882a593Smuzhiyun  *
77*4882a593Smuzhiyun  * This test starts a requested number of asynchronous writers in both IRQ and
78*4882a593Smuzhiyun  * thread context. Each writer will generate required number of test
79*4882a593Smuzhiyun  * tracepoints (tracepoints with embedded information about writer that
80*4882a593Smuzhiyun  * should be verified by user space reader). Tracepoints will be emitted in
81*4882a593Smuzhiyun  * all timeline body streams. If aux_msg is non-zero writer will also
82*4882a593Smuzhiyun  * generate not testable tracepoints (tracepoints without information about
83*4882a593Smuzhiyun  * writer). These tracepoints are used to check correctness of remaining
84*4882a593Smuzhiyun  * timeline message generating functions. Writer will wait requested time
85*4882a593Smuzhiyun  * between generating another set of messages. This call blocks until all
86*4882a593Smuzhiyun  * writers finish.
87*4882a593Smuzhiyun  */
88*4882a593Smuzhiyun void kbase_tlstream_test(
89*4882a593Smuzhiyun 		unsigned int tpw_count,
90*4882a593Smuzhiyun 		unsigned int msg_delay,
91*4882a593Smuzhiyun 		unsigned int msg_count,
92*4882a593Smuzhiyun 		int          aux_msg);
93*4882a593Smuzhiyun 
94*4882a593Smuzhiyun /**
95*4882a593Smuzhiyun  * kbase_tlstream_stats - read timeline stream statistics
96*4882a593Smuzhiyun  * @bytes_collected: will hold number of bytes read by the user
97*4882a593Smuzhiyun  * @bytes_generated: will hold number of bytes generated by trace points
98*4882a593Smuzhiyun  */
99*4882a593Smuzhiyun void kbase_tlstream_stats(u32 *bytes_collected, u32 *bytes_generated);
100*4882a593Smuzhiyun #endif /* MALI_UNIT_TEST */
101*4882a593Smuzhiyun 
102*4882a593Smuzhiyun /*****************************************************************************/
103*4882a593Smuzhiyun 
104*4882a593Smuzhiyun #define TL_ATOM_STATE_IDLE 0
105*4882a593Smuzhiyun #define TL_ATOM_STATE_READY 1
106*4882a593Smuzhiyun #define TL_ATOM_STATE_DONE 2
107*4882a593Smuzhiyun #define TL_ATOM_STATE_POSTED 3
108*4882a593Smuzhiyun 
109*4882a593Smuzhiyun void __kbase_tlstream_tl_summary_new_ctx(void *context, u32 nr, u32 tgid);
110*4882a593Smuzhiyun void __kbase_tlstream_tl_summary_new_gpu(void *gpu, u32 id, u32 core_count);
111*4882a593Smuzhiyun void __kbase_tlstream_tl_summary_new_lpu(void *lpu, u32 nr, u32 fn);
112*4882a593Smuzhiyun void __kbase_tlstream_tl_summary_lifelink_lpu_gpu(void *lpu, void *gpu);
113*4882a593Smuzhiyun void __kbase_tlstream_tl_summary_new_as(void *as, u32 nr);
114*4882a593Smuzhiyun void __kbase_tlstream_tl_summary_lifelink_as_gpu(void *as, void *gpu);
115*4882a593Smuzhiyun void __kbase_tlstream_tl_new_ctx(void *context, u32 nr, u32 tgid);
116*4882a593Smuzhiyun void __kbase_tlstream_tl_new_atom(void *atom, u32 nr);
117*4882a593Smuzhiyun void __kbase_tlstream_tl_del_ctx(void *context);
118*4882a593Smuzhiyun void __kbase_tlstream_tl_del_atom(void *atom);
119*4882a593Smuzhiyun void __kbase_tlstream_tl_ret_ctx_lpu(void *context, void *lpu);
120*4882a593Smuzhiyun void __kbase_tlstream_tl_ret_atom_ctx(void *atom, void *context);
121*4882a593Smuzhiyun void __kbase_tlstream_tl_ret_atom_lpu(
122*4882a593Smuzhiyun 		void *atom, void *lpu, const char *attrib_match_list);
123*4882a593Smuzhiyun void __kbase_tlstream_tl_nret_ctx_lpu(void *context, void *lpu);
124*4882a593Smuzhiyun void __kbase_tlstream_tl_nret_atom_ctx(void *atom, void *context);
125*4882a593Smuzhiyun void __kbase_tlstream_tl_nret_atom_lpu(void *atom, void *lpu);
126*4882a593Smuzhiyun void __kbase_tlstream_tl_ret_as_ctx(void *as, void *ctx);
127*4882a593Smuzhiyun void __kbase_tlstream_tl_nret_as_ctx(void *as, void *ctx);
128*4882a593Smuzhiyun void __kbase_tlstream_tl_ret_atom_as(void *atom, void *as);
129*4882a593Smuzhiyun void __kbase_tlstream_tl_nret_atom_as(void *atom, void *as);
130*4882a593Smuzhiyun void __kbase_tlstream_tl_dep_atom_atom(void *atom1, void *atom2);
131*4882a593Smuzhiyun void __kbase_tlstream_tl_ndep_atom_atom(void *atom1, void *atom2);
132*4882a593Smuzhiyun void __kbase_tlstream_tl_rdep_atom_atom(void *atom1, void *atom2);
133*4882a593Smuzhiyun void __kbase_tlstream_tl_attrib_atom_config(
134*4882a593Smuzhiyun 		void *atom, u64 jd, u64 affinity, u32 config);
135*4882a593Smuzhiyun void __kbase_tlstream_tl_attrib_atom_priority(void *atom, u32 prio);
136*4882a593Smuzhiyun void __kbase_tlstream_tl_attrib_atom_state(void *atom, u32 state);
137*4882a593Smuzhiyun void __kbase_tlstream_tl_attrib_atom_priority_change(void *atom);
138*4882a593Smuzhiyun void __kbase_tlstream_tl_attrib_atom_jit(
139*4882a593Smuzhiyun 		void *atom, u64 edit_addr, u64 new_addr);
140*4882a593Smuzhiyun void __kbase_tlstream_tl_attrib_as_config(
141*4882a593Smuzhiyun 		void *as, u64 transtab, u64 memattr, u64 transcfg);
142*4882a593Smuzhiyun void __kbase_tlstream_tl_event_atom_softstop_ex(void *atom);
143*4882a593Smuzhiyun void __kbase_tlstream_tl_event_lpu_softstop(void *lpu);
144*4882a593Smuzhiyun void __kbase_tlstream_tl_event_atom_softstop_issue(void *atom);
145*4882a593Smuzhiyun void __kbase_tlstream_jd_gpu_soft_reset(void *gpu);
146*4882a593Smuzhiyun void __kbase_tlstream_aux_pm_state(u32 core_type, u64 state);
147*4882a593Smuzhiyun void __kbase_tlstream_aux_pagefault(u32 ctx_nr, u64 page_count_change);
148*4882a593Smuzhiyun void __kbase_tlstream_aux_pagesalloc(u32 ctx_nr, u64 page_count);
149*4882a593Smuzhiyun void __kbase_tlstream_aux_devfreq_target(u64 target_freq);
150*4882a593Smuzhiyun void __kbase_tlstream_aux_protected_enter_start(void *gpu);
151*4882a593Smuzhiyun void __kbase_tlstream_aux_protected_enter_end(void *gpu);
152*4882a593Smuzhiyun void __kbase_tlstream_aux_protected_leave_start(void *gpu);
153*4882a593Smuzhiyun void __kbase_tlstream_aux_protected_leave_end(void *gpu);
154*4882a593Smuzhiyun 
155*4882a593Smuzhiyun #define TLSTREAM_ENABLED (1 << 31)
156*4882a593Smuzhiyun 
157*4882a593Smuzhiyun extern atomic_t kbase_tlstream_enabled;
158*4882a593Smuzhiyun 
159*4882a593Smuzhiyun #define __TRACE_IF_ENABLED(trace_name, ...)                         \
160*4882a593Smuzhiyun 	do {                                                        \
161*4882a593Smuzhiyun 		int enabled = atomic_read(&kbase_tlstream_enabled); \
162*4882a593Smuzhiyun 		if (enabled & TLSTREAM_ENABLED)                     \
163*4882a593Smuzhiyun 			__kbase_tlstream_##trace_name(__VA_ARGS__); \
164*4882a593Smuzhiyun 	} while (0)
165*4882a593Smuzhiyun 
166*4882a593Smuzhiyun #define __TRACE_IF_ENABLED_LATENCY(trace_name, ...)                     \
167*4882a593Smuzhiyun 	do {                                                            \
168*4882a593Smuzhiyun 		int enabled = atomic_read(&kbase_tlstream_enabled);     \
169*4882a593Smuzhiyun 		if (enabled & BASE_TLSTREAM_ENABLE_LATENCY_TRACEPOINTS) \
170*4882a593Smuzhiyun 			__kbase_tlstream_##trace_name(__VA_ARGS__);     \
171*4882a593Smuzhiyun 	} while (0)
172*4882a593Smuzhiyun 
173*4882a593Smuzhiyun #define __TRACE_IF_ENABLED_JD(trace_name, ...)                      \
174*4882a593Smuzhiyun 	do {                                                        \
175*4882a593Smuzhiyun 		int enabled = atomic_read(&kbase_tlstream_enabled); \
176*4882a593Smuzhiyun 		if (enabled & BASE_TLSTREAM_JOB_DUMPING_ENABLED)    \
177*4882a593Smuzhiyun 			__kbase_tlstream_##trace_name(__VA_ARGS__); \
178*4882a593Smuzhiyun 	} while (0)
179*4882a593Smuzhiyun 
180*4882a593Smuzhiyun /*****************************************************************************/
181*4882a593Smuzhiyun 
182*4882a593Smuzhiyun /**
183*4882a593Smuzhiyun  * KBASE_TLSTREAM_TL_SUMMARY_NEW_CTX - create context object in timeline
184*4882a593Smuzhiyun  *                                     summary
185*4882a593Smuzhiyun  * @context: name of the context object
186*4882a593Smuzhiyun  * @nr:      context number
187*4882a593Smuzhiyun  * @tgid:    thread Group Id
188*4882a593Smuzhiyun  *
189*4882a593Smuzhiyun  * Function emits a timeline message informing about context creation. Context
190*4882a593Smuzhiyun  * is created with context number (its attribute), that can be used to link
191*4882a593Smuzhiyun  * kbase context with userspace context.
192*4882a593Smuzhiyun  * This message is directed to timeline summary stream.
193*4882a593Smuzhiyun  */
194*4882a593Smuzhiyun #define KBASE_TLSTREAM_TL_SUMMARY_NEW_CTX(context, nr, tgid) \
195*4882a593Smuzhiyun 	__TRACE_IF_ENABLED(tl_summary_new_ctx, context, nr, tgid)
196*4882a593Smuzhiyun 
197*4882a593Smuzhiyun /**
198*4882a593Smuzhiyun  * KBASE_TLSTREAM_TL_SUMMARY_NEW_GPU - create GPU object in timeline summary
199*4882a593Smuzhiyun  * @gpu:        name of the GPU object
200*4882a593Smuzhiyun  * @id:         id value of this GPU
201*4882a593Smuzhiyun  * @core_count: number of cores this GPU hosts
202*4882a593Smuzhiyun  *
203*4882a593Smuzhiyun  * Function emits a timeline message informing about GPU creation. GPU is
204*4882a593Smuzhiyun  * created with two attributes: id and core count.
205*4882a593Smuzhiyun  * This message is directed to timeline summary stream.
206*4882a593Smuzhiyun  */
207*4882a593Smuzhiyun #define KBASE_TLSTREAM_TL_SUMMARY_NEW_GPU(gpu, id, core_count) \
208*4882a593Smuzhiyun 	__TRACE_IF_ENABLED(tl_summary_new_gpu, gpu, id, core_count)
209*4882a593Smuzhiyun 
210*4882a593Smuzhiyun /**
211*4882a593Smuzhiyun  * KBASE_TLSTREAM_TL_SUMMARY_NEW_LPU - create LPU object in timeline summary
212*4882a593Smuzhiyun  * @lpu: name of the Logical Processing Unit object
213*4882a593Smuzhiyun  * @nr:  sequential number assigned to this LPU
214*4882a593Smuzhiyun  * @fn:  property describing this LPU's functional abilities
215*4882a593Smuzhiyun  *
216*4882a593Smuzhiyun  * Function emits a timeline message informing about LPU creation. LPU is
217*4882a593Smuzhiyun  * created with two attributes: number linking this LPU with GPU's job slot
218*4882a593Smuzhiyun  * and function bearing information about this LPU abilities.
219*4882a593Smuzhiyun  * This message is directed to timeline summary stream.
220*4882a593Smuzhiyun  */
221*4882a593Smuzhiyun #define KBASE_TLSTREAM_TL_SUMMARY_NEW_LPU(lpu, nr, fn) \
222*4882a593Smuzhiyun 	__TRACE_IF_ENABLED(tl_summary_new_lpu, lpu, nr, fn)
223*4882a593Smuzhiyun 
224*4882a593Smuzhiyun /**
225*4882a593Smuzhiyun  * KBASE_TLSTREAM_TL_SUMMARY_LIFELINK_LPU_GPU - lifelink LPU object to GPU
226*4882a593Smuzhiyun  * @lpu: name of the Logical Processing Unit object
227*4882a593Smuzhiyun  * @gpu: name of the GPU object
228*4882a593Smuzhiyun  *
229*4882a593Smuzhiyun  * Function emits a timeline message informing that LPU object shall be deleted
230*4882a593Smuzhiyun  * along with GPU object.
231*4882a593Smuzhiyun  * This message is directed to timeline summary stream.
232*4882a593Smuzhiyun  */
233*4882a593Smuzhiyun #define KBASE_TLSTREAM_TL_SUMMARY_LIFELINK_LPU_GPU(lpu, gpu) \
234*4882a593Smuzhiyun 	__TRACE_IF_ENABLED(tl_summary_lifelink_lpu_gpu, lpu, gpu)
235*4882a593Smuzhiyun 
236*4882a593Smuzhiyun /**
237*4882a593Smuzhiyun  * KBASE_TLSTREAM_TL_SUMMARY_NEW_AS - create address space object in timeline summary
238*4882a593Smuzhiyun  * @as: name of the address space object
239*4882a593Smuzhiyun  * @nr: sequential number assigned to this address space
240*4882a593Smuzhiyun  *
241*4882a593Smuzhiyun  * Function emits a timeline message informing about address space creation.
242*4882a593Smuzhiyun  * Address space is created with one attribute: number identifying this
243*4882a593Smuzhiyun  * address space.
244*4882a593Smuzhiyun  * This message is directed to timeline summary stream.
245*4882a593Smuzhiyun  */
246*4882a593Smuzhiyun #define KBASE_TLSTREAM_TL_SUMMARY_NEW_AS(as, nr) \
247*4882a593Smuzhiyun 	__TRACE_IF_ENABLED(tl_summary_new_as, as, nr)
248*4882a593Smuzhiyun 
249*4882a593Smuzhiyun /**
250*4882a593Smuzhiyun  * KBASE_TLSTREAM_TL_SUMMARY_LIFELINK_AS_GPU - lifelink address space object to GPU
251*4882a593Smuzhiyun  * @as:  name of the address space object
252*4882a593Smuzhiyun  * @gpu: name of the GPU object
253*4882a593Smuzhiyun  *
254*4882a593Smuzhiyun  * Function emits a timeline message informing that address space object
255*4882a593Smuzhiyun  * shall be deleted along with GPU object.
256*4882a593Smuzhiyun  * This message is directed to timeline summary stream.
257*4882a593Smuzhiyun  */
258*4882a593Smuzhiyun #define KBASE_TLSTREAM_TL_SUMMARY_LIFELINK_AS_GPU(as, gpu) \
259*4882a593Smuzhiyun 	__TRACE_IF_ENABLED(tl_summary_lifelink_as_gpu, as, gpu)
260*4882a593Smuzhiyun 
261*4882a593Smuzhiyun /**
262*4882a593Smuzhiyun  * KBASE_TLSTREAM_TL_NEW_CTX - create context object in timeline
263*4882a593Smuzhiyun  * @context: name of the context object
264*4882a593Smuzhiyun  * @nr:      context number
265*4882a593Smuzhiyun  * @tgid:    thread Group Id
266*4882a593Smuzhiyun  *
267*4882a593Smuzhiyun  * Function emits a timeline message informing about context creation. Context
268*4882a593Smuzhiyun  * is created with context number (its attribute), that can be used to link
269*4882a593Smuzhiyun  * kbase context with userspace context.
270*4882a593Smuzhiyun  */
271*4882a593Smuzhiyun #define KBASE_TLSTREAM_TL_NEW_CTX(context, nr, tgid) \
272*4882a593Smuzhiyun 	__TRACE_IF_ENABLED(tl_new_ctx, context, nr, tgid)
273*4882a593Smuzhiyun 
274*4882a593Smuzhiyun /**
275*4882a593Smuzhiyun  * KBASE_TLSTREAM_TL_NEW_ATOM - create atom object in timeline
276*4882a593Smuzhiyun  * @atom: name of the atom object
277*4882a593Smuzhiyun  * @nr:   sequential number assigned to this atom
278*4882a593Smuzhiyun  *
279*4882a593Smuzhiyun  * Function emits a timeline message informing about atom creation. Atom is
280*4882a593Smuzhiyun  * created with atom number (its attribute) that links it with actual work
281*4882a593Smuzhiyun  * bucket id understood by hardware.
282*4882a593Smuzhiyun  */
283*4882a593Smuzhiyun #define KBASE_TLSTREAM_TL_NEW_ATOM(atom, nr) \
284*4882a593Smuzhiyun 	__TRACE_IF_ENABLED(tl_new_atom, atom, nr)
285*4882a593Smuzhiyun 
286*4882a593Smuzhiyun /**
287*4882a593Smuzhiyun  * KBASE_TLSTREAM_TL_DEL_CTX - destroy context object in timeline
288*4882a593Smuzhiyun  * @context: name of the context object
289*4882a593Smuzhiyun  *
290*4882a593Smuzhiyun  * Function emits a timeline message informing that context object ceased to
291*4882a593Smuzhiyun  * exist.
292*4882a593Smuzhiyun  */
293*4882a593Smuzhiyun #define KBASE_TLSTREAM_TL_DEL_CTX(context) \
294*4882a593Smuzhiyun 	__TRACE_IF_ENABLED(tl_del_ctx, context)
295*4882a593Smuzhiyun 
296*4882a593Smuzhiyun /**
297*4882a593Smuzhiyun  * KBASE_TLSTREAM_TL_DEL_ATOM - destroy atom object in timeline
298*4882a593Smuzhiyun  * @atom: name of the atom object
299*4882a593Smuzhiyun  *
300*4882a593Smuzhiyun  * Function emits a timeline message informing that atom object ceased to
301*4882a593Smuzhiyun  * exist.
302*4882a593Smuzhiyun  */
303*4882a593Smuzhiyun #define KBASE_TLSTREAM_TL_DEL_ATOM(atom) \
304*4882a593Smuzhiyun 	__TRACE_IF_ENABLED(tl_del_atom, atom)
305*4882a593Smuzhiyun 
306*4882a593Smuzhiyun /**
307*4882a593Smuzhiyun  * KBASE_TLSTREAM_TL_RET_CTX_LPU - retain context by LPU
308*4882a593Smuzhiyun  * @context: name of the context object
309*4882a593Smuzhiyun  * @lpu:     name of the Logical Processing Unit object
310*4882a593Smuzhiyun  *
311*4882a593Smuzhiyun  * Function emits a timeline message informing that context is being held
312*4882a593Smuzhiyun  * by LPU and must not be deleted unless it is released.
313*4882a593Smuzhiyun  */
314*4882a593Smuzhiyun #define KBASE_TLSTREAM_TL_RET_CTX_LPU(context, lpu) \
315*4882a593Smuzhiyun 	__TRACE_IF_ENABLED(tl_ret_ctx_lpu, context, lpu)
316*4882a593Smuzhiyun 
317*4882a593Smuzhiyun /**
318*4882a593Smuzhiyun  * KBASE_TLSTREAM_TL_RET_ATOM_CTX - retain atom by context
319*4882a593Smuzhiyun  * @atom:    name of the atom object
320*4882a593Smuzhiyun  * @context: name of the context object
321*4882a593Smuzhiyun  *
322*4882a593Smuzhiyun  * Function emits a timeline message informing that atom object is being held
323*4882a593Smuzhiyun  * by context and must not be deleted unless it is released.
324*4882a593Smuzhiyun  */
325*4882a593Smuzhiyun #define KBASE_TLSTREAM_TL_RET_ATOM_CTX(atom, context) \
326*4882a593Smuzhiyun 	__TRACE_IF_ENABLED(tl_ret_atom_ctx, atom, context)
327*4882a593Smuzhiyun 
328*4882a593Smuzhiyun /**
329*4882a593Smuzhiyun  * KBASE_TLSTREAM_TL_RET_ATOM_LPU - retain atom by LPU
330*4882a593Smuzhiyun  * @atom:              name of the atom object
331*4882a593Smuzhiyun  * @lpu:               name of the Logical Processing Unit object
332*4882a593Smuzhiyun  * @attrib_match_list: list containing match operator attributes
333*4882a593Smuzhiyun  *
334*4882a593Smuzhiyun  * Function emits a timeline message informing that atom object is being held
335*4882a593Smuzhiyun  * by LPU and must not be deleted unless it is released.
336*4882a593Smuzhiyun  */
337*4882a593Smuzhiyun #define KBASE_TLSTREAM_TL_RET_ATOM_LPU(atom, lpu, attrib_match_list) \
338*4882a593Smuzhiyun 	__TRACE_IF_ENABLED(tl_ret_atom_lpu, atom, lpu, attrib_match_list)
339*4882a593Smuzhiyun 
340*4882a593Smuzhiyun /**
341*4882a593Smuzhiyun  * KBASE_TLSTREAM_TL_NRET_CTX_LPU - release context by LPU
342*4882a593Smuzhiyun  * @context: name of the context object
343*4882a593Smuzhiyun  * @lpu:     name of the Logical Processing Unit object
344*4882a593Smuzhiyun  *
345*4882a593Smuzhiyun  * Function emits a timeline message informing that context is being released
346*4882a593Smuzhiyun  * by LPU object.
347*4882a593Smuzhiyun  */
348*4882a593Smuzhiyun #define KBASE_TLSTREAM_TL_NRET_CTX_LPU(context, lpu) \
349*4882a593Smuzhiyun 	__TRACE_IF_ENABLED(tl_nret_ctx_lpu, context, lpu)
350*4882a593Smuzhiyun 
351*4882a593Smuzhiyun /**
352*4882a593Smuzhiyun  * KBASE_TLSTREAM_TL_NRET_ATOM_CTX - release atom by context
353*4882a593Smuzhiyun  * @atom:    name of the atom object
354*4882a593Smuzhiyun  * @context: name of the context object
355*4882a593Smuzhiyun  *
356*4882a593Smuzhiyun  * Function emits a timeline message informing that atom object is being
357*4882a593Smuzhiyun  * released by context.
358*4882a593Smuzhiyun  */
359*4882a593Smuzhiyun #define KBASE_TLSTREAM_TL_NRET_ATOM_CTX(atom, context) \
360*4882a593Smuzhiyun 	__TRACE_IF_ENABLED(tl_nret_atom_ctx, atom, context)
361*4882a593Smuzhiyun 
362*4882a593Smuzhiyun /**
363*4882a593Smuzhiyun  * KBASE_TLSTREAM_TL_NRET_ATOM_LPU - release atom by LPU
364*4882a593Smuzhiyun  * @atom: name of the atom object
365*4882a593Smuzhiyun  * @lpu:  name of the Logical Processing Unit object
366*4882a593Smuzhiyun  *
367*4882a593Smuzhiyun  * Function emits a timeline message informing that atom object is being
368*4882a593Smuzhiyun  * released by LPU.
369*4882a593Smuzhiyun  */
370*4882a593Smuzhiyun #define KBASE_TLSTREAM_TL_NRET_ATOM_LPU(atom, lpu) \
371*4882a593Smuzhiyun 	__TRACE_IF_ENABLED(tl_nret_atom_lpu, atom, lpu)
372*4882a593Smuzhiyun 
373*4882a593Smuzhiyun /**
374*4882a593Smuzhiyun  * KBASE_TLSTREAM_TL_RET_AS_CTX - lifelink address space object to context
375*4882a593Smuzhiyun  * @as:  name of the address space object
376*4882a593Smuzhiyun  * @ctx: name of the context object
377*4882a593Smuzhiyun  *
378*4882a593Smuzhiyun  * Function emits a timeline message informing that address space object
379*4882a593Smuzhiyun  * is being held by the context object.
380*4882a593Smuzhiyun  */
381*4882a593Smuzhiyun #define KBASE_TLSTREAM_TL_RET_AS_CTX(as, ctx) \
382*4882a593Smuzhiyun 	__TRACE_IF_ENABLED(tl_ret_as_ctx, as, ctx)
383*4882a593Smuzhiyun 
384*4882a593Smuzhiyun /**
385*4882a593Smuzhiyun  * KBASE_TLSTREAM_TL_NRET_AS_CTX - release address space by context
386*4882a593Smuzhiyun  * @as:  name of the address space object
387*4882a593Smuzhiyun  * @ctx: name of the context object
388*4882a593Smuzhiyun  *
389*4882a593Smuzhiyun  * Function emits a timeline message informing that address space object
390*4882a593Smuzhiyun  * is being released by atom.
391*4882a593Smuzhiyun  */
392*4882a593Smuzhiyun #define KBASE_TLSTREAM_TL_NRET_AS_CTX(as, ctx) \
393*4882a593Smuzhiyun 	__TRACE_IF_ENABLED(tl_nret_as_ctx, as, ctx)
394*4882a593Smuzhiyun 
395*4882a593Smuzhiyun /**
396*4882a593Smuzhiyun  * KBASE_TLSTREAM_TL_RET_ATOM_AS - retain atom by address space
397*4882a593Smuzhiyun  * @atom: name of the atom object
398*4882a593Smuzhiyun  * @as:   name of the address space object
399*4882a593Smuzhiyun  *
400*4882a593Smuzhiyun  * Function emits a timeline message informing that atom object is being held
401*4882a593Smuzhiyun  * by address space and must not be deleted unless it is released.
402*4882a593Smuzhiyun  */
403*4882a593Smuzhiyun #define KBASE_TLSTREAM_TL_RET_ATOM_AS(atom, as) \
404*4882a593Smuzhiyun 	__TRACE_IF_ENABLED(tl_ret_atom_as, atom, as)
405*4882a593Smuzhiyun 
406*4882a593Smuzhiyun /**
407*4882a593Smuzhiyun  * KBASE_TLSTREAM_TL_NRET_ATOM_AS - release atom by address space
408*4882a593Smuzhiyun  * @atom: name of the atom object
409*4882a593Smuzhiyun  * @as:   name of the address space object
410*4882a593Smuzhiyun  *
411*4882a593Smuzhiyun  * Function emits a timeline message informing that atom object is being
412*4882a593Smuzhiyun  * released by address space.
413*4882a593Smuzhiyun  */
414*4882a593Smuzhiyun #define KBASE_TLSTREAM_TL_NRET_ATOM_AS(atom, as) \
415*4882a593Smuzhiyun 	__TRACE_IF_ENABLED(tl_nret_atom_as, atom, as)
416*4882a593Smuzhiyun 
417*4882a593Smuzhiyun /**
418*4882a593Smuzhiyun  * KBASE_TLSTREAM_TL_DEP_ATOM_ATOM - parent atom depends on child atom
419*4882a593Smuzhiyun  * @atom1: name of the child atom object
420*4882a593Smuzhiyun  * @atom2: name of the parent atom object that depends on child atom
421*4882a593Smuzhiyun  *
422*4882a593Smuzhiyun  * Function emits a timeline message informing that parent atom waits for
423*4882a593Smuzhiyun  * child atom object to be completed before start its execution.
424*4882a593Smuzhiyun  */
425*4882a593Smuzhiyun #define KBASE_TLSTREAM_TL_DEP_ATOM_ATOM(atom1, atom2) \
426*4882a593Smuzhiyun 	__TRACE_IF_ENABLED(tl_dep_atom_atom, atom1, atom2)
427*4882a593Smuzhiyun 
428*4882a593Smuzhiyun /**
429*4882a593Smuzhiyun  * KBASE_TLSTREAM_TL_NDEP_ATOM_ATOM - dependency between atoms resolved
430*4882a593Smuzhiyun  * @atom1: name of the child atom object
431*4882a593Smuzhiyun  * @atom2: name of the parent atom object that depended on child atom
432*4882a593Smuzhiyun  *
433*4882a593Smuzhiyun  * Function emits a timeline message informing that parent atom execution
434*4882a593Smuzhiyun  * dependency on child atom has been resolved.
435*4882a593Smuzhiyun  */
436*4882a593Smuzhiyun #define KBASE_TLSTREAM_TL_NDEP_ATOM_ATOM(atom1, atom2) \
437*4882a593Smuzhiyun 	__TRACE_IF_ENABLED(tl_ndep_atom_atom, atom1, atom2)
438*4882a593Smuzhiyun 
439*4882a593Smuzhiyun /**
440*4882a593Smuzhiyun  * KBASE_TLSTREAM_TL_RDEP_ATOM_ATOM - information about already resolved dependency between atoms
441*4882a593Smuzhiyun  * @atom1: name of the child atom object
442*4882a593Smuzhiyun  * @atom2: name of the parent atom object that depended on child atom
443*4882a593Smuzhiyun  *
444*4882a593Smuzhiyun  * Function emits a timeline message informing that parent atom execution
445*4882a593Smuzhiyun  * dependency on child atom has been resolved.
446*4882a593Smuzhiyun  */
447*4882a593Smuzhiyun #define KBASE_TLSTREAM_TL_RDEP_ATOM_ATOM(atom1, atom2) \
448*4882a593Smuzhiyun 	__TRACE_IF_ENABLED(tl_rdep_atom_atom, atom1, atom2)
449*4882a593Smuzhiyun 
450*4882a593Smuzhiyun /**
451*4882a593Smuzhiyun  * KBASE_TLSTREAM_TL_ATTRIB_ATOM_CONFIG - atom job slot attributes
452*4882a593Smuzhiyun  * @atom:     name of the atom object
453*4882a593Smuzhiyun  * @jd:       job descriptor address
454*4882a593Smuzhiyun  * @affinity: job affinity
455*4882a593Smuzhiyun  * @config:   job config
456*4882a593Smuzhiyun  *
457*4882a593Smuzhiyun  * Function emits a timeline message containing atom attributes.
458*4882a593Smuzhiyun  */
459*4882a593Smuzhiyun #define KBASE_TLSTREAM_TL_ATTRIB_ATOM_CONFIG(atom, jd, affinity, config) \
460*4882a593Smuzhiyun 	__TRACE_IF_ENABLED(tl_attrib_atom_config, atom, jd, affinity, config)
461*4882a593Smuzhiyun 
462*4882a593Smuzhiyun /**
463*4882a593Smuzhiyun  * KBASE_TLSTREAM_TL_ATTRIB_ATOM_PRIORITY - atom priority
464*4882a593Smuzhiyun  * @atom: name of the atom object
465*4882a593Smuzhiyun  * @prio: atom priority
466*4882a593Smuzhiyun  *
467*4882a593Smuzhiyun  * Function emits a timeline message containing atom priority.
468*4882a593Smuzhiyun  */
469*4882a593Smuzhiyun #define KBASE_TLSTREAM_TL_ATTRIB_ATOM_PRIORITY(atom, prio) \
470*4882a593Smuzhiyun 	__TRACE_IF_ENABLED_LATENCY(tl_attrib_atom_priority, atom, prio)
471*4882a593Smuzhiyun 
472*4882a593Smuzhiyun /**
473*4882a593Smuzhiyun  * KBASE_TLSTREAM_TL_ATTRIB_ATOM_STATE - atom state
474*4882a593Smuzhiyun  * @atom:  name of the atom object
475*4882a593Smuzhiyun  * @state: atom state
476*4882a593Smuzhiyun  *
477*4882a593Smuzhiyun  * Function emits a timeline message containing atom state.
478*4882a593Smuzhiyun  */
479*4882a593Smuzhiyun #define KBASE_TLSTREAM_TL_ATTRIB_ATOM_STATE(atom, state) \
480*4882a593Smuzhiyun 	__TRACE_IF_ENABLED_LATENCY(tl_attrib_atom_state, atom, state)
481*4882a593Smuzhiyun 
482*4882a593Smuzhiyun /**
483*4882a593Smuzhiyun  * KBASE_TLSTREAM_TL_ATTRIB_ATOM_PRIORITY_CHANGE - atom caused priority change
484*4882a593Smuzhiyun  * @atom:  name of the atom object
485*4882a593Smuzhiyun  *
486*4882a593Smuzhiyun  * Function emits a timeline message signalling priority change
487*4882a593Smuzhiyun  */
488*4882a593Smuzhiyun #define KBASE_TLSTREAM_TL_ATTRIB_ATOM_PRIORITY_CHANGE(atom) \
489*4882a593Smuzhiyun 	__TRACE_IF_ENABLED_LATENCY(tl_attrib_atom_priority_change, atom)
490*4882a593Smuzhiyun 
491*4882a593Smuzhiyun /**
492*4882a593Smuzhiyun  * KBASE_TLSTREAM_TL_ATTRIB_ATOM_JIT - jit happened on atom
493*4882a593Smuzhiyun  * @atom:       atom identifier
494*4882a593Smuzhiyun  * @edit_addr:  address edited by jit
495*4882a593Smuzhiyun  * @new_addr:   address placed into the edited location
496*4882a593Smuzhiyun  */
497*4882a593Smuzhiyun #define KBASE_TLSTREAM_TL_ATTRIB_ATOM_JIT(atom, edit_addr, new_addr) \
498*4882a593Smuzhiyun 	__TRACE_IF_ENABLED_JD(tl_attrib_atom_jit, atom, edit_addr, new_addr)
499*4882a593Smuzhiyun 
500*4882a593Smuzhiyun /**
501*4882a593Smuzhiyun  * KBASE_TLSTREAM_TL_ATTRIB_AS_CONFIG - address space attributes
502*4882a593Smuzhiyun  * @as:       assigned address space
503*4882a593Smuzhiyun  * @transtab: configuration of the TRANSTAB register
504*4882a593Smuzhiyun  * @memattr:  configuration of the MEMATTR register
505*4882a593Smuzhiyun  * @transcfg: configuration of the TRANSCFG register (or zero if not present)
506*4882a593Smuzhiyun  *
507*4882a593Smuzhiyun  * Function emits a timeline message containing address space attributes.
508*4882a593Smuzhiyun  */
509*4882a593Smuzhiyun #define KBASE_TLSTREAM_TL_ATTRIB_AS_CONFIG(as, transtab, memattr, transcfg) \
510*4882a593Smuzhiyun 	__TRACE_IF_ENABLED(tl_attrib_as_config, as, transtab, memattr, transcfg)
511*4882a593Smuzhiyun 
512*4882a593Smuzhiyun /**
513*4882a593Smuzhiyun  * KBASE_TLSTREAM_TL_EVENT_ATOM_SOFTSTOP_ex
514*4882a593Smuzhiyun  * @atom:       atom identifier
515*4882a593Smuzhiyun  */
516*4882a593Smuzhiyun #define KBASE_TLSTREAM_TL_EVENT_ATOM_SOFTSTOP_EX(atom) \
517*4882a593Smuzhiyun 	__TRACE_IF_ENABLED(tl_event_atom_softstop_ex, atom)
518*4882a593Smuzhiyun 
519*4882a593Smuzhiyun /**
520*4882a593Smuzhiyun  * KBASE_TLSTREAM_TL_EVENT_LPU_softstop
521*4882a593Smuzhiyun  * @lpu:        name of the LPU object
522*4882a593Smuzhiyun  */
523*4882a593Smuzhiyun #define KBASE_TLSTREAM_TL_EVENT_LPU_SOFTSTOP(lpu) \
524*4882a593Smuzhiyun 	__TRACE_IF_ENABLED(tl_event_lpu_softstop, lpu)
525*4882a593Smuzhiyun 
526*4882a593Smuzhiyun /**
527*4882a593Smuzhiyun  * KBASE_TLSTREAM_TL_EVENT_ATOM_SOFTSTOP_issue
528*4882a593Smuzhiyun  * @atom:       atom identifier
529*4882a593Smuzhiyun  */
530*4882a593Smuzhiyun #define KBASE_TLSTREAM_TL_EVENT_ATOM_SOFTSTOP_ISSUE(atom) \
531*4882a593Smuzhiyun 	__TRACE_IF_ENABLED(tl_event_atom_softstop_issue, atom)
532*4882a593Smuzhiyun 
533*4882a593Smuzhiyun /**
534*4882a593Smuzhiyun  * KBASE_TLSTREAM_JD_GPU_SOFT_RESET - The GPU is being soft reset
535*4882a593Smuzhiyun  * @gpu:        name of the GPU object
536*4882a593Smuzhiyun  *
537*4882a593Smuzhiyun  * This imperative tracepoint is specific to job dumping.
538*4882a593Smuzhiyun  * Function emits a timeline message indicating GPU soft reset.
539*4882a593Smuzhiyun  */
540*4882a593Smuzhiyun #define KBASE_TLSTREAM_JD_GPU_SOFT_RESET(gpu) \
541*4882a593Smuzhiyun 	__TRACE_IF_ENABLED(jd_gpu_soft_reset, gpu)
542*4882a593Smuzhiyun 
543*4882a593Smuzhiyun 
544*4882a593Smuzhiyun /**
545*4882a593Smuzhiyun  * KBASE_TLSTREAM_AUX_PM_STATE - timeline message: power management state
546*4882a593Smuzhiyun  * @core_type: core type (shader, tiler, l2 cache, l3 cache)
547*4882a593Smuzhiyun  * @state:     64bits bitmask reporting power state of the cores (1-ON, 0-OFF)
548*4882a593Smuzhiyun  */
549*4882a593Smuzhiyun #define KBASE_TLSTREAM_AUX_PM_STATE(core_type, state) \
550*4882a593Smuzhiyun 	__TRACE_IF_ENABLED(aux_pm_state, core_type, state)
551*4882a593Smuzhiyun 
552*4882a593Smuzhiyun /**
553*4882a593Smuzhiyun  * KBASE_TLSTREAM_AUX_PAGEFAULT - timeline message: MMU page fault event
554*4882a593Smuzhiyun  *                                resulting in new pages being mapped
555*4882a593Smuzhiyun  * @ctx_nr:            kernel context number
556*4882a593Smuzhiyun  * @page_count_change: number of pages to be added
557*4882a593Smuzhiyun  */
558*4882a593Smuzhiyun #define KBASE_TLSTREAM_AUX_PAGEFAULT(ctx_nr, page_count_change) \
559*4882a593Smuzhiyun 	__TRACE_IF_ENABLED(aux_pagefault, ctx_nr, page_count_change)
560*4882a593Smuzhiyun 
561*4882a593Smuzhiyun /**
562*4882a593Smuzhiyun  * KBASE_TLSTREAM_AUX_PAGESALLOC - timeline message: total number of allocated
563*4882a593Smuzhiyun  *                                 pages is changed
564*4882a593Smuzhiyun  * @ctx_nr:     kernel context number
565*4882a593Smuzhiyun  * @page_count: number of pages used by the context
566*4882a593Smuzhiyun  */
567*4882a593Smuzhiyun #define KBASE_TLSTREAM_AUX_PAGESALLOC(ctx_nr, page_count) \
568*4882a593Smuzhiyun 	__TRACE_IF_ENABLED(aux_pagesalloc, ctx_nr, page_count)
569*4882a593Smuzhiyun 
570*4882a593Smuzhiyun /**
571*4882a593Smuzhiyun  * KBASE_TLSTREAM_AUX_DEVFREQ_TARGET - timeline message: new target DVFS
572*4882a593Smuzhiyun  *                                     frequency
573*4882a593Smuzhiyun  * @target_freq: new target frequency
574*4882a593Smuzhiyun  */
575*4882a593Smuzhiyun #define KBASE_TLSTREAM_AUX_DEVFREQ_TARGET(target_freq) \
576*4882a593Smuzhiyun 	__TRACE_IF_ENABLED(aux_devfreq_target, target_freq)
577*4882a593Smuzhiyun 
578*4882a593Smuzhiyun /**
579*4882a593Smuzhiyun  * KBASE_TLSTREAM_AUX_PROTECTED_ENTER_START - The GPU has started transitioning
580*4882a593Smuzhiyun  *                                            to protected mode
581*4882a593Smuzhiyun  * @gpu: name of the GPU object
582*4882a593Smuzhiyun  *
583*4882a593Smuzhiyun  * Function emits a timeline message indicating the GPU is starting to
584*4882a593Smuzhiyun  * transition to protected mode.
585*4882a593Smuzhiyun  */
586*4882a593Smuzhiyun #define KBASE_TLSTREAM_AUX_PROTECTED_ENTER_START(gpu) \
587*4882a593Smuzhiyun 	__TRACE_IF_ENABLED_LATENCY(aux_protected_enter_start, gpu)
588*4882a593Smuzhiyun 
589*4882a593Smuzhiyun /**
590*4882a593Smuzhiyun  * KBASE_TLSTREAM_AUX_PROTECTED_ENTER_END - The GPU has finished transitioning
591*4882a593Smuzhiyun  *                                          to protected mode
592*4882a593Smuzhiyun  * @gpu: name of the GPU object
593*4882a593Smuzhiyun  *
594*4882a593Smuzhiyun  * Function emits a timeline message indicating the GPU has finished
595*4882a593Smuzhiyun  * transitioning to protected mode.
596*4882a593Smuzhiyun  */
597*4882a593Smuzhiyun #define KBASE_TLSTREAM_AUX_PROTECTED_ENTER_END(gpu) \
598*4882a593Smuzhiyun 	__TRACE_IF_ENABLED_LATENCY(aux_protected_enter_end, gpu)
599*4882a593Smuzhiyun 
600*4882a593Smuzhiyun /**
601*4882a593Smuzhiyun  * KBASE_TLSTREAM_AUX_PROTECTED_LEAVE_START - The GPU has started transitioning
602*4882a593Smuzhiyun  *                                            to non-protected mode
603*4882a593Smuzhiyun  * @gpu: name of the GPU object
604*4882a593Smuzhiyun  *
605*4882a593Smuzhiyun  * Function emits a timeline message indicating the GPU is starting to
606*4882a593Smuzhiyun  * transition to non-protected mode.
607*4882a593Smuzhiyun  */
608*4882a593Smuzhiyun #define KBASE_TLSTREAM_AUX_PROTECTED_LEAVE_START(gpu) \
609*4882a593Smuzhiyun 	__TRACE_IF_ENABLED_LATENCY(aux_protected_leave_start, gpu)
610*4882a593Smuzhiyun 
611*4882a593Smuzhiyun /**
612*4882a593Smuzhiyun  * KBASE_TLSTREAM_AUX_PROTECTED_LEAVE_END - The GPU has finished transitioning
613*4882a593Smuzhiyun  *                                          to non-protected mode
614*4882a593Smuzhiyun  * @gpu: name of the GPU object
615*4882a593Smuzhiyun  *
616*4882a593Smuzhiyun  * Function emits a timeline message indicating the GPU has finished
617*4882a593Smuzhiyun  * transitioning to non-protected mode.
618*4882a593Smuzhiyun  */
619*4882a593Smuzhiyun #define KBASE_TLSTREAM_AUX_PROTECTED_LEAVE_END(gpu) \
620*4882a593Smuzhiyun 	__TRACE_IF_ENABLED_LATENCY(aux_protected_leave_end, gpu)
621*4882a593Smuzhiyun 
622*4882a593Smuzhiyun #endif /* _KBASE_TLSTREAM_H */
623*4882a593Smuzhiyun 
624