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