/* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */ /* * * (C) COPYRIGHT 2010-2021 ARM Limited. All rights reserved. * * This program is free software and is provided to you under the terms of the * GNU General Public License version 2 as published by the Free Software * Foundation, and any use by you of this program is subject to the terms * of such GNU license. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, you can access it online at * http://www.gnu.org/licenses/gpl-2.0.html. * */ /* * THIS FILE IS AUTOGENERATED BY mali_trace_generator.py. * DO NOT EDIT. */ #if !defined(_KBASE_TRACEPOINTS_H) #define _KBASE_TRACEPOINTS_H /* Tracepoints are abstract callbacks notifying that some important * software or hardware event has happened. * * In this particular implementation, it results into a MIPE * timeline event and, in some cases, it also fires an ftrace event * (a.k.a. Gator events, see details below). */ #include "mali_kbase.h" #include "mali_kbase_gator.h" #include #include /* clang-format off */ struct kbase_tlstream; extern const size_t __obj_stream_offset; extern const size_t __aux_stream_offset; /* This macro dispatches a kbase_tlstream from * a kbase_device instance. Only AUX or OBJ * streams can be dispatched. It is aware of * kbase_timeline binary representation and * relies on offset variables: * __obj_stream_offset and __aux_stream_offset. */ #define __TL_DISPATCH_STREAM(kbdev, stype) \ ((struct kbase_tlstream *) \ ((u8 *)kbdev->timeline + __ ## stype ## _stream_offset)) struct tp_desc; /* Descriptors of timeline messages transmitted in object events stream. */ extern const char *obj_desc_header; extern const size_t obj_desc_header_size; /* Descriptors of timeline messages transmitted in auxiliary events stream. */ extern const char *aux_desc_header; extern const size_t aux_desc_header_size; #define TL_ATOM_STATE_IDLE 0 #define TL_ATOM_STATE_READY 1 #define TL_ATOM_STATE_DONE 2 #define TL_ATOM_STATE_POSTED 3 #define TL_JS_EVENT_START GATOR_JOB_SLOT_START #define TL_JS_EVENT_STOP GATOR_JOB_SLOT_STOP #define TL_JS_EVENT_SOFT_STOP GATOR_JOB_SLOT_SOFT_STOPPED #define TLSTREAM_ENABLED (1 << 31) void __kbase_tlstream_tl_new_ctx( struct kbase_tlstream *stream, const void *ctx, u32 ctx_nr, u32 tgid); void __kbase_tlstream_tl_new_gpu( struct kbase_tlstream *stream, const void *gpu, u32 gpu_id, u32 core_count); void __kbase_tlstream_tl_new_lpu( struct kbase_tlstream *stream, const void *lpu, u32 lpu_nr, u32 lpu_fn); void __kbase_tlstream_tl_new_atom( struct kbase_tlstream *stream, const void *atom, u32 atom_nr); void __kbase_tlstream_tl_new_as( struct kbase_tlstream *stream, const void *address_space, u32 as_nr); void __kbase_tlstream_tl_del_ctx( struct kbase_tlstream *stream, const void *ctx); void __kbase_tlstream_tl_del_atom( struct kbase_tlstream *stream, const void *atom); void __kbase_tlstream_tl_lifelink_lpu_gpu( struct kbase_tlstream *stream, const void *lpu, const void *gpu); void __kbase_tlstream_tl_lifelink_as_gpu( struct kbase_tlstream *stream, const void *address_space, const void *gpu); void __kbase_tlstream_tl_ret_ctx_lpu( struct kbase_tlstream *stream, const void *ctx, const void *lpu); void __kbase_tlstream_tl_ret_atom_ctx( struct kbase_tlstream *stream, const void *atom, const void *ctx); void __kbase_tlstream_tl_ret_atom_lpu( struct kbase_tlstream *stream, const void *atom, const void *lpu, const char *attrib_match_list); void __kbase_tlstream_tl_nret_ctx_lpu( struct kbase_tlstream *stream, const void *ctx, const void *lpu); void __kbase_tlstream_tl_nret_atom_ctx( struct kbase_tlstream *stream, const void *atom, const void *ctx); void __kbase_tlstream_tl_nret_atom_lpu( struct kbase_tlstream *stream, const void *atom, const void *lpu); void __kbase_tlstream_tl_ret_as_ctx( struct kbase_tlstream *stream, const void *address_space, const void *ctx); void __kbase_tlstream_tl_nret_as_ctx( struct kbase_tlstream *stream, const void *address_space, const void *ctx); void __kbase_tlstream_tl_ret_atom_as( struct kbase_tlstream *stream, const void *atom, const void *address_space); void __kbase_tlstream_tl_nret_atom_as( struct kbase_tlstream *stream, const void *atom, const void *address_space); void __kbase_tlstream_tl_attrib_atom_config( struct kbase_tlstream *stream, const void *atom, u64 descriptor, u64 affinity, u32 config); void __kbase_tlstream_tl_attrib_atom_priority( struct kbase_tlstream *stream, const void *atom, u32 prio); void __kbase_tlstream_tl_attrib_atom_state( struct kbase_tlstream *stream, const void *atom, u32 state); void __kbase_tlstream_tl_attrib_atom_prioritized( struct kbase_tlstream *stream, const void *atom); void __kbase_tlstream_tl_attrib_atom_jit( struct kbase_tlstream *stream, const void *atom, u64 edit_addr, u64 new_addr, u32 jit_flags, u64 mem_flags, u32 j_id, u64 com_pgs, u64 extent, u64 va_pgs); void __kbase_tlstream_tl_jit_usedpages( struct kbase_tlstream *stream, u64 used_pages, u32 j_id); void __kbase_tlstream_tl_attrib_atom_jitallocinfo( struct kbase_tlstream *stream, const void *atom, u64 va_pgs, u64 com_pgs, u64 extent, u32 j_id, u32 bin_id, u32 max_allocs, u32 jit_flags, u32 usg_id); void __kbase_tlstream_tl_attrib_atom_jitfreeinfo( struct kbase_tlstream *stream, const void *atom, u32 j_id); void __kbase_tlstream_tl_attrib_as_config( struct kbase_tlstream *stream, const void *address_space, u64 transtab, u64 memattr, u64 transcfg); void __kbase_tlstream_tl_event_lpu_softstop( struct kbase_tlstream *stream, const void *lpu); void __kbase_tlstream_tl_event_atom_softstop_ex( struct kbase_tlstream *stream, const void *atom); void __kbase_tlstream_tl_event_atom_softstop_issue( struct kbase_tlstream *stream, const void *atom); void __kbase_tlstream_tl_event_atom_softjob_start( struct kbase_tlstream *stream, const void *atom); void __kbase_tlstream_tl_event_atom_softjob_end( struct kbase_tlstream *stream, const void *atom); void __kbase_tlstream_tl_arbiter_granted( struct kbase_tlstream *stream, const void *gpu); void __kbase_tlstream_tl_arbiter_started( struct kbase_tlstream *stream, const void *gpu); void __kbase_tlstream_tl_arbiter_stop_requested( struct kbase_tlstream *stream, const void *gpu); void __kbase_tlstream_tl_arbiter_stopped( struct kbase_tlstream *stream, const void *gpu); void __kbase_tlstream_tl_arbiter_requested( struct kbase_tlstream *stream, const void *gpu); void __kbase_tlstream_jd_gpu_soft_reset( struct kbase_tlstream *stream, const void *gpu); void __kbase_tlstream_aux_pm_state( struct kbase_tlstream *stream, u32 core_type, u64 core_state_bitset); void __kbase_tlstream_aux_pagefault( struct kbase_tlstream *stream, u32 ctx_nr, u32 as_nr, u64 page_cnt_change); void __kbase_tlstream_aux_pagesalloc( struct kbase_tlstream *stream, u32 ctx_nr, u64 page_cnt); void __kbase_tlstream_aux_devfreq_target( struct kbase_tlstream *stream, u64 target_freq); void __kbase_tlstream_aux_protected_enter_start( struct kbase_tlstream *stream, const void *gpu); void __kbase_tlstream_aux_protected_enter_end( struct kbase_tlstream *stream, const void *gpu); void __kbase_tlstream_aux_protected_leave_start( struct kbase_tlstream *stream, const void *gpu); void __kbase_tlstream_aux_protected_leave_end( struct kbase_tlstream *stream, const void *gpu); void __kbase_tlstream_aux_jit_stats( struct kbase_tlstream *stream, u32 ctx_nr, u32 bid, u32 max_allocs, u32 allocs, u32 va_pages, u32 ph_pages); void __kbase_tlstream_aux_tiler_heap_stats( struct kbase_tlstream *stream, u32 ctx_nr, u64 heap_id, u32 va_pages, u32 ph_pages, u32 max_chunks, u32 chunk_size, u32 chunk_count, u32 target_in_flight, u32 nr_in_flight); void __kbase_tlstream_aux_event_job_slot( struct kbase_tlstream *stream, const void *ctx, u32 slot_nr, u32 atom_nr, u32 event); void __kbase_tlstream_tl_kbase_new_device( struct kbase_tlstream *stream, u32 kbase_device_id, u32 kbase_device_gpu_core_count, u32 kbase_device_max_num_csgs, u32 kbase_device_as_count); void __kbase_tlstream_tl_kbase_device_program_csg( struct kbase_tlstream *stream, u32 kbase_device_id, u32 gpu_cmdq_grp_handle, u32 kbase_device_csg_slot_index); void __kbase_tlstream_tl_kbase_device_deprogram_csg( struct kbase_tlstream *stream, u32 kbase_device_id, u32 kbase_device_csg_slot_index); void __kbase_tlstream_tl_kbase_new_ctx( struct kbase_tlstream *stream, u32 kernel_ctx_id, u32 kbase_device_id); void __kbase_tlstream_tl_kbase_del_ctx( struct kbase_tlstream *stream, u32 kernel_ctx_id); void __kbase_tlstream_tl_kbase_ctx_assign_as( struct kbase_tlstream *stream, u32 kernel_ctx_id, u32 kbase_device_as_index); void __kbase_tlstream_tl_kbase_ctx_unassign_as( struct kbase_tlstream *stream, u32 kernel_ctx_id); void __kbase_tlstream_tl_kbase_new_kcpuqueue( struct kbase_tlstream *stream, const void *kcpu_queue, u32 kernel_ctx_id, u32 kcpuq_num_pending_cmds); void __kbase_tlstream_tl_kbase_del_kcpuqueue( struct kbase_tlstream *stream, const void *kcpu_queue); void __kbase_tlstream_tl_kbase_kcpuqueue_enqueue_fence_signal( struct kbase_tlstream *stream, const void *kcpu_queue, const void *fence); void __kbase_tlstream_tl_kbase_kcpuqueue_enqueue_fence_wait( struct kbase_tlstream *stream, const void *kcpu_queue, const void *fence); void __kbase_tlstream_tl_kbase_kcpuqueue_enqueue_cqs_wait( struct kbase_tlstream *stream, const void *kcpu_queue, u64 cqs_obj_gpu_addr, u32 cqs_obj_compare_value, u32 cqs_obj_inherit_error); void __kbase_tlstream_tl_kbase_kcpuqueue_enqueue_cqs_set( struct kbase_tlstream *stream, const void *kcpu_queue, u64 cqs_obj_gpu_addr); void __kbase_tlstream_tl_kbase_kcpuqueue_enqueue_map_import( struct kbase_tlstream *stream, const void *kcpu_queue, u64 map_import_buf_gpu_addr); void __kbase_tlstream_tl_kbase_kcpuqueue_enqueue_unmap_import( struct kbase_tlstream *stream, const void *kcpu_queue, u64 map_import_buf_gpu_addr); void __kbase_tlstream_tl_kbase_kcpuqueue_enqueue_unmap_import_force( struct kbase_tlstream *stream, const void *kcpu_queue, u64 map_import_buf_gpu_addr); void __kbase_tlstream_tl_kbase_kcpuqueue_enqueue_error_barrier( struct kbase_tlstream *stream, const void *kcpu_queue); void __kbase_tlstream_tl_kbase_kcpuqueue_enqueue_group_suspend( struct kbase_tlstream *stream, const void *kcpu_queue, const void *group_suspend_buf, u32 gpu_cmdq_grp_handle); void __kbase_tlstream_tl_kbase_array_begin_kcpuqueue_enqueue_jit_alloc( struct kbase_tlstream *stream, const void *kcpu_queue); void __kbase_tlstream_tl_kbase_array_item_kcpuqueue_enqueue_jit_alloc( struct kbase_tlstream *stream, const void *kcpu_queue, u64 jit_alloc_gpu_alloc_addr_dest, u64 jit_alloc_va_pages, u64 jit_alloc_commit_pages, u64 jit_alloc_extent, u32 jit_alloc_jit_id, u32 jit_alloc_bin_id, u32 jit_alloc_max_allocations, u32 jit_alloc_flags, u32 jit_alloc_usage_id); void __kbase_tlstream_tl_kbase_array_end_kcpuqueue_enqueue_jit_alloc( struct kbase_tlstream *stream, const void *kcpu_queue); void __kbase_tlstream_tl_kbase_array_begin_kcpuqueue_enqueue_jit_free( struct kbase_tlstream *stream, const void *kcpu_queue); void __kbase_tlstream_tl_kbase_array_item_kcpuqueue_enqueue_jit_free( struct kbase_tlstream *stream, const void *kcpu_queue, u32 jit_alloc_jit_id); void __kbase_tlstream_tl_kbase_array_end_kcpuqueue_enqueue_jit_free( struct kbase_tlstream *stream, const void *kcpu_queue); void __kbase_tlstream_tl_kbase_kcpuqueue_execute_fence_signal_start( struct kbase_tlstream *stream, const void *kcpu_queue); void __kbase_tlstream_tl_kbase_kcpuqueue_execute_fence_signal_end( struct kbase_tlstream *stream, const void *kcpu_queue, u32 execute_error); void __kbase_tlstream_tl_kbase_kcpuqueue_execute_fence_wait_start( struct kbase_tlstream *stream, const void *kcpu_queue); void __kbase_tlstream_tl_kbase_kcpuqueue_execute_fence_wait_end( struct kbase_tlstream *stream, const void *kcpu_queue, u32 execute_error); void __kbase_tlstream_tl_kbase_kcpuqueue_execute_cqs_wait_start( struct kbase_tlstream *stream, const void *kcpu_queue); void __kbase_tlstream_tl_kbase_kcpuqueue_execute_cqs_wait_end( struct kbase_tlstream *stream, const void *kcpu_queue, u32 execute_error); void __kbase_tlstream_tl_kbase_kcpuqueue_execute_cqs_set( struct kbase_tlstream *stream, const void *kcpu_queue, u32 execute_error); void __kbase_tlstream_tl_kbase_kcpuqueue_execute_map_import_start( struct kbase_tlstream *stream, const void *kcpu_queue); void __kbase_tlstream_tl_kbase_kcpuqueue_execute_map_import_end( struct kbase_tlstream *stream, const void *kcpu_queue, u32 execute_error); void __kbase_tlstream_tl_kbase_kcpuqueue_execute_unmap_import_start( struct kbase_tlstream *stream, const void *kcpu_queue); void __kbase_tlstream_tl_kbase_kcpuqueue_execute_unmap_import_end( struct kbase_tlstream *stream, const void *kcpu_queue, u32 execute_error); void __kbase_tlstream_tl_kbase_kcpuqueue_execute_unmap_import_force_start( struct kbase_tlstream *stream, const void *kcpu_queue); void __kbase_tlstream_tl_kbase_kcpuqueue_execute_unmap_import_force_end( struct kbase_tlstream *stream, const void *kcpu_queue, u32 execute_error); void __kbase_tlstream_tl_kbase_kcpuqueue_execute_jit_alloc_start( struct kbase_tlstream *stream, const void *kcpu_queue); void __kbase_tlstream_tl_kbase_array_begin_kcpuqueue_execute_jit_alloc_end( struct kbase_tlstream *stream, const void *kcpu_queue); void __kbase_tlstream_tl_kbase_array_item_kcpuqueue_execute_jit_alloc_end( struct kbase_tlstream *stream, const void *kcpu_queue, u32 execute_error, u64 jit_alloc_gpu_alloc_addr, u64 jit_alloc_mmu_flags); void __kbase_tlstream_tl_kbase_array_end_kcpuqueue_execute_jit_alloc_end( struct kbase_tlstream *stream, const void *kcpu_queue); void __kbase_tlstream_tl_kbase_kcpuqueue_execute_jit_free_start( struct kbase_tlstream *stream, const void *kcpu_queue); void __kbase_tlstream_tl_kbase_array_begin_kcpuqueue_execute_jit_free_end( struct kbase_tlstream *stream, const void *kcpu_queue); void __kbase_tlstream_tl_kbase_array_item_kcpuqueue_execute_jit_free_end( struct kbase_tlstream *stream, const void *kcpu_queue, u32 execute_error, u64 jit_free_pages_used); void __kbase_tlstream_tl_kbase_array_end_kcpuqueue_execute_jit_free_end( struct kbase_tlstream *stream, const void *kcpu_queue); void __kbase_tlstream_tl_kbase_kcpuqueue_execute_error_barrier( struct kbase_tlstream *stream, const void *kcpu_queue); void __kbase_tlstream_tl_kbase_kcpuqueue_execute_group_suspend_start( struct kbase_tlstream *stream, const void *kcpu_queue); void __kbase_tlstream_tl_kbase_kcpuqueue_execute_group_suspend_end( struct kbase_tlstream *stream, const void *kcpu_queue, u32 execute_error); void __kbase_tlstream_tl_kbase_csffw_tlstream_overflow( struct kbase_tlstream *stream, u64 csffw_timestamp, u64 csffw_cycle); void __kbase_tlstream_tl_kbase_csffw_reset( struct kbase_tlstream *stream, u64 csffw_cycle); struct kbase_tlstream; /** * KBASE_TLSTREAM_TL_NEW_CTX - * object ctx is created * * @kbdev: Kbase device * @ctx: Name of the context object * @ctx_nr: Kernel context number * @tgid: Thread Group Id */ #define KBASE_TLSTREAM_TL_NEW_CTX( \ kbdev, \ ctx, \ ctx_nr, \ tgid \ ) \ do { \ int enabled = atomic_read(&kbdev->timeline_flags); \ if (enabled & TLSTREAM_ENABLED) \ __kbase_tlstream_tl_new_ctx( \ __TL_DISPATCH_STREAM(kbdev, obj), \ ctx, ctx_nr, tgid); \ } while (0) /** * KBASE_TLSTREAM_TL_NEW_GPU - * object gpu is created * * @kbdev: Kbase device * @gpu: Name of the GPU object * @gpu_id: Name of the GPU object * @core_count: Number of cores this GPU hosts */ #define KBASE_TLSTREAM_TL_NEW_GPU( \ kbdev, \ gpu, \ gpu_id, \ core_count \ ) \ do { \ int enabled = atomic_read(&kbdev->timeline_flags); \ if (enabled & TLSTREAM_ENABLED) \ __kbase_tlstream_tl_new_gpu( \ __TL_DISPATCH_STREAM(kbdev, obj), \ gpu, gpu_id, core_count); \ } while (0) /** * KBASE_TLSTREAM_TL_NEW_LPU - * object lpu is created * * @kbdev: Kbase device * @lpu: Name of the Logical Processing Unit object * @lpu_nr: Sequential number assigned to the newly created LPU * @lpu_fn: Property describing functional abilities of this LPU */ #define KBASE_TLSTREAM_TL_NEW_LPU( \ kbdev, \ lpu, \ lpu_nr, \ lpu_fn \ ) \ do { \ int enabled = atomic_read(&kbdev->timeline_flags); \ if (enabled & TLSTREAM_ENABLED) \ __kbase_tlstream_tl_new_lpu( \ __TL_DISPATCH_STREAM(kbdev, obj), \ lpu, lpu_nr, lpu_fn); \ } while (0) /** * KBASE_TLSTREAM_TL_NEW_ATOM - * object atom is created * * @kbdev: Kbase device * @atom: Atom identifier * @atom_nr: Sequential number of an atom */ #define KBASE_TLSTREAM_TL_NEW_ATOM( \ kbdev, \ atom, \ atom_nr \ ) \ do { \ int enabled = atomic_read(&kbdev->timeline_flags); \ if (enabled & TLSTREAM_ENABLED) \ __kbase_tlstream_tl_new_atom( \ __TL_DISPATCH_STREAM(kbdev, obj), \ atom, atom_nr); \ } while (0) /** * KBASE_TLSTREAM_TL_NEW_AS - * address space object is created * * @kbdev: Kbase device * @address_space: Name of the address space object * @as_nr: Address space number */ #define KBASE_TLSTREAM_TL_NEW_AS( \ kbdev, \ address_space, \ as_nr \ ) \ do { \ int enabled = atomic_read(&kbdev->timeline_flags); \ if (enabled & TLSTREAM_ENABLED) \ __kbase_tlstream_tl_new_as( \ __TL_DISPATCH_STREAM(kbdev, obj), \ address_space, as_nr); \ } while (0) /** * KBASE_TLSTREAM_TL_DEL_CTX - * context is destroyed * * @kbdev: Kbase device * @ctx: Name of the context object */ #define KBASE_TLSTREAM_TL_DEL_CTX( \ kbdev, \ ctx \ ) \ do { \ int enabled = atomic_read(&kbdev->timeline_flags); \ if (enabled & TLSTREAM_ENABLED) \ __kbase_tlstream_tl_del_ctx( \ __TL_DISPATCH_STREAM(kbdev, obj), \ ctx); \ } while (0) /** * KBASE_TLSTREAM_TL_DEL_ATOM - * atom is destroyed * * @kbdev: Kbase device * @atom: Atom identifier */ #define KBASE_TLSTREAM_TL_DEL_ATOM( \ kbdev, \ atom \ ) \ do { \ int enabled = atomic_read(&kbdev->timeline_flags); \ if (enabled & TLSTREAM_ENABLED) \ __kbase_tlstream_tl_del_atom( \ __TL_DISPATCH_STREAM(kbdev, obj), \ atom); \ } while (0) /** * KBASE_TLSTREAM_TL_LIFELINK_LPU_GPU - * lpu is deleted with gpu * * @kbdev: Kbase device * @lpu: Name of the Logical Processing Unit object * @gpu: Name of the GPU object */ #define KBASE_TLSTREAM_TL_LIFELINK_LPU_GPU( \ kbdev, \ lpu, \ gpu \ ) \ do { \ int enabled = atomic_read(&kbdev->timeline_flags); \ if (enabled & TLSTREAM_ENABLED) \ __kbase_tlstream_tl_lifelink_lpu_gpu( \ __TL_DISPATCH_STREAM(kbdev, obj), \ lpu, gpu); \ } while (0) /** * KBASE_TLSTREAM_TL_LIFELINK_AS_GPU - * address space is deleted with gpu * * @kbdev: Kbase device * @address_space: Name of the address space object * @gpu: Name of the GPU object */ #define KBASE_TLSTREAM_TL_LIFELINK_AS_GPU( \ kbdev, \ address_space, \ gpu \ ) \ do { \ int enabled = atomic_read(&kbdev->timeline_flags); \ if (enabled & TLSTREAM_ENABLED) \ __kbase_tlstream_tl_lifelink_as_gpu( \ __TL_DISPATCH_STREAM(kbdev, obj), \ address_space, gpu); \ } while (0) /** * KBASE_TLSTREAM_TL_RET_CTX_LPU - * context is retained by lpu * * @kbdev: Kbase device * @ctx: Name of the context object * @lpu: Name of the Logical Processing Unit object */ #define KBASE_TLSTREAM_TL_RET_CTX_LPU( \ kbdev, \ ctx, \ lpu \ ) \ do { \ int enabled = atomic_read(&kbdev->timeline_flags); \ if (enabled & TLSTREAM_ENABLED) \ __kbase_tlstream_tl_ret_ctx_lpu( \ __TL_DISPATCH_STREAM(kbdev, obj), \ ctx, lpu); \ } while (0) /** * KBASE_TLSTREAM_TL_RET_ATOM_CTX - * atom is retained by context * * @kbdev: Kbase device * @atom: Atom identifier * @ctx: Name of the context object */ #define KBASE_TLSTREAM_TL_RET_ATOM_CTX( \ kbdev, \ atom, \ ctx \ ) \ do { \ int enabled = atomic_read(&kbdev->timeline_flags); \ if (enabled & TLSTREAM_ENABLED) \ __kbase_tlstream_tl_ret_atom_ctx( \ __TL_DISPATCH_STREAM(kbdev, obj), \ atom, ctx); \ } while (0) /** * KBASE_TLSTREAM_TL_RET_ATOM_LPU - * atom is retained by lpu * * @kbdev: Kbase device * @atom: Atom identifier * @lpu: Name of the Logical Processing Unit object * @attrib_match_list: List containing match operator attributes */ #define KBASE_TLSTREAM_TL_RET_ATOM_LPU( \ kbdev, \ atom, \ lpu, \ attrib_match_list \ ) \ do { \ int enabled = atomic_read(&kbdev->timeline_flags); \ if (enabled & TLSTREAM_ENABLED) \ __kbase_tlstream_tl_ret_atom_lpu( \ __TL_DISPATCH_STREAM(kbdev, obj), \ atom, lpu, attrib_match_list); \ } while (0) /** * KBASE_TLSTREAM_TL_NRET_CTX_LPU - * context is released by lpu * * @kbdev: Kbase device * @ctx: Name of the context object * @lpu: Name of the Logical Processing Unit object */ #define KBASE_TLSTREAM_TL_NRET_CTX_LPU( \ kbdev, \ ctx, \ lpu \ ) \ do { \ int enabled = atomic_read(&kbdev->timeline_flags); \ if (enabled & TLSTREAM_ENABLED) \ __kbase_tlstream_tl_nret_ctx_lpu( \ __TL_DISPATCH_STREAM(kbdev, obj), \ ctx, lpu); \ } while (0) /** * KBASE_TLSTREAM_TL_NRET_ATOM_CTX - * atom is released by context * * @kbdev: Kbase device * @atom: Atom identifier * @ctx: Name of the context object */ #define KBASE_TLSTREAM_TL_NRET_ATOM_CTX( \ kbdev, \ atom, \ ctx \ ) \ do { \ int enabled = atomic_read(&kbdev->timeline_flags); \ if (enabled & TLSTREAM_ENABLED) \ __kbase_tlstream_tl_nret_atom_ctx( \ __TL_DISPATCH_STREAM(kbdev, obj), \ atom, ctx); \ } while (0) /** * KBASE_TLSTREAM_TL_NRET_ATOM_LPU - * atom is released by lpu * * @kbdev: Kbase device * @atom: Atom identifier * @lpu: Name of the Logical Processing Unit object */ #define KBASE_TLSTREAM_TL_NRET_ATOM_LPU( \ kbdev, \ atom, \ lpu \ ) \ do { \ int enabled = atomic_read(&kbdev->timeline_flags); \ if (enabled & TLSTREAM_ENABLED) \ __kbase_tlstream_tl_nret_atom_lpu( \ __TL_DISPATCH_STREAM(kbdev, obj), \ atom, lpu); \ } while (0) /** * KBASE_TLSTREAM_TL_RET_AS_CTX - * address space is retained by context * * @kbdev: Kbase device * @address_space: Name of the address space object * @ctx: Name of the context object */ #define KBASE_TLSTREAM_TL_RET_AS_CTX( \ kbdev, \ address_space, \ ctx \ ) \ do { \ int enabled = atomic_read(&kbdev->timeline_flags); \ if (enabled & TLSTREAM_ENABLED) \ __kbase_tlstream_tl_ret_as_ctx( \ __TL_DISPATCH_STREAM(kbdev, obj), \ address_space, ctx); \ } while (0) /** * KBASE_TLSTREAM_TL_NRET_AS_CTX - * address space is released by context * * @kbdev: Kbase device * @address_space: Name of the address space object * @ctx: Name of the context object */ #define KBASE_TLSTREAM_TL_NRET_AS_CTX( \ kbdev, \ address_space, \ ctx \ ) \ do { \ int enabled = atomic_read(&kbdev->timeline_flags); \ if (enabled & TLSTREAM_ENABLED) \ __kbase_tlstream_tl_nret_as_ctx( \ __TL_DISPATCH_STREAM(kbdev, obj), \ address_space, ctx); \ } while (0) /** * KBASE_TLSTREAM_TL_RET_ATOM_AS - * atom is retained by address space * * @kbdev: Kbase device * @atom: Atom identifier * @address_space: Name of the address space object */ #define KBASE_TLSTREAM_TL_RET_ATOM_AS( \ kbdev, \ atom, \ address_space \ ) \ do { \ int enabled = atomic_read(&kbdev->timeline_flags); \ if (enabled & TLSTREAM_ENABLED) \ __kbase_tlstream_tl_ret_atom_as( \ __TL_DISPATCH_STREAM(kbdev, obj), \ atom, address_space); \ } while (0) /** * KBASE_TLSTREAM_TL_NRET_ATOM_AS - * atom is released by address space * * @kbdev: Kbase device * @atom: Atom identifier * @address_space: Name of the address space object */ #define KBASE_TLSTREAM_TL_NRET_ATOM_AS( \ kbdev, \ atom, \ address_space \ ) \ do { \ int enabled = atomic_read(&kbdev->timeline_flags); \ if (enabled & TLSTREAM_ENABLED) \ __kbase_tlstream_tl_nret_atom_as( \ __TL_DISPATCH_STREAM(kbdev, obj), \ atom, address_space); \ } while (0) /** * KBASE_TLSTREAM_TL_ATTRIB_ATOM_CONFIG - * atom job slot attributes * * @kbdev: Kbase device * @atom: Atom identifier * @descriptor: Job descriptor address * @affinity: Job affinity * @config: Job config */ #define KBASE_TLSTREAM_TL_ATTRIB_ATOM_CONFIG( \ kbdev, \ atom, \ descriptor, \ affinity, \ config \ ) \ do { \ int enabled = atomic_read(&kbdev->timeline_flags); \ if (enabled & TLSTREAM_ENABLED) \ __kbase_tlstream_tl_attrib_atom_config( \ __TL_DISPATCH_STREAM(kbdev, obj), \ atom, descriptor, affinity, config); \ } while (0) /** * KBASE_TLSTREAM_TL_ATTRIB_ATOM_PRIORITY - * atom priority * * @kbdev: Kbase device * @atom: Atom identifier * @prio: Atom priority */ #define KBASE_TLSTREAM_TL_ATTRIB_ATOM_PRIORITY( \ kbdev, \ atom, \ prio \ ) \ do { \ int enabled = atomic_read(&kbdev->timeline_flags); \ if (enabled & BASE_TLSTREAM_ENABLE_LATENCY_TRACEPOINTS) \ __kbase_tlstream_tl_attrib_atom_priority( \ __TL_DISPATCH_STREAM(kbdev, obj), \ atom, prio); \ } while (0) /** * KBASE_TLSTREAM_TL_ATTRIB_ATOM_STATE - * atom state * * @kbdev: Kbase device * @atom: Atom identifier * @state: Atom state */ #define KBASE_TLSTREAM_TL_ATTRIB_ATOM_STATE( \ kbdev, \ atom, \ state \ ) \ do { \ int enabled = atomic_read(&kbdev->timeline_flags); \ if (enabled & BASE_TLSTREAM_ENABLE_LATENCY_TRACEPOINTS) \ __kbase_tlstream_tl_attrib_atom_state( \ __TL_DISPATCH_STREAM(kbdev, obj), \ atom, state); \ } while (0) /** * KBASE_TLSTREAM_TL_ATTRIB_ATOM_PRIORITIZED - * atom caused priority change * * @kbdev: Kbase device * @atom: Atom identifier */ #define KBASE_TLSTREAM_TL_ATTRIB_ATOM_PRIORITIZED( \ kbdev, \ atom \ ) \ do { \ int enabled = atomic_read(&kbdev->timeline_flags); \ if (enabled & BASE_TLSTREAM_ENABLE_LATENCY_TRACEPOINTS) \ __kbase_tlstream_tl_attrib_atom_prioritized( \ __TL_DISPATCH_STREAM(kbdev, obj), \ atom); \ } while (0) /** * KBASE_TLSTREAM_TL_ATTRIB_ATOM_JIT - * jit done for atom * * @kbdev: Kbase device * @atom: Atom identifier * @edit_addr: Address edited by jit * @new_addr: Address placed into the edited location * @jit_flags: Flags specifying the special requirements for * the JIT allocation. * @mem_flags: Flags defining the properties of a memory region * @j_id: Unique ID provided by the caller, this is used * to pair allocation and free requests. * @com_pgs: The minimum number of physical pages which * should back the allocation. * @extent: Granularity of physical pages to grow the * allocation by during a fault. * @va_pgs: The minimum number of virtual pages required */ #define KBASE_TLSTREAM_TL_ATTRIB_ATOM_JIT( \ kbdev, \ atom, \ edit_addr, \ new_addr, \ jit_flags, \ mem_flags, \ j_id, \ com_pgs, \ extent, \ va_pgs \ ) \ do { \ int enabled = atomic_read(&kbdev->timeline_flags); \ if (enabled & BASE_TLSTREAM_JOB_DUMPING_ENABLED) \ __kbase_tlstream_tl_attrib_atom_jit( \ __TL_DISPATCH_STREAM(kbdev, obj), \ atom, edit_addr, new_addr, jit_flags, mem_flags, j_id, com_pgs, extent, va_pgs); \ } while (0) /** * KBASE_TLSTREAM_TL_JIT_USEDPAGES - * used pages for jit * * @kbdev: Kbase device * @used_pages: Number of pages used for jit * @j_id: Unique ID provided by the caller, this is used * to pair allocation and free requests. */ #define KBASE_TLSTREAM_TL_JIT_USEDPAGES( \ kbdev, \ used_pages, \ j_id \ ) \ do { \ int enabled = atomic_read(&kbdev->timeline_flags); \ if (enabled & TLSTREAM_ENABLED) \ __kbase_tlstream_tl_jit_usedpages( \ __TL_DISPATCH_STREAM(kbdev, obj), \ used_pages, j_id); \ } while (0) /** * KBASE_TLSTREAM_TL_ATTRIB_ATOM_JITALLOCINFO - * Information about JIT allocations * * @kbdev: Kbase device * @atom: Atom identifier * @va_pgs: The minimum number of virtual pages required * @com_pgs: The minimum number of physical pages which * should back the allocation. * @extent: Granularity of physical pages to grow the * allocation by during a fault. * @j_id: Unique ID provided by the caller, this is used * to pair allocation and free requests. * @bin_id: The JIT allocation bin, used in conjunction with * max_allocations to limit the number of each * type of JIT allocation. * @max_allocs: Maximum allocations allowed in this bin. * @jit_flags: Flags specifying the special requirements for * the JIT allocation. * @usg_id: A hint about which allocation should be reused. */ #define KBASE_TLSTREAM_TL_ATTRIB_ATOM_JITALLOCINFO( \ kbdev, \ atom, \ va_pgs, \ com_pgs, \ extent, \ j_id, \ bin_id, \ max_allocs, \ jit_flags, \ usg_id \ ) \ do { \ int enabled = atomic_read(&kbdev->timeline_flags); \ if (enabled & TLSTREAM_ENABLED) \ __kbase_tlstream_tl_attrib_atom_jitallocinfo( \ __TL_DISPATCH_STREAM(kbdev, obj), \ atom, va_pgs, com_pgs, extent, j_id, bin_id, max_allocs, jit_flags, usg_id); \ } while (0) /** * KBASE_TLSTREAM_TL_ATTRIB_ATOM_JITFREEINFO - * Information about JIT frees * * @kbdev: Kbase device * @atom: Atom identifier * @j_id: Unique ID provided by the caller, this is used * to pair allocation and free requests. */ #define KBASE_TLSTREAM_TL_ATTRIB_ATOM_JITFREEINFO( \ kbdev, \ atom, \ j_id \ ) \ do { \ int enabled = atomic_read(&kbdev->timeline_flags); \ if (enabled & TLSTREAM_ENABLED) \ __kbase_tlstream_tl_attrib_atom_jitfreeinfo( \ __TL_DISPATCH_STREAM(kbdev, obj), \ atom, j_id); \ } while (0) /** * KBASE_TLSTREAM_TL_ATTRIB_AS_CONFIG - * address space attributes * * @kbdev: Kbase device * @address_space: Name of the address space object * @transtab: Configuration of the TRANSTAB register * @memattr: Configuration of the MEMATTR register * @transcfg: Configuration of the TRANSCFG register (or zero if not present) */ #define KBASE_TLSTREAM_TL_ATTRIB_AS_CONFIG( \ kbdev, \ address_space, \ transtab, \ memattr, \ transcfg \ ) \ do { \ int enabled = atomic_read(&kbdev->timeline_flags); \ if (enabled & TLSTREAM_ENABLED) \ __kbase_tlstream_tl_attrib_as_config( \ __TL_DISPATCH_STREAM(kbdev, obj), \ address_space, transtab, memattr, transcfg); \ } while (0) /** * KBASE_TLSTREAM_TL_EVENT_LPU_SOFTSTOP - * softstop event on given lpu * * @kbdev: Kbase device * @lpu: Name of the Logical Processing Unit object */ #define KBASE_TLSTREAM_TL_EVENT_LPU_SOFTSTOP( \ kbdev, \ lpu \ ) \ do { \ int enabled = atomic_read(&kbdev->timeline_flags); \ if (enabled & TLSTREAM_ENABLED) \ __kbase_tlstream_tl_event_lpu_softstop( \ __TL_DISPATCH_STREAM(kbdev, obj), \ lpu); \ } while (0) /** * KBASE_TLSTREAM_TL_EVENT_ATOM_SOFTSTOP_EX - * atom softstopped * * @kbdev: Kbase device * @atom: Atom identifier */ #define KBASE_TLSTREAM_TL_EVENT_ATOM_SOFTSTOP_EX( \ kbdev, \ atom \ ) \ do { \ int enabled = atomic_read(&kbdev->timeline_flags); \ if (enabled & TLSTREAM_ENABLED) \ __kbase_tlstream_tl_event_atom_softstop_ex( \ __TL_DISPATCH_STREAM(kbdev, obj), \ atom); \ } while (0) /** * KBASE_TLSTREAM_TL_EVENT_ATOM_SOFTSTOP_ISSUE - * atom softstop issued * * @kbdev: Kbase device * @atom: Atom identifier */ #define KBASE_TLSTREAM_TL_EVENT_ATOM_SOFTSTOP_ISSUE( \ kbdev, \ atom \ ) \ do { \ int enabled = atomic_read(&kbdev->timeline_flags); \ if (enabled & TLSTREAM_ENABLED) \ __kbase_tlstream_tl_event_atom_softstop_issue( \ __TL_DISPATCH_STREAM(kbdev, obj), \ atom); \ } while (0) /** * KBASE_TLSTREAM_TL_EVENT_ATOM_SOFTJOB_START - * atom soft job has started * * @kbdev: Kbase device * @atom: Atom identifier */ #define KBASE_TLSTREAM_TL_EVENT_ATOM_SOFTJOB_START( \ kbdev, \ atom \ ) \ do { \ int enabled = atomic_read(&kbdev->timeline_flags); \ if (enabled & TLSTREAM_ENABLED) \ __kbase_tlstream_tl_event_atom_softjob_start( \ __TL_DISPATCH_STREAM(kbdev, obj), \ atom); \ } while (0) /** * KBASE_TLSTREAM_TL_EVENT_ATOM_SOFTJOB_END - * atom soft job has completed * * @kbdev: Kbase device * @atom: Atom identifier */ #define KBASE_TLSTREAM_TL_EVENT_ATOM_SOFTJOB_END( \ kbdev, \ atom \ ) \ do { \ int enabled = atomic_read(&kbdev->timeline_flags); \ if (enabled & TLSTREAM_ENABLED) \ __kbase_tlstream_tl_event_atom_softjob_end( \ __TL_DISPATCH_STREAM(kbdev, obj), \ atom); \ } while (0) /** * KBASE_TLSTREAM_TL_ARBITER_GRANTED - * Arbiter has granted gpu access * * @kbdev: Kbase device * @gpu: Name of the GPU object */ #define KBASE_TLSTREAM_TL_ARBITER_GRANTED( \ kbdev, \ gpu \ ) \ do { \ int enabled = atomic_read(&kbdev->timeline_flags); \ if (enabled & TLSTREAM_ENABLED) \ __kbase_tlstream_tl_arbiter_granted( \ __TL_DISPATCH_STREAM(kbdev, obj), \ gpu); \ } while (0) /** * KBASE_TLSTREAM_TL_ARBITER_STARTED - * Driver is running again and able to process jobs * * @kbdev: Kbase device * @gpu: Name of the GPU object */ #define KBASE_TLSTREAM_TL_ARBITER_STARTED( \ kbdev, \ gpu \ ) \ do { \ int enabled = atomic_read(&kbdev->timeline_flags); \ if (enabled & TLSTREAM_ENABLED) \ __kbase_tlstream_tl_arbiter_started( \ __TL_DISPATCH_STREAM(kbdev, obj), \ gpu); \ } while (0) /** * KBASE_TLSTREAM_TL_ARBITER_STOP_REQUESTED - * Arbiter has requested driver to stop using gpu * * @kbdev: Kbase device * @gpu: Name of the GPU object */ #define KBASE_TLSTREAM_TL_ARBITER_STOP_REQUESTED( \ kbdev, \ gpu \ ) \ do { \ int enabled = atomic_read(&kbdev->timeline_flags); \ if (enabled & TLSTREAM_ENABLED) \ __kbase_tlstream_tl_arbiter_stop_requested( \ __TL_DISPATCH_STREAM(kbdev, obj), \ gpu); \ } while (0) /** * KBASE_TLSTREAM_TL_ARBITER_STOPPED - * Driver has stopped using gpu * * @kbdev: Kbase device * @gpu: Name of the GPU object */ #define KBASE_TLSTREAM_TL_ARBITER_STOPPED( \ kbdev, \ gpu \ ) \ do { \ int enabled = atomic_read(&kbdev->timeline_flags); \ if (enabled & TLSTREAM_ENABLED) \ __kbase_tlstream_tl_arbiter_stopped( \ __TL_DISPATCH_STREAM(kbdev, obj), \ gpu); \ } while (0) /** * KBASE_TLSTREAM_TL_ARBITER_REQUESTED - * Driver has requested the arbiter for gpu access * * @kbdev: Kbase device * @gpu: Name of the GPU object */ #define KBASE_TLSTREAM_TL_ARBITER_REQUESTED( \ kbdev, \ gpu \ ) \ do { \ int enabled = atomic_read(&kbdev->timeline_flags); \ if (enabled & TLSTREAM_ENABLED) \ __kbase_tlstream_tl_arbiter_requested( \ __TL_DISPATCH_STREAM(kbdev, obj), \ gpu); \ } while (0) /** * KBASE_TLSTREAM_JD_GPU_SOFT_RESET - * gpu soft reset * * @kbdev: Kbase device * @gpu: Name of the GPU object */ #define KBASE_TLSTREAM_JD_GPU_SOFT_RESET( \ kbdev, \ gpu \ ) \ do { \ int enabled = atomic_read(&kbdev->timeline_flags); \ if (enabled & TLSTREAM_ENABLED) \ __kbase_tlstream_jd_gpu_soft_reset( \ __TL_DISPATCH_STREAM(kbdev, obj), \ gpu); \ } while (0) /** * KBASE_TLSTREAM_AUX_PM_STATE - * PM state * * @kbdev: Kbase device * @core_type: Core type (shader, tiler, l2 cache, l3 cache) * @core_state_bitset: 64bits bitmask reporting power state of the cores * (1-ON, 0-OFF) */ #define KBASE_TLSTREAM_AUX_PM_STATE( \ kbdev, \ core_type, \ core_state_bitset \ ) \ do { \ int enabled = atomic_read(&kbdev->timeline_flags); \ if (enabled & TLSTREAM_ENABLED) \ __kbase_tlstream_aux_pm_state( \ __TL_DISPATCH_STREAM(kbdev, aux), \ core_type, core_state_bitset); \ } while (0) /** * KBASE_TLSTREAM_AUX_PAGEFAULT - * Page fault * * @kbdev: Kbase device * @ctx_nr: Kernel context number * @as_nr: Address space number * @page_cnt_change: Number of pages to be added */ #define KBASE_TLSTREAM_AUX_PAGEFAULT( \ kbdev, \ ctx_nr, \ as_nr, \ page_cnt_change \ ) \ do { \ int enabled = atomic_read(&kbdev->timeline_flags); \ if (enabled & TLSTREAM_ENABLED) \ __kbase_tlstream_aux_pagefault( \ __TL_DISPATCH_STREAM(kbdev, aux), \ ctx_nr, as_nr, page_cnt_change); \ } while (0) /** * KBASE_TLSTREAM_AUX_PAGESALLOC - * Total alloc pages change * * @kbdev: Kbase device * @ctx_nr: Kernel context number * @page_cnt: Number of pages used by the context */ #define KBASE_TLSTREAM_AUX_PAGESALLOC( \ kbdev, \ ctx_nr, \ page_cnt \ ) \ do { \ int enabled = atomic_read(&kbdev->timeline_flags); \ if (enabled & TLSTREAM_ENABLED) \ __kbase_tlstream_aux_pagesalloc( \ __TL_DISPATCH_STREAM(kbdev, aux), \ ctx_nr, page_cnt); \ } while (0) /** * KBASE_TLSTREAM_AUX_DEVFREQ_TARGET - * New device frequency target * * @kbdev: Kbase device * @target_freq: New target frequency */ #define KBASE_TLSTREAM_AUX_DEVFREQ_TARGET( \ kbdev, \ target_freq \ ) \ do { \ int enabled = atomic_read(&kbdev->timeline_flags); \ if (enabled & TLSTREAM_ENABLED) \ __kbase_tlstream_aux_devfreq_target( \ __TL_DISPATCH_STREAM(kbdev, aux), \ target_freq); \ } while (0) /** * KBASE_TLSTREAM_AUX_PROTECTED_ENTER_START - * enter protected mode start * * @kbdev: Kbase device * @gpu: Name of the GPU object */ #define KBASE_TLSTREAM_AUX_PROTECTED_ENTER_START( \ kbdev, \ gpu \ ) \ do { \ int enabled = atomic_read(&kbdev->timeline_flags); \ if (enabled & BASE_TLSTREAM_ENABLE_LATENCY_TRACEPOINTS) \ __kbase_tlstream_aux_protected_enter_start( \ __TL_DISPATCH_STREAM(kbdev, aux), \ gpu); \ } while (0) /** * KBASE_TLSTREAM_AUX_PROTECTED_ENTER_END - * enter protected mode end * * @kbdev: Kbase device * @gpu: Name of the GPU object */ #define KBASE_TLSTREAM_AUX_PROTECTED_ENTER_END( \ kbdev, \ gpu \ ) \ do { \ int enabled = atomic_read(&kbdev->timeline_flags); \ if (enabled & BASE_TLSTREAM_ENABLE_LATENCY_TRACEPOINTS) \ __kbase_tlstream_aux_protected_enter_end( \ __TL_DISPATCH_STREAM(kbdev, aux), \ gpu); \ } while (0) /** * KBASE_TLSTREAM_AUX_PROTECTED_LEAVE_START - * leave protected mode start * * @kbdev: Kbase device * @gpu: Name of the GPU object */ #define KBASE_TLSTREAM_AUX_PROTECTED_LEAVE_START( \ kbdev, \ gpu \ ) \ do { \ int enabled = atomic_read(&kbdev->timeline_flags); \ if (enabled & BASE_TLSTREAM_ENABLE_LATENCY_TRACEPOINTS) \ __kbase_tlstream_aux_protected_leave_start( \ __TL_DISPATCH_STREAM(kbdev, aux), \ gpu); \ } while (0) /** * KBASE_TLSTREAM_AUX_PROTECTED_LEAVE_END - * leave protected mode end * * @kbdev: Kbase device * @gpu: Name of the GPU object */ #define KBASE_TLSTREAM_AUX_PROTECTED_LEAVE_END( \ kbdev, \ gpu \ ) \ do { \ int enabled = atomic_read(&kbdev->timeline_flags); \ if (enabled & BASE_TLSTREAM_ENABLE_LATENCY_TRACEPOINTS) \ __kbase_tlstream_aux_protected_leave_end( \ __TL_DISPATCH_STREAM(kbdev, aux), \ gpu); \ } while (0) /** * KBASE_TLSTREAM_AUX_JIT_STATS - * per-bin JIT statistics * * @kbdev: Kbase device * @ctx_nr: Kernel context number * @bid: JIT bin id * @max_allocs: Maximum allocations allowed in this bin. * @allocs: Number of active allocations in this bin * @va_pages: Number of virtual pages allocated in this bin * @ph_pages: Number of physical pages allocated in this bin */ #define KBASE_TLSTREAM_AUX_JIT_STATS( \ kbdev, \ ctx_nr, \ bid, \ max_allocs, \ allocs, \ va_pages, \ ph_pages \ ) \ do { \ int enabled = atomic_read(&kbdev->timeline_flags); \ if (enabled & TLSTREAM_ENABLED) \ __kbase_tlstream_aux_jit_stats( \ __TL_DISPATCH_STREAM(kbdev, aux), \ ctx_nr, bid, max_allocs, allocs, va_pages, ph_pages); \ } while (0) /** * KBASE_TLSTREAM_AUX_TILER_HEAP_STATS - * Tiler Heap statistics * * @kbdev: Kbase device * @ctx_nr: Kernel context number * @heap_id: Unique id used to represent a heap under a context * @va_pages: Number of virtual pages allocated in this bin * @ph_pages: Number of physical pages allocated in this bin * @max_chunks: The maximum number of chunks that the heap should be allowed to use * @chunk_size: Size of each chunk in tiler heap, in bytes * @chunk_count: The number of chunks currently allocated in the tiler heap * @target_in_flight: Number of render-passes that the driver should attempt * to keep in flight for which allocation of new chunks is allowed * @nr_in_flight: Number of render-passes that are in flight */ #define KBASE_TLSTREAM_AUX_TILER_HEAP_STATS( \ kbdev, \ ctx_nr, \ heap_id, \ va_pages, \ ph_pages, \ max_chunks, \ chunk_size, \ chunk_count, \ target_in_flight, \ nr_in_flight \ ) \ do { \ int enabled = atomic_read(&kbdev->timeline_flags); \ if (enabled & TLSTREAM_ENABLED) \ __kbase_tlstream_aux_tiler_heap_stats( \ __TL_DISPATCH_STREAM(kbdev, aux), \ ctx_nr, heap_id, va_pages, ph_pages, max_chunks, chunk_size, chunk_count, target_in_flight, nr_in_flight); \ } while (0) /** * KBASE_TLSTREAM_AUX_EVENT_JOB_SLOT - * event on a given job slot * * @kbdev: Kbase device * @ctx: Name of the context object * @slot_nr: Job slot number * @atom_nr: Sequential number of an atom * @event: Event type. One of TL_JS_EVENT values */ #define KBASE_TLSTREAM_AUX_EVENT_JOB_SLOT( \ kbdev, \ ctx, \ slot_nr, \ atom_nr, \ event \ ) \ do { \ int enabled = atomic_read(&kbdev->timeline_flags); \ if (enabled & TLSTREAM_ENABLED) \ __kbase_tlstream_aux_event_job_slot( \ __TL_DISPATCH_STREAM(kbdev, aux), \ ctx, slot_nr, atom_nr, event); \ } while (0) /** * KBASE_TLSTREAM_TL_KBASE_NEW_DEVICE - * New KBase Device * * @kbdev: Kbase device * @kbase_device_id: The id of the physical hardware * @kbase_device_gpu_core_count: The number of gpu cores in the physical hardware * @kbase_device_max_num_csgs: The max number of CSGs the physical hardware supports * @kbase_device_as_count: The number of address spaces the physical hardware has available */ #if MALI_USE_CSF #define KBASE_TLSTREAM_TL_KBASE_NEW_DEVICE( \ kbdev, \ kbase_device_id, \ kbase_device_gpu_core_count, \ kbase_device_max_num_csgs, \ kbase_device_as_count \ ) \ do { \ int enabled = atomic_read(&kbdev->timeline_flags); \ if (enabled & BASE_TLSTREAM_ENABLE_CSF_TRACEPOINTS) \ __kbase_tlstream_tl_kbase_new_device( \ __TL_DISPATCH_STREAM(kbdev, obj), \ kbase_device_id, kbase_device_gpu_core_count, kbase_device_max_num_csgs, kbase_device_as_count); \ } while (0) #else #define KBASE_TLSTREAM_TL_KBASE_NEW_DEVICE( \ kbdev, \ kbase_device_id, \ kbase_device_gpu_core_count, \ kbase_device_max_num_csgs, \ kbase_device_as_count \ ) \ do { } while (0) #endif /* MALI_USE_CSF */ /** * KBASE_TLSTREAM_TL_KBASE_DEVICE_PROGRAM_CSG - * CSG is programmed to a slot * * @kbdev: Kbase device * @kbase_device_id: The id of the physical hardware * @gpu_cmdq_grp_handle: GPU Command Queue Group handle which will match userspace * @kbase_device_csg_slot_index: The index of the slot in the scheduler being programmed */ #if MALI_USE_CSF #define KBASE_TLSTREAM_TL_KBASE_DEVICE_PROGRAM_CSG( \ kbdev, \ kbase_device_id, \ gpu_cmdq_grp_handle, \ kbase_device_csg_slot_index \ ) \ do { \ int enabled = atomic_read(&kbdev->timeline_flags); \ if (enabled & BASE_TLSTREAM_ENABLE_CSF_TRACEPOINTS) \ __kbase_tlstream_tl_kbase_device_program_csg( \ __TL_DISPATCH_STREAM(kbdev, obj), \ kbase_device_id, gpu_cmdq_grp_handle, kbase_device_csg_slot_index); \ } while (0) #else #define KBASE_TLSTREAM_TL_KBASE_DEVICE_PROGRAM_CSG( \ kbdev, \ kbase_device_id, \ gpu_cmdq_grp_handle, \ kbase_device_csg_slot_index \ ) \ do { } while (0) #endif /* MALI_USE_CSF */ /** * KBASE_TLSTREAM_TL_KBASE_DEVICE_DEPROGRAM_CSG - * CSG is deprogrammed from a slot * * @kbdev: Kbase device * @kbase_device_id: The id of the physical hardware * @kbase_device_csg_slot_index: The index of the slot in the scheduler being programmed */ #if MALI_USE_CSF #define KBASE_TLSTREAM_TL_KBASE_DEVICE_DEPROGRAM_CSG( \ kbdev, \ kbase_device_id, \ kbase_device_csg_slot_index \ ) \ do { \ int enabled = atomic_read(&kbdev->timeline_flags); \ if (enabled & BASE_TLSTREAM_ENABLE_CSF_TRACEPOINTS) \ __kbase_tlstream_tl_kbase_device_deprogram_csg( \ __TL_DISPATCH_STREAM(kbdev, obj), \ kbase_device_id, kbase_device_csg_slot_index); \ } while (0) #else #define KBASE_TLSTREAM_TL_KBASE_DEVICE_DEPROGRAM_CSG( \ kbdev, \ kbase_device_id, \ kbase_device_csg_slot_index \ ) \ do { } while (0) #endif /* MALI_USE_CSF */ /** * KBASE_TLSTREAM_TL_KBASE_NEW_CTX - * New KBase Context * * @kbdev: Kbase device * @kernel_ctx_id: Unique ID for the KBase Context * @kbase_device_id: The id of the physical hardware */ #if MALI_USE_CSF #define KBASE_TLSTREAM_TL_KBASE_NEW_CTX( \ kbdev, \ kernel_ctx_id, \ kbase_device_id \ ) \ do { \ int enabled = atomic_read(&kbdev->timeline_flags); \ if (enabled & BASE_TLSTREAM_ENABLE_CSF_TRACEPOINTS) \ __kbase_tlstream_tl_kbase_new_ctx( \ __TL_DISPATCH_STREAM(kbdev, obj), \ kernel_ctx_id, kbase_device_id); \ } while (0) #else #define KBASE_TLSTREAM_TL_KBASE_NEW_CTX( \ kbdev, \ kernel_ctx_id, \ kbase_device_id \ ) \ do { } while (0) #endif /* MALI_USE_CSF */ /** * KBASE_TLSTREAM_TL_KBASE_DEL_CTX - * Delete KBase Context * * @kbdev: Kbase device * @kernel_ctx_id: Unique ID for the KBase Context */ #if MALI_USE_CSF #define KBASE_TLSTREAM_TL_KBASE_DEL_CTX( \ kbdev, \ kernel_ctx_id \ ) \ do { \ int enabled = atomic_read(&kbdev->timeline_flags); \ if (enabled & BASE_TLSTREAM_ENABLE_CSF_TRACEPOINTS) \ __kbase_tlstream_tl_kbase_del_ctx( \ __TL_DISPATCH_STREAM(kbdev, obj), \ kernel_ctx_id); \ } while (0) #else #define KBASE_TLSTREAM_TL_KBASE_DEL_CTX( \ kbdev, \ kernel_ctx_id \ ) \ do { } while (0) #endif /* MALI_USE_CSF */ /** * KBASE_TLSTREAM_TL_KBASE_CTX_ASSIGN_AS - * Address Space is assigned to a KBase context * * @kbdev: Kbase device * @kernel_ctx_id: Unique ID for the KBase Context * @kbase_device_as_index: The index of the device address space being assigned */ #if MALI_USE_CSF #define KBASE_TLSTREAM_TL_KBASE_CTX_ASSIGN_AS( \ kbdev, \ kernel_ctx_id, \ kbase_device_as_index \ ) \ do { \ int enabled = atomic_read(&kbdev->timeline_flags); \ if (enabled & BASE_TLSTREAM_ENABLE_CSF_TRACEPOINTS) \ __kbase_tlstream_tl_kbase_ctx_assign_as( \ __TL_DISPATCH_STREAM(kbdev, obj), \ kernel_ctx_id, kbase_device_as_index); \ } while (0) #else #define KBASE_TLSTREAM_TL_KBASE_CTX_ASSIGN_AS( \ kbdev, \ kernel_ctx_id, \ kbase_device_as_index \ ) \ do { } while (0) #endif /* MALI_USE_CSF */ /** * KBASE_TLSTREAM_TL_KBASE_CTX_UNASSIGN_AS - * Address Space is unassigned from a KBase context * * @kbdev: Kbase device * @kernel_ctx_id: Unique ID for the KBase Context */ #if MALI_USE_CSF #define KBASE_TLSTREAM_TL_KBASE_CTX_UNASSIGN_AS( \ kbdev, \ kernel_ctx_id \ ) \ do { \ int enabled = atomic_read(&kbdev->timeline_flags); \ if (enabled & BASE_TLSTREAM_ENABLE_CSF_TRACEPOINTS) \ __kbase_tlstream_tl_kbase_ctx_unassign_as( \ __TL_DISPATCH_STREAM(kbdev, obj), \ kernel_ctx_id); \ } while (0) #else #define KBASE_TLSTREAM_TL_KBASE_CTX_UNASSIGN_AS( \ kbdev, \ kernel_ctx_id \ ) \ do { } while (0) #endif /* MALI_USE_CSF */ /** * KBASE_TLSTREAM_TL_KBASE_NEW_KCPUQUEUE - * New KCPU Queue * * @kbdev: Kbase device * @kcpu_queue: KCPU queue * @kernel_ctx_id: Unique ID for the KBase Context * @kcpuq_num_pending_cmds: Number of commands already enqueued * in the KCPU queue */ #if MALI_USE_CSF #define KBASE_TLSTREAM_TL_KBASE_NEW_KCPUQUEUE( \ kbdev, \ kcpu_queue, \ kernel_ctx_id, \ kcpuq_num_pending_cmds \ ) \ do { \ int enabled = atomic_read(&kbdev->timeline_flags); \ if (enabled & BASE_TLSTREAM_ENABLE_CSF_TRACEPOINTS) \ __kbase_tlstream_tl_kbase_new_kcpuqueue( \ __TL_DISPATCH_STREAM(kbdev, obj), \ kcpu_queue, kernel_ctx_id, kcpuq_num_pending_cmds); \ } while (0) #else #define KBASE_TLSTREAM_TL_KBASE_NEW_KCPUQUEUE( \ kbdev, \ kcpu_queue, \ kernel_ctx_id, \ kcpuq_num_pending_cmds \ ) \ do { } while (0) #endif /* MALI_USE_CSF */ /** * KBASE_TLSTREAM_TL_KBASE_DEL_KCPUQUEUE - * Delete KCPU Queue * * @kbdev: Kbase device * @kcpu_queue: KCPU queue */ #if MALI_USE_CSF #define KBASE_TLSTREAM_TL_KBASE_DEL_KCPUQUEUE( \ kbdev, \ kcpu_queue \ ) \ do { \ int enabled = atomic_read(&kbdev->timeline_flags); \ if (enabled & BASE_TLSTREAM_ENABLE_CSF_TRACEPOINTS) \ __kbase_tlstream_tl_kbase_del_kcpuqueue( \ __TL_DISPATCH_STREAM(kbdev, obj), \ kcpu_queue); \ } while (0) #else #define KBASE_TLSTREAM_TL_KBASE_DEL_KCPUQUEUE( \ kbdev, \ kcpu_queue \ ) \ do { } while (0) #endif /* MALI_USE_CSF */ /** * KBASE_TLSTREAM_TL_KBASE_KCPUQUEUE_ENQUEUE_FENCE_SIGNAL - * KCPU Queue enqueues Signal on Fence * * @kbdev: Kbase device * @kcpu_queue: KCPU queue * @fence: Fence object handle */ #if MALI_USE_CSF #define KBASE_TLSTREAM_TL_KBASE_KCPUQUEUE_ENQUEUE_FENCE_SIGNAL( \ kbdev, \ kcpu_queue, \ fence \ ) \ do { \ int enabled = atomic_read(&kbdev->timeline_flags); \ if (enabled & BASE_TLSTREAM_ENABLE_CSF_TRACEPOINTS) \ __kbase_tlstream_tl_kbase_kcpuqueue_enqueue_fence_signal( \ __TL_DISPATCH_STREAM(kbdev, obj), \ kcpu_queue, fence); \ } while (0) #else #define KBASE_TLSTREAM_TL_KBASE_KCPUQUEUE_ENQUEUE_FENCE_SIGNAL( \ kbdev, \ kcpu_queue, \ fence \ ) \ do { } while (0) #endif /* MALI_USE_CSF */ /** * KBASE_TLSTREAM_TL_KBASE_KCPUQUEUE_ENQUEUE_FENCE_WAIT - * KCPU Queue enqueues Wait on Fence * * @kbdev: Kbase device * @kcpu_queue: KCPU queue * @fence: Fence object handle */ #if MALI_USE_CSF #define KBASE_TLSTREAM_TL_KBASE_KCPUQUEUE_ENQUEUE_FENCE_WAIT( \ kbdev, \ kcpu_queue, \ fence \ ) \ do { \ int enabled = atomic_read(&kbdev->timeline_flags); \ if (enabled & BASE_TLSTREAM_ENABLE_CSF_TRACEPOINTS) \ __kbase_tlstream_tl_kbase_kcpuqueue_enqueue_fence_wait( \ __TL_DISPATCH_STREAM(kbdev, obj), \ kcpu_queue, fence); \ } while (0) #else #define KBASE_TLSTREAM_TL_KBASE_KCPUQUEUE_ENQUEUE_FENCE_WAIT( \ kbdev, \ kcpu_queue, \ fence \ ) \ do { } while (0) #endif /* MALI_USE_CSF */ /** * KBASE_TLSTREAM_TL_KBASE_KCPUQUEUE_ENQUEUE_CQS_WAIT - * KCPU Queue enqueues Wait on Cross Queue Sync Object * * @kbdev: Kbase device * @kcpu_queue: KCPU queue * @cqs_obj_gpu_addr: CQS Object GPU pointer * @cqs_obj_compare_value: Semaphore value that should be exceeded * for the WAIT to pass * @cqs_obj_inherit_error: Indicates the error state should be inherited into the queue or not */ #if MALI_USE_CSF #define KBASE_TLSTREAM_TL_KBASE_KCPUQUEUE_ENQUEUE_CQS_WAIT( \ kbdev, \ kcpu_queue, \ cqs_obj_gpu_addr, \ cqs_obj_compare_value, \ cqs_obj_inherit_error \ ) \ do { \ int enabled = atomic_read(&kbdev->timeline_flags); \ if (enabled & BASE_TLSTREAM_ENABLE_CSF_TRACEPOINTS) \ __kbase_tlstream_tl_kbase_kcpuqueue_enqueue_cqs_wait( \ __TL_DISPATCH_STREAM(kbdev, obj), \ kcpu_queue, cqs_obj_gpu_addr, cqs_obj_compare_value, cqs_obj_inherit_error); \ } while (0) #else #define KBASE_TLSTREAM_TL_KBASE_KCPUQUEUE_ENQUEUE_CQS_WAIT( \ kbdev, \ kcpu_queue, \ cqs_obj_gpu_addr, \ cqs_obj_compare_value, \ cqs_obj_inherit_error \ ) \ do { } while (0) #endif /* MALI_USE_CSF */ /** * KBASE_TLSTREAM_TL_KBASE_KCPUQUEUE_ENQUEUE_CQS_SET - * KCPU Queue enqueues Set on Cross Queue Sync Object * * @kbdev: Kbase device * @kcpu_queue: KCPU queue * @cqs_obj_gpu_addr: CQS Object GPU pointer */ #if MALI_USE_CSF #define KBASE_TLSTREAM_TL_KBASE_KCPUQUEUE_ENQUEUE_CQS_SET( \ kbdev, \ kcpu_queue, \ cqs_obj_gpu_addr \ ) \ do { \ int enabled = atomic_read(&kbdev->timeline_flags); \ if (enabled & BASE_TLSTREAM_ENABLE_CSF_TRACEPOINTS) \ __kbase_tlstream_tl_kbase_kcpuqueue_enqueue_cqs_set( \ __TL_DISPATCH_STREAM(kbdev, obj), \ kcpu_queue, cqs_obj_gpu_addr); \ } while (0) #else #define KBASE_TLSTREAM_TL_KBASE_KCPUQUEUE_ENQUEUE_CQS_SET( \ kbdev, \ kcpu_queue, \ cqs_obj_gpu_addr \ ) \ do { } while (0) #endif /* MALI_USE_CSF */ /** * KBASE_TLSTREAM_TL_KBASE_KCPUQUEUE_ENQUEUE_MAP_IMPORT - * KCPU Queue enqueues Map Import * * @kbdev: Kbase device * @kcpu_queue: KCPU queue * @map_import_buf_gpu_addr: Map import buffer GPU pointer */ #if MALI_USE_CSF #define KBASE_TLSTREAM_TL_KBASE_KCPUQUEUE_ENQUEUE_MAP_IMPORT( \ kbdev, \ kcpu_queue, \ map_import_buf_gpu_addr \ ) \ do { \ int enabled = atomic_read(&kbdev->timeline_flags); \ if (enabled & BASE_TLSTREAM_ENABLE_CSF_TRACEPOINTS) \ __kbase_tlstream_tl_kbase_kcpuqueue_enqueue_map_import( \ __TL_DISPATCH_STREAM(kbdev, obj), \ kcpu_queue, map_import_buf_gpu_addr); \ } while (0) #else #define KBASE_TLSTREAM_TL_KBASE_KCPUQUEUE_ENQUEUE_MAP_IMPORT( \ kbdev, \ kcpu_queue, \ map_import_buf_gpu_addr \ ) \ do { } while (0) #endif /* MALI_USE_CSF */ /** * KBASE_TLSTREAM_TL_KBASE_KCPUQUEUE_ENQUEUE_UNMAP_IMPORT - * KCPU Queue enqueues Unmap Import * * @kbdev: Kbase device * @kcpu_queue: KCPU queue * @map_import_buf_gpu_addr: Map import buffer GPU pointer */ #if MALI_USE_CSF #define KBASE_TLSTREAM_TL_KBASE_KCPUQUEUE_ENQUEUE_UNMAP_IMPORT( \ kbdev, \ kcpu_queue, \ map_import_buf_gpu_addr \ ) \ do { \ int enabled = atomic_read(&kbdev->timeline_flags); \ if (enabled & BASE_TLSTREAM_ENABLE_CSF_TRACEPOINTS) \ __kbase_tlstream_tl_kbase_kcpuqueue_enqueue_unmap_import( \ __TL_DISPATCH_STREAM(kbdev, obj), \ kcpu_queue, map_import_buf_gpu_addr); \ } while (0) #else #define KBASE_TLSTREAM_TL_KBASE_KCPUQUEUE_ENQUEUE_UNMAP_IMPORT( \ kbdev, \ kcpu_queue, \ map_import_buf_gpu_addr \ ) \ do { } while (0) #endif /* MALI_USE_CSF */ /** * KBASE_TLSTREAM_TL_KBASE_KCPUQUEUE_ENQUEUE_UNMAP_IMPORT_FORCE - * KCPU Queue enqueues Unmap Import ignoring reference count * * @kbdev: Kbase device * @kcpu_queue: KCPU queue * @map_import_buf_gpu_addr: Map import buffer GPU pointer */ #if MALI_USE_CSF #define KBASE_TLSTREAM_TL_KBASE_KCPUQUEUE_ENQUEUE_UNMAP_IMPORT_FORCE( \ kbdev, \ kcpu_queue, \ map_import_buf_gpu_addr \ ) \ do { \ int enabled = atomic_read(&kbdev->timeline_flags); \ if (enabled & BASE_TLSTREAM_ENABLE_CSF_TRACEPOINTS) \ __kbase_tlstream_tl_kbase_kcpuqueue_enqueue_unmap_import_force( \ __TL_DISPATCH_STREAM(kbdev, obj), \ kcpu_queue, map_import_buf_gpu_addr); \ } while (0) #else #define KBASE_TLSTREAM_TL_KBASE_KCPUQUEUE_ENQUEUE_UNMAP_IMPORT_FORCE( \ kbdev, \ kcpu_queue, \ map_import_buf_gpu_addr \ ) \ do { } while (0) #endif /* MALI_USE_CSF */ /** * KBASE_TLSTREAM_TL_KBASE_KCPUQUEUE_ENQUEUE_ERROR_BARRIER - * KCPU Queue enqueues Error Barrier * * @kbdev: Kbase device * @kcpu_queue: KCPU queue */ #if MALI_USE_CSF #define KBASE_TLSTREAM_TL_KBASE_KCPUQUEUE_ENQUEUE_ERROR_BARRIER( \ kbdev, \ kcpu_queue \ ) \ do { \ int enabled = atomic_read(&kbdev->timeline_flags); \ if (enabled & BASE_TLSTREAM_ENABLE_CSF_TRACEPOINTS) \ __kbase_tlstream_tl_kbase_kcpuqueue_enqueue_error_barrier( \ __TL_DISPATCH_STREAM(kbdev, obj), \ kcpu_queue); \ } while (0) #else #define KBASE_TLSTREAM_TL_KBASE_KCPUQUEUE_ENQUEUE_ERROR_BARRIER( \ kbdev, \ kcpu_queue \ ) \ do { } while (0) #endif /* MALI_USE_CSF */ /** * KBASE_TLSTREAM_TL_KBASE_KCPUQUEUE_ENQUEUE_GROUP_SUSPEND - * KCPU Queue enqueues Group Suspend * * @kbdev: Kbase device * @kcpu_queue: KCPU queue * @group_suspend_buf: Pointer to the suspend buffer structure * @gpu_cmdq_grp_handle: GPU Command Queue Group handle which will match userspace */ #if MALI_USE_CSF #define KBASE_TLSTREAM_TL_KBASE_KCPUQUEUE_ENQUEUE_GROUP_SUSPEND( \ kbdev, \ kcpu_queue, \ group_suspend_buf, \ gpu_cmdq_grp_handle \ ) \ do { \ int enabled = atomic_read(&kbdev->timeline_flags); \ if (enabled & BASE_TLSTREAM_ENABLE_CSF_TRACEPOINTS) \ __kbase_tlstream_tl_kbase_kcpuqueue_enqueue_group_suspend( \ __TL_DISPATCH_STREAM(kbdev, obj), \ kcpu_queue, group_suspend_buf, gpu_cmdq_grp_handle); \ } while (0) #else #define KBASE_TLSTREAM_TL_KBASE_KCPUQUEUE_ENQUEUE_GROUP_SUSPEND( \ kbdev, \ kcpu_queue, \ group_suspend_buf, \ gpu_cmdq_grp_handle \ ) \ do { } while (0) #endif /* MALI_USE_CSF */ /** * KBASE_TLSTREAM_TL_KBASE_ARRAY_BEGIN_KCPUQUEUE_ENQUEUE_JIT_ALLOC - * Begin array of KCPU Queue enqueues JIT Alloc * * @kbdev: Kbase device * @kcpu_queue: KCPU queue */ #if MALI_USE_CSF #define KBASE_TLSTREAM_TL_KBASE_ARRAY_BEGIN_KCPUQUEUE_ENQUEUE_JIT_ALLOC( \ kbdev, \ kcpu_queue \ ) \ do { \ int enabled = atomic_read(&kbdev->timeline_flags); \ if (enabled & BASE_TLSTREAM_ENABLE_CSF_TRACEPOINTS) \ __kbase_tlstream_tl_kbase_array_begin_kcpuqueue_enqueue_jit_alloc( \ __TL_DISPATCH_STREAM(kbdev, obj), \ kcpu_queue); \ } while (0) #else #define KBASE_TLSTREAM_TL_KBASE_ARRAY_BEGIN_KCPUQUEUE_ENQUEUE_JIT_ALLOC( \ kbdev, \ kcpu_queue \ ) \ do { } while (0) #endif /* MALI_USE_CSF */ /** * KBASE_TLSTREAM_TL_KBASE_ARRAY_ITEM_KCPUQUEUE_ENQUEUE_JIT_ALLOC - * Array item of KCPU Queue enqueues JIT Alloc * * @kbdev: Kbase device * @kcpu_queue: KCPU queue * @jit_alloc_gpu_alloc_addr_dest: The GPU virtual address to write * the JIT allocated GPU virtual address to * @jit_alloc_va_pages: The minimum number of virtual pages required * @jit_alloc_commit_pages: The minimum number of physical pages which * should back the allocation * @jit_alloc_extent: Granularity of physical pages to grow the allocation * by during a fault * @jit_alloc_jit_id: Unique ID provided by the caller, this is used * to pair allocation and free requests. Zero is not a valid value * @jit_alloc_bin_id: The JIT allocation bin, used in conjunction with * max_allocations to limit the number of each type of JIT allocation * @jit_alloc_max_allocations: The maximum number of allocations * allowed within the bin specified by bin_id. Should be the same for all * JIT allocations within the same bin. * @jit_alloc_flags: Flags specifying the special requirements for the * JIT allocation * @jit_alloc_usage_id: A hint about which allocation should be * reused. The kernel should attempt to use a previous allocation with the same * usage_id */ #if MALI_USE_CSF #define KBASE_TLSTREAM_TL_KBASE_ARRAY_ITEM_KCPUQUEUE_ENQUEUE_JIT_ALLOC( \ kbdev, \ kcpu_queue, \ jit_alloc_gpu_alloc_addr_dest, \ jit_alloc_va_pages, \ jit_alloc_commit_pages, \ jit_alloc_extent, \ jit_alloc_jit_id, \ jit_alloc_bin_id, \ jit_alloc_max_allocations, \ jit_alloc_flags, \ jit_alloc_usage_id \ ) \ do { \ int enabled = atomic_read(&kbdev->timeline_flags); \ if (enabled & BASE_TLSTREAM_ENABLE_CSF_TRACEPOINTS) \ __kbase_tlstream_tl_kbase_array_item_kcpuqueue_enqueue_jit_alloc( \ __TL_DISPATCH_STREAM(kbdev, obj), \ kcpu_queue, jit_alloc_gpu_alloc_addr_dest, jit_alloc_va_pages, jit_alloc_commit_pages, jit_alloc_extent, jit_alloc_jit_id, jit_alloc_bin_id, jit_alloc_max_allocations, jit_alloc_flags, jit_alloc_usage_id); \ } while (0) #else #define KBASE_TLSTREAM_TL_KBASE_ARRAY_ITEM_KCPUQUEUE_ENQUEUE_JIT_ALLOC( \ kbdev, \ kcpu_queue, \ jit_alloc_gpu_alloc_addr_dest, \ jit_alloc_va_pages, \ jit_alloc_commit_pages, \ jit_alloc_extent, \ jit_alloc_jit_id, \ jit_alloc_bin_id, \ jit_alloc_max_allocations, \ jit_alloc_flags, \ jit_alloc_usage_id \ ) \ do { } while (0) #endif /* MALI_USE_CSF */ /** * KBASE_TLSTREAM_TL_KBASE_ARRAY_END_KCPUQUEUE_ENQUEUE_JIT_ALLOC - * End array of KCPU Queue enqueues JIT Alloc * * @kbdev: Kbase device * @kcpu_queue: KCPU queue */ #if MALI_USE_CSF #define KBASE_TLSTREAM_TL_KBASE_ARRAY_END_KCPUQUEUE_ENQUEUE_JIT_ALLOC( \ kbdev, \ kcpu_queue \ ) \ do { \ int enabled = atomic_read(&kbdev->timeline_flags); \ if (enabled & BASE_TLSTREAM_ENABLE_CSF_TRACEPOINTS) \ __kbase_tlstream_tl_kbase_array_end_kcpuqueue_enqueue_jit_alloc( \ __TL_DISPATCH_STREAM(kbdev, obj), \ kcpu_queue); \ } while (0) #else #define KBASE_TLSTREAM_TL_KBASE_ARRAY_END_KCPUQUEUE_ENQUEUE_JIT_ALLOC( \ kbdev, \ kcpu_queue \ ) \ do { } while (0) #endif /* MALI_USE_CSF */ /** * KBASE_TLSTREAM_TL_KBASE_ARRAY_BEGIN_KCPUQUEUE_ENQUEUE_JIT_FREE - * Begin array of KCPU Queue enqueues JIT Free * * @kbdev: Kbase device * @kcpu_queue: KCPU queue */ #if MALI_USE_CSF #define KBASE_TLSTREAM_TL_KBASE_ARRAY_BEGIN_KCPUQUEUE_ENQUEUE_JIT_FREE( \ kbdev, \ kcpu_queue \ ) \ do { \ int enabled = atomic_read(&kbdev->timeline_flags); \ if (enabled & BASE_TLSTREAM_ENABLE_CSF_TRACEPOINTS) \ __kbase_tlstream_tl_kbase_array_begin_kcpuqueue_enqueue_jit_free( \ __TL_DISPATCH_STREAM(kbdev, obj), \ kcpu_queue); \ } while (0) #else #define KBASE_TLSTREAM_TL_KBASE_ARRAY_BEGIN_KCPUQUEUE_ENQUEUE_JIT_FREE( \ kbdev, \ kcpu_queue \ ) \ do { } while (0) #endif /* MALI_USE_CSF */ /** * KBASE_TLSTREAM_TL_KBASE_ARRAY_ITEM_KCPUQUEUE_ENQUEUE_JIT_FREE - * Array item of KCPU Queue enqueues JIT Free * * @kbdev: Kbase device * @kcpu_queue: KCPU queue * @jit_alloc_jit_id: Unique ID provided by the caller, this is used * to pair allocation and free requests. Zero is not a valid value */ #if MALI_USE_CSF #define KBASE_TLSTREAM_TL_KBASE_ARRAY_ITEM_KCPUQUEUE_ENQUEUE_JIT_FREE( \ kbdev, \ kcpu_queue, \ jit_alloc_jit_id \ ) \ do { \ int enabled = atomic_read(&kbdev->timeline_flags); \ if (enabled & BASE_TLSTREAM_ENABLE_CSF_TRACEPOINTS) \ __kbase_tlstream_tl_kbase_array_item_kcpuqueue_enqueue_jit_free( \ __TL_DISPATCH_STREAM(kbdev, obj), \ kcpu_queue, jit_alloc_jit_id); \ } while (0) #else #define KBASE_TLSTREAM_TL_KBASE_ARRAY_ITEM_KCPUQUEUE_ENQUEUE_JIT_FREE( \ kbdev, \ kcpu_queue, \ jit_alloc_jit_id \ ) \ do { } while (0) #endif /* MALI_USE_CSF */ /** * KBASE_TLSTREAM_TL_KBASE_ARRAY_END_KCPUQUEUE_ENQUEUE_JIT_FREE - * End array of KCPU Queue enqueues JIT Free * * @kbdev: Kbase device * @kcpu_queue: KCPU queue */ #if MALI_USE_CSF #define KBASE_TLSTREAM_TL_KBASE_ARRAY_END_KCPUQUEUE_ENQUEUE_JIT_FREE( \ kbdev, \ kcpu_queue \ ) \ do { \ int enabled = atomic_read(&kbdev->timeline_flags); \ if (enabled & BASE_TLSTREAM_ENABLE_CSF_TRACEPOINTS) \ __kbase_tlstream_tl_kbase_array_end_kcpuqueue_enqueue_jit_free( \ __TL_DISPATCH_STREAM(kbdev, obj), \ kcpu_queue); \ } while (0) #else #define KBASE_TLSTREAM_TL_KBASE_ARRAY_END_KCPUQUEUE_ENQUEUE_JIT_FREE( \ kbdev, \ kcpu_queue \ ) \ do { } while (0) #endif /* MALI_USE_CSF */ /** * KBASE_TLSTREAM_TL_KBASE_KCPUQUEUE_EXECUTE_FENCE_SIGNAL_START - * KCPU Queue starts a Signal on Fence * * @kbdev: Kbase device * @kcpu_queue: KCPU queue */ #if MALI_USE_CSF #define KBASE_TLSTREAM_TL_KBASE_KCPUQUEUE_EXECUTE_FENCE_SIGNAL_START( \ kbdev, \ kcpu_queue \ ) \ do { \ int enabled = atomic_read(&kbdev->timeline_flags); \ if (enabled & BASE_TLSTREAM_ENABLE_CSF_TRACEPOINTS) \ __kbase_tlstream_tl_kbase_kcpuqueue_execute_fence_signal_start( \ __TL_DISPATCH_STREAM(kbdev, obj), \ kcpu_queue); \ } while (0) #else #define KBASE_TLSTREAM_TL_KBASE_KCPUQUEUE_EXECUTE_FENCE_SIGNAL_START( \ kbdev, \ kcpu_queue \ ) \ do { } while (0) #endif /* MALI_USE_CSF */ /** * KBASE_TLSTREAM_TL_KBASE_KCPUQUEUE_EXECUTE_FENCE_SIGNAL_END - * KCPU Queue ends a Signal on Fence * * @kbdev: Kbase device * @kcpu_queue: KCPU queue * @execute_error: Non-zero error code if KCPU Queue item completed with error, else zero */ #if MALI_USE_CSF #define KBASE_TLSTREAM_TL_KBASE_KCPUQUEUE_EXECUTE_FENCE_SIGNAL_END( \ kbdev, \ kcpu_queue, \ execute_error \ ) \ do { \ int enabled = atomic_read(&kbdev->timeline_flags); \ if (enabled & BASE_TLSTREAM_ENABLE_CSF_TRACEPOINTS) \ __kbase_tlstream_tl_kbase_kcpuqueue_execute_fence_signal_end( \ __TL_DISPATCH_STREAM(kbdev, obj), \ kcpu_queue, execute_error); \ } while (0) #else #define KBASE_TLSTREAM_TL_KBASE_KCPUQUEUE_EXECUTE_FENCE_SIGNAL_END( \ kbdev, \ kcpu_queue, \ execute_error \ ) \ do { } while (0) #endif /* MALI_USE_CSF */ /** * KBASE_TLSTREAM_TL_KBASE_KCPUQUEUE_EXECUTE_FENCE_WAIT_START - * KCPU Queue starts a Wait on Fence * * @kbdev: Kbase device * @kcpu_queue: KCPU queue */ #if MALI_USE_CSF #define KBASE_TLSTREAM_TL_KBASE_KCPUQUEUE_EXECUTE_FENCE_WAIT_START( \ kbdev, \ kcpu_queue \ ) \ do { \ int enabled = atomic_read(&kbdev->timeline_flags); \ if (enabled & BASE_TLSTREAM_ENABLE_CSF_TRACEPOINTS) \ __kbase_tlstream_tl_kbase_kcpuqueue_execute_fence_wait_start( \ __TL_DISPATCH_STREAM(kbdev, obj), \ kcpu_queue); \ } while (0) #else #define KBASE_TLSTREAM_TL_KBASE_KCPUQUEUE_EXECUTE_FENCE_WAIT_START( \ kbdev, \ kcpu_queue \ ) \ do { } while (0) #endif /* MALI_USE_CSF */ /** * KBASE_TLSTREAM_TL_KBASE_KCPUQUEUE_EXECUTE_FENCE_WAIT_END - * KCPU Queue ends a Wait on Fence * * @kbdev: Kbase device * @kcpu_queue: KCPU queue * @execute_error: Non-zero error code if KCPU Queue item completed with error, else zero */ #if MALI_USE_CSF #define KBASE_TLSTREAM_TL_KBASE_KCPUQUEUE_EXECUTE_FENCE_WAIT_END( \ kbdev, \ kcpu_queue, \ execute_error \ ) \ do { \ int enabled = atomic_read(&kbdev->timeline_flags); \ if (enabled & BASE_TLSTREAM_ENABLE_CSF_TRACEPOINTS) \ __kbase_tlstream_tl_kbase_kcpuqueue_execute_fence_wait_end( \ __TL_DISPATCH_STREAM(kbdev, obj), \ kcpu_queue, execute_error); \ } while (0) #else #define KBASE_TLSTREAM_TL_KBASE_KCPUQUEUE_EXECUTE_FENCE_WAIT_END( \ kbdev, \ kcpu_queue, \ execute_error \ ) \ do { } while (0) #endif /* MALI_USE_CSF */ /** * KBASE_TLSTREAM_TL_KBASE_KCPUQUEUE_EXECUTE_CQS_WAIT_START - * KCPU Queue starts a Wait on an array of Cross Queue Sync Objects * * @kbdev: Kbase device * @kcpu_queue: KCPU queue */ #if MALI_USE_CSF #define KBASE_TLSTREAM_TL_KBASE_KCPUQUEUE_EXECUTE_CQS_WAIT_START( \ kbdev, \ kcpu_queue \ ) \ do { \ int enabled = atomic_read(&kbdev->timeline_flags); \ if (enabled & BASE_TLSTREAM_ENABLE_CSF_TRACEPOINTS) \ __kbase_tlstream_tl_kbase_kcpuqueue_execute_cqs_wait_start( \ __TL_DISPATCH_STREAM(kbdev, obj), \ kcpu_queue); \ } while (0) #else #define KBASE_TLSTREAM_TL_KBASE_KCPUQUEUE_EXECUTE_CQS_WAIT_START( \ kbdev, \ kcpu_queue \ ) \ do { } while (0) #endif /* MALI_USE_CSF */ /** * KBASE_TLSTREAM_TL_KBASE_KCPUQUEUE_EXECUTE_CQS_WAIT_END - * KCPU Queue ends a Wait on an array of Cross Queue Sync Objects * * @kbdev: Kbase device * @kcpu_queue: KCPU queue * @execute_error: Non-zero error code if KCPU Queue item completed with error, else zero */ #if MALI_USE_CSF #define KBASE_TLSTREAM_TL_KBASE_KCPUQUEUE_EXECUTE_CQS_WAIT_END( \ kbdev, \ kcpu_queue, \ execute_error \ ) \ do { \ int enabled = atomic_read(&kbdev->timeline_flags); \ if (enabled & BASE_TLSTREAM_ENABLE_CSF_TRACEPOINTS) \ __kbase_tlstream_tl_kbase_kcpuqueue_execute_cqs_wait_end( \ __TL_DISPATCH_STREAM(kbdev, obj), \ kcpu_queue, execute_error); \ } while (0) #else #define KBASE_TLSTREAM_TL_KBASE_KCPUQUEUE_EXECUTE_CQS_WAIT_END( \ kbdev, \ kcpu_queue, \ execute_error \ ) \ do { } while (0) #endif /* MALI_USE_CSF */ /** * KBASE_TLSTREAM_TL_KBASE_KCPUQUEUE_EXECUTE_CQS_SET - * KCPU Queue executes a Set on an array of Cross Queue Sync Objects * * @kbdev: Kbase device * @kcpu_queue: KCPU queue * @execute_error: Non-zero error code if KCPU Queue item completed with error, else zero */ #if MALI_USE_CSF #define KBASE_TLSTREAM_TL_KBASE_KCPUQUEUE_EXECUTE_CQS_SET( \ kbdev, \ kcpu_queue, \ execute_error \ ) \ do { \ int enabled = atomic_read(&kbdev->timeline_flags); \ if (enabled & BASE_TLSTREAM_ENABLE_CSF_TRACEPOINTS) \ __kbase_tlstream_tl_kbase_kcpuqueue_execute_cqs_set( \ __TL_DISPATCH_STREAM(kbdev, obj), \ kcpu_queue, execute_error); \ } while (0) #else #define KBASE_TLSTREAM_TL_KBASE_KCPUQUEUE_EXECUTE_CQS_SET( \ kbdev, \ kcpu_queue, \ execute_error \ ) \ do { } while (0) #endif /* MALI_USE_CSF */ /** * KBASE_TLSTREAM_TL_KBASE_KCPUQUEUE_EXECUTE_MAP_IMPORT_START - * KCPU Queue starts a Map Import * * @kbdev: Kbase device * @kcpu_queue: KCPU queue */ #if MALI_USE_CSF #define KBASE_TLSTREAM_TL_KBASE_KCPUQUEUE_EXECUTE_MAP_IMPORT_START( \ kbdev, \ kcpu_queue \ ) \ do { \ int enabled = atomic_read(&kbdev->timeline_flags); \ if (enabled & BASE_TLSTREAM_ENABLE_CSF_TRACEPOINTS) \ __kbase_tlstream_tl_kbase_kcpuqueue_execute_map_import_start( \ __TL_DISPATCH_STREAM(kbdev, obj), \ kcpu_queue); \ } while (0) #else #define KBASE_TLSTREAM_TL_KBASE_KCPUQUEUE_EXECUTE_MAP_IMPORT_START( \ kbdev, \ kcpu_queue \ ) \ do { } while (0) #endif /* MALI_USE_CSF */ /** * KBASE_TLSTREAM_TL_KBASE_KCPUQUEUE_EXECUTE_MAP_IMPORT_END - * KCPU Queue ends a Map Import * * @kbdev: Kbase device * @kcpu_queue: KCPU queue * @execute_error: Non-zero error code if KCPU Queue item completed with error, else zero */ #if MALI_USE_CSF #define KBASE_TLSTREAM_TL_KBASE_KCPUQUEUE_EXECUTE_MAP_IMPORT_END( \ kbdev, \ kcpu_queue, \ execute_error \ ) \ do { \ int enabled = atomic_read(&kbdev->timeline_flags); \ if (enabled & BASE_TLSTREAM_ENABLE_CSF_TRACEPOINTS) \ __kbase_tlstream_tl_kbase_kcpuqueue_execute_map_import_end( \ __TL_DISPATCH_STREAM(kbdev, obj), \ kcpu_queue, execute_error); \ } while (0) #else #define KBASE_TLSTREAM_TL_KBASE_KCPUQUEUE_EXECUTE_MAP_IMPORT_END( \ kbdev, \ kcpu_queue, \ execute_error \ ) \ do { } while (0) #endif /* MALI_USE_CSF */ /** * KBASE_TLSTREAM_TL_KBASE_KCPUQUEUE_EXECUTE_UNMAP_IMPORT_START - * KCPU Queue starts an Unmap Import * * @kbdev: Kbase device * @kcpu_queue: KCPU queue */ #if MALI_USE_CSF #define KBASE_TLSTREAM_TL_KBASE_KCPUQUEUE_EXECUTE_UNMAP_IMPORT_START( \ kbdev, \ kcpu_queue \ ) \ do { \ int enabled = atomic_read(&kbdev->timeline_flags); \ if (enabled & BASE_TLSTREAM_ENABLE_CSF_TRACEPOINTS) \ __kbase_tlstream_tl_kbase_kcpuqueue_execute_unmap_import_start( \ __TL_DISPATCH_STREAM(kbdev, obj), \ kcpu_queue); \ } while (0) #else #define KBASE_TLSTREAM_TL_KBASE_KCPUQUEUE_EXECUTE_UNMAP_IMPORT_START( \ kbdev, \ kcpu_queue \ ) \ do { } while (0) #endif /* MALI_USE_CSF */ /** * KBASE_TLSTREAM_TL_KBASE_KCPUQUEUE_EXECUTE_UNMAP_IMPORT_END - * KCPU Queue ends an Unmap Import * * @kbdev: Kbase device * @kcpu_queue: KCPU queue * @execute_error: Non-zero error code if KCPU Queue item completed with error, else zero */ #if MALI_USE_CSF #define KBASE_TLSTREAM_TL_KBASE_KCPUQUEUE_EXECUTE_UNMAP_IMPORT_END( \ kbdev, \ kcpu_queue, \ execute_error \ ) \ do { \ int enabled = atomic_read(&kbdev->timeline_flags); \ if (enabled & BASE_TLSTREAM_ENABLE_CSF_TRACEPOINTS) \ __kbase_tlstream_tl_kbase_kcpuqueue_execute_unmap_import_end( \ __TL_DISPATCH_STREAM(kbdev, obj), \ kcpu_queue, execute_error); \ } while (0) #else #define KBASE_TLSTREAM_TL_KBASE_KCPUQUEUE_EXECUTE_UNMAP_IMPORT_END( \ kbdev, \ kcpu_queue, \ execute_error \ ) \ do { } while (0) #endif /* MALI_USE_CSF */ /** * KBASE_TLSTREAM_TL_KBASE_KCPUQUEUE_EXECUTE_UNMAP_IMPORT_FORCE_START - * KCPU Queue starts an Unmap Import ignoring reference count * * @kbdev: Kbase device * @kcpu_queue: KCPU queue */ #if MALI_USE_CSF #define KBASE_TLSTREAM_TL_KBASE_KCPUQUEUE_EXECUTE_UNMAP_IMPORT_FORCE_START( \ kbdev, \ kcpu_queue \ ) \ do { \ int enabled = atomic_read(&kbdev->timeline_flags); \ if (enabled & BASE_TLSTREAM_ENABLE_CSF_TRACEPOINTS) \ __kbase_tlstream_tl_kbase_kcpuqueue_execute_unmap_import_force_start( \ __TL_DISPATCH_STREAM(kbdev, obj), \ kcpu_queue); \ } while (0) #else #define KBASE_TLSTREAM_TL_KBASE_KCPUQUEUE_EXECUTE_UNMAP_IMPORT_FORCE_START( \ kbdev, \ kcpu_queue \ ) \ do { } while (0) #endif /* MALI_USE_CSF */ /** * KBASE_TLSTREAM_TL_KBASE_KCPUQUEUE_EXECUTE_UNMAP_IMPORT_FORCE_END - * KCPU Queue ends an Unmap Import ignoring reference count * * @kbdev: Kbase device * @kcpu_queue: KCPU queue * @execute_error: Non-zero error code if KCPU Queue item completed with error, else zero */ #if MALI_USE_CSF #define KBASE_TLSTREAM_TL_KBASE_KCPUQUEUE_EXECUTE_UNMAP_IMPORT_FORCE_END( \ kbdev, \ kcpu_queue, \ execute_error \ ) \ do { \ int enabled = atomic_read(&kbdev->timeline_flags); \ if (enabled & BASE_TLSTREAM_ENABLE_CSF_TRACEPOINTS) \ __kbase_tlstream_tl_kbase_kcpuqueue_execute_unmap_import_force_end( \ __TL_DISPATCH_STREAM(kbdev, obj), \ kcpu_queue, execute_error); \ } while (0) #else #define KBASE_TLSTREAM_TL_KBASE_KCPUQUEUE_EXECUTE_UNMAP_IMPORT_FORCE_END( \ kbdev, \ kcpu_queue, \ execute_error \ ) \ do { } while (0) #endif /* MALI_USE_CSF */ /** * KBASE_TLSTREAM_TL_KBASE_KCPUQUEUE_EXECUTE_JIT_ALLOC_START - * KCPU Queue starts an array of JIT Allocs * * @kbdev: Kbase device * @kcpu_queue: KCPU queue */ #if MALI_USE_CSF #define KBASE_TLSTREAM_TL_KBASE_KCPUQUEUE_EXECUTE_JIT_ALLOC_START( \ kbdev, \ kcpu_queue \ ) \ do { \ int enabled = atomic_read(&kbdev->timeline_flags); \ if (enabled & BASE_TLSTREAM_ENABLE_CSF_TRACEPOINTS) \ __kbase_tlstream_tl_kbase_kcpuqueue_execute_jit_alloc_start( \ __TL_DISPATCH_STREAM(kbdev, obj), \ kcpu_queue); \ } while (0) #else #define KBASE_TLSTREAM_TL_KBASE_KCPUQUEUE_EXECUTE_JIT_ALLOC_START( \ kbdev, \ kcpu_queue \ ) \ do { } while (0) #endif /* MALI_USE_CSF */ /** * KBASE_TLSTREAM_TL_KBASE_ARRAY_BEGIN_KCPUQUEUE_EXECUTE_JIT_ALLOC_END - * Begin array of KCPU Queue ends an array of JIT Allocs * * @kbdev: Kbase device * @kcpu_queue: KCPU queue */ #if MALI_USE_CSF #define KBASE_TLSTREAM_TL_KBASE_ARRAY_BEGIN_KCPUQUEUE_EXECUTE_JIT_ALLOC_END( \ kbdev, \ kcpu_queue \ ) \ do { \ int enabled = atomic_read(&kbdev->timeline_flags); \ if (enabled & BASE_TLSTREAM_ENABLE_CSF_TRACEPOINTS) \ __kbase_tlstream_tl_kbase_array_begin_kcpuqueue_execute_jit_alloc_end( \ __TL_DISPATCH_STREAM(kbdev, obj), \ kcpu_queue); \ } while (0) #else #define KBASE_TLSTREAM_TL_KBASE_ARRAY_BEGIN_KCPUQUEUE_EXECUTE_JIT_ALLOC_END( \ kbdev, \ kcpu_queue \ ) \ do { } while (0) #endif /* MALI_USE_CSF */ /** * KBASE_TLSTREAM_TL_KBASE_ARRAY_ITEM_KCPUQUEUE_EXECUTE_JIT_ALLOC_END - * Array item of KCPU Queue ends an array of JIT Allocs * * @kbdev: Kbase device * @kcpu_queue: KCPU queue * @execute_error: Non-zero error code if KCPU Queue item completed with error, else zero * @jit_alloc_gpu_alloc_addr: The JIT allocated GPU virtual address * @jit_alloc_mmu_flags: The MMU flags for the JIT allocation */ #if MALI_USE_CSF #define KBASE_TLSTREAM_TL_KBASE_ARRAY_ITEM_KCPUQUEUE_EXECUTE_JIT_ALLOC_END( \ kbdev, \ kcpu_queue, \ execute_error, \ jit_alloc_gpu_alloc_addr, \ jit_alloc_mmu_flags \ ) \ do { \ int enabled = atomic_read(&kbdev->timeline_flags); \ if (enabled & BASE_TLSTREAM_ENABLE_CSF_TRACEPOINTS) \ __kbase_tlstream_tl_kbase_array_item_kcpuqueue_execute_jit_alloc_end( \ __TL_DISPATCH_STREAM(kbdev, obj), \ kcpu_queue, execute_error, jit_alloc_gpu_alloc_addr, jit_alloc_mmu_flags); \ } while (0) #else #define KBASE_TLSTREAM_TL_KBASE_ARRAY_ITEM_KCPUQUEUE_EXECUTE_JIT_ALLOC_END( \ kbdev, \ kcpu_queue, \ execute_error, \ jit_alloc_gpu_alloc_addr, \ jit_alloc_mmu_flags \ ) \ do { } while (0) #endif /* MALI_USE_CSF */ /** * KBASE_TLSTREAM_TL_KBASE_ARRAY_END_KCPUQUEUE_EXECUTE_JIT_ALLOC_END - * End array of KCPU Queue ends an array of JIT Allocs * * @kbdev: Kbase device * @kcpu_queue: KCPU queue */ #if MALI_USE_CSF #define KBASE_TLSTREAM_TL_KBASE_ARRAY_END_KCPUQUEUE_EXECUTE_JIT_ALLOC_END( \ kbdev, \ kcpu_queue \ ) \ do { \ int enabled = atomic_read(&kbdev->timeline_flags); \ if (enabled & BASE_TLSTREAM_ENABLE_CSF_TRACEPOINTS) \ __kbase_tlstream_tl_kbase_array_end_kcpuqueue_execute_jit_alloc_end( \ __TL_DISPATCH_STREAM(kbdev, obj), \ kcpu_queue); \ } while (0) #else #define KBASE_TLSTREAM_TL_KBASE_ARRAY_END_KCPUQUEUE_EXECUTE_JIT_ALLOC_END( \ kbdev, \ kcpu_queue \ ) \ do { } while (0) #endif /* MALI_USE_CSF */ /** * KBASE_TLSTREAM_TL_KBASE_KCPUQUEUE_EXECUTE_JIT_FREE_START - * KCPU Queue starts an array of JIT Frees * * @kbdev: Kbase device * @kcpu_queue: KCPU queue */ #if MALI_USE_CSF #define KBASE_TLSTREAM_TL_KBASE_KCPUQUEUE_EXECUTE_JIT_FREE_START( \ kbdev, \ kcpu_queue \ ) \ do { \ int enabled = atomic_read(&kbdev->timeline_flags); \ if (enabled & BASE_TLSTREAM_ENABLE_CSF_TRACEPOINTS) \ __kbase_tlstream_tl_kbase_kcpuqueue_execute_jit_free_start( \ __TL_DISPATCH_STREAM(kbdev, obj), \ kcpu_queue); \ } while (0) #else #define KBASE_TLSTREAM_TL_KBASE_KCPUQUEUE_EXECUTE_JIT_FREE_START( \ kbdev, \ kcpu_queue \ ) \ do { } while (0) #endif /* MALI_USE_CSF */ /** * KBASE_TLSTREAM_TL_KBASE_ARRAY_BEGIN_KCPUQUEUE_EXECUTE_JIT_FREE_END - * Begin array of KCPU Queue ends an array of JIT Frees * * @kbdev: Kbase device * @kcpu_queue: KCPU queue */ #if MALI_USE_CSF #define KBASE_TLSTREAM_TL_KBASE_ARRAY_BEGIN_KCPUQUEUE_EXECUTE_JIT_FREE_END( \ kbdev, \ kcpu_queue \ ) \ do { \ int enabled = atomic_read(&kbdev->timeline_flags); \ if (enabled & BASE_TLSTREAM_ENABLE_CSF_TRACEPOINTS) \ __kbase_tlstream_tl_kbase_array_begin_kcpuqueue_execute_jit_free_end( \ __TL_DISPATCH_STREAM(kbdev, obj), \ kcpu_queue); \ } while (0) #else #define KBASE_TLSTREAM_TL_KBASE_ARRAY_BEGIN_KCPUQUEUE_EXECUTE_JIT_FREE_END( \ kbdev, \ kcpu_queue \ ) \ do { } while (0) #endif /* MALI_USE_CSF */ /** * KBASE_TLSTREAM_TL_KBASE_ARRAY_ITEM_KCPUQUEUE_EXECUTE_JIT_FREE_END - * Array item of KCPU Queue ends an array of JIT Frees * * @kbdev: Kbase device * @kcpu_queue: KCPU queue * @execute_error: Non-zero error code if KCPU Queue item completed with error, else zero * @jit_free_pages_used: The actual number of pages used by the JIT * allocation */ #if MALI_USE_CSF #define KBASE_TLSTREAM_TL_KBASE_ARRAY_ITEM_KCPUQUEUE_EXECUTE_JIT_FREE_END( \ kbdev, \ kcpu_queue, \ execute_error, \ jit_free_pages_used \ ) \ do { \ int enabled = atomic_read(&kbdev->timeline_flags); \ if (enabled & BASE_TLSTREAM_ENABLE_CSF_TRACEPOINTS) \ __kbase_tlstream_tl_kbase_array_item_kcpuqueue_execute_jit_free_end( \ __TL_DISPATCH_STREAM(kbdev, obj), \ kcpu_queue, execute_error, jit_free_pages_used); \ } while (0) #else #define KBASE_TLSTREAM_TL_KBASE_ARRAY_ITEM_KCPUQUEUE_EXECUTE_JIT_FREE_END( \ kbdev, \ kcpu_queue, \ execute_error, \ jit_free_pages_used \ ) \ do { } while (0) #endif /* MALI_USE_CSF */ /** * KBASE_TLSTREAM_TL_KBASE_ARRAY_END_KCPUQUEUE_EXECUTE_JIT_FREE_END - * End array of KCPU Queue ends an array of JIT Frees * * @kbdev: Kbase device * @kcpu_queue: KCPU queue */ #if MALI_USE_CSF #define KBASE_TLSTREAM_TL_KBASE_ARRAY_END_KCPUQUEUE_EXECUTE_JIT_FREE_END( \ kbdev, \ kcpu_queue \ ) \ do { \ int enabled = atomic_read(&kbdev->timeline_flags); \ if (enabled & BASE_TLSTREAM_ENABLE_CSF_TRACEPOINTS) \ __kbase_tlstream_tl_kbase_array_end_kcpuqueue_execute_jit_free_end( \ __TL_DISPATCH_STREAM(kbdev, obj), \ kcpu_queue); \ } while (0) #else #define KBASE_TLSTREAM_TL_KBASE_ARRAY_END_KCPUQUEUE_EXECUTE_JIT_FREE_END( \ kbdev, \ kcpu_queue \ ) \ do { } while (0) #endif /* MALI_USE_CSF */ /** * KBASE_TLSTREAM_TL_KBASE_KCPUQUEUE_EXECUTE_ERROR_BARRIER - * KCPU Queue executes an Error Barrier * * @kbdev: Kbase device * @kcpu_queue: KCPU queue */ #if MALI_USE_CSF #define KBASE_TLSTREAM_TL_KBASE_KCPUQUEUE_EXECUTE_ERROR_BARRIER( \ kbdev, \ kcpu_queue \ ) \ do { \ int enabled = atomic_read(&kbdev->timeline_flags); \ if (enabled & BASE_TLSTREAM_ENABLE_CSF_TRACEPOINTS) \ __kbase_tlstream_tl_kbase_kcpuqueue_execute_error_barrier( \ __TL_DISPATCH_STREAM(kbdev, obj), \ kcpu_queue); \ } while (0) #else #define KBASE_TLSTREAM_TL_KBASE_KCPUQUEUE_EXECUTE_ERROR_BARRIER( \ kbdev, \ kcpu_queue \ ) \ do { } while (0) #endif /* MALI_USE_CSF */ /** * KBASE_TLSTREAM_TL_KBASE_KCPUQUEUE_EXECUTE_GROUP_SUSPEND_START - * KCPU Queue starts a group suspend * * @kbdev: Kbase device * @kcpu_queue: KCPU queue */ #if MALI_USE_CSF #define KBASE_TLSTREAM_TL_KBASE_KCPUQUEUE_EXECUTE_GROUP_SUSPEND_START( \ kbdev, \ kcpu_queue \ ) \ do { \ int enabled = atomic_read(&kbdev->timeline_flags); \ if (enabled & BASE_TLSTREAM_ENABLE_CSF_TRACEPOINTS) \ __kbase_tlstream_tl_kbase_kcpuqueue_execute_group_suspend_start( \ __TL_DISPATCH_STREAM(kbdev, obj), \ kcpu_queue); \ } while (0) #else #define KBASE_TLSTREAM_TL_KBASE_KCPUQUEUE_EXECUTE_GROUP_SUSPEND_START( \ kbdev, \ kcpu_queue \ ) \ do { } while (0) #endif /* MALI_USE_CSF */ /** * KBASE_TLSTREAM_TL_KBASE_KCPUQUEUE_EXECUTE_GROUP_SUSPEND_END - * KCPU Queue ends a group suspend * * @kbdev: Kbase device * @kcpu_queue: KCPU queue * @execute_error: Non-zero error code if KCPU Queue item completed with error, else zero */ #if MALI_USE_CSF #define KBASE_TLSTREAM_TL_KBASE_KCPUQUEUE_EXECUTE_GROUP_SUSPEND_END( \ kbdev, \ kcpu_queue, \ execute_error \ ) \ do { \ int enabled = atomic_read(&kbdev->timeline_flags); \ if (enabled & BASE_TLSTREAM_ENABLE_CSF_TRACEPOINTS) \ __kbase_tlstream_tl_kbase_kcpuqueue_execute_group_suspend_end( \ __TL_DISPATCH_STREAM(kbdev, obj), \ kcpu_queue, execute_error); \ } while (0) #else #define KBASE_TLSTREAM_TL_KBASE_KCPUQUEUE_EXECUTE_GROUP_SUSPEND_END( \ kbdev, \ kcpu_queue, \ execute_error \ ) \ do { } while (0) #endif /* MALI_USE_CSF */ /** * KBASE_TLSTREAM_TL_KBASE_CSFFW_TLSTREAM_OVERFLOW - * An overflow has happened with the CSFFW Timeline stream * * @kbdev: Kbase device * @csffw_timestamp: Timestamp of a CSFFW event * @csffw_cycle: Cycle number of a CSFFW event */ #if MALI_USE_CSF #define KBASE_TLSTREAM_TL_KBASE_CSFFW_TLSTREAM_OVERFLOW( \ kbdev, \ csffw_timestamp, \ csffw_cycle \ ) \ do { \ int enabled = atomic_read(&kbdev->timeline_flags); \ if (enabled & BASE_TLSTREAM_ENABLE_CSFFW_TRACEPOINTS) \ __kbase_tlstream_tl_kbase_csffw_tlstream_overflow( \ __TL_DISPATCH_STREAM(kbdev, obj), \ csffw_timestamp, csffw_cycle); \ } while (0) #else #define KBASE_TLSTREAM_TL_KBASE_CSFFW_TLSTREAM_OVERFLOW( \ kbdev, \ csffw_timestamp, \ csffw_cycle \ ) \ do { } while (0) #endif /* MALI_USE_CSF */ /** * KBASE_TLSTREAM_TL_KBASE_CSFFW_RESET - * A reset has happened with the CSFFW * * @kbdev: Kbase device * @csffw_cycle: Cycle number of a CSFFW event */ #if MALI_USE_CSF #define KBASE_TLSTREAM_TL_KBASE_CSFFW_RESET( \ kbdev, \ csffw_cycle \ ) \ do { \ int enabled = atomic_read(&kbdev->timeline_flags); \ if (enabled & BASE_TLSTREAM_ENABLE_CSFFW_TRACEPOINTS) \ __kbase_tlstream_tl_kbase_csffw_reset( \ __TL_DISPATCH_STREAM(kbdev, obj), \ csffw_cycle); \ } while (0) #else #define KBASE_TLSTREAM_TL_KBASE_CSFFW_RESET( \ kbdev, \ csffw_cycle \ ) \ do { } while (0) #endif /* MALI_USE_CSF */ /* Gator tracepoints are hooked into TLSTREAM interface. * When the following tracepoints are called, corresponding * Gator tracepoint will be called as well. */ #if defined(CONFIG_MALI_BIFROST_GATOR_SUPPORT) /* `event` is one of TL_JS_EVENT values here. * The values of TL_JS_EVENT are guaranteed to match * with corresponding GATOR_JOB_SLOT values. */ #undef KBASE_TLSTREAM_AUX_EVENT_JOB_SLOT #define KBASE_TLSTREAM_AUX_EVENT_JOB_SLOT(kbdev, \ context, slot_nr, atom_nr, event) \ do { \ int enabled = atomic_read(&kbdev->timeline_flags); \ kbase_trace_mali_job_slots_event(kbdev->id, \ GATOR_MAKE_EVENT(event, slot_nr), \ context, (u8) atom_nr); \ if (enabled & TLSTREAM_ENABLED) \ __kbase_tlstream_aux_event_job_slot( \ __TL_DISPATCH_STREAM(kbdev, aux), \ context, slot_nr, atom_nr, event); \ } while (0) #undef KBASE_TLSTREAM_AUX_PM_STATE #define KBASE_TLSTREAM_AUX_PM_STATE(kbdev, core_type, state) \ do { \ int enabled = atomic_read(&kbdev->timeline_flags); \ kbase_trace_mali_pm_status(kbdev->id, \ core_type, state); \ if (enabled & TLSTREAM_ENABLED) \ __kbase_tlstream_aux_pm_state( \ __TL_DISPATCH_STREAM(kbdev, aux), \ core_type, state); \ } while (0) #undef KBASE_TLSTREAM_AUX_PAGEFAULT #define KBASE_TLSTREAM_AUX_PAGEFAULT(kbdev, \ ctx_nr, as_nr, page_cnt_change) \ do { \ int enabled = atomic_read(&kbdev->timeline_flags); \ kbase_trace_mali_page_fault_insert_pages(kbdev->id, \ as_nr, \ page_cnt_change); \ if (enabled & TLSTREAM_ENABLED) \ __kbase_tlstream_aux_pagefault( \ __TL_DISPATCH_STREAM(kbdev, aux), \ ctx_nr, as_nr, page_cnt_change); \ } while (0) /* kbase_trace_mali_total_alloc_pages_change is handled differently here. * We stream the total amount of pages allocated for `kbdev` rather * than `page_count`, which is per-context. */ #undef KBASE_TLSTREAM_AUX_PAGESALLOC #define KBASE_TLSTREAM_AUX_PAGESALLOC(kbdev, ctx_nr, page_cnt) \ do { \ int enabled = atomic_read(&kbdev->timeline_flags); \ u32 global_pages_count = \ atomic_read(&kbdev->memdev.used_pages); \ \ kbase_trace_mali_total_alloc_pages_change(kbdev->id, \ global_pages_count); \ if (enabled & TLSTREAM_ENABLED) \ __kbase_tlstream_aux_pagesalloc( \ __TL_DISPATCH_STREAM(kbdev, aux), \ ctx_nr, page_cnt); \ } while (0) #endif /* CONFIG_MALI_BIFROST_GATOR_SUPPORT */ /* clang-format on */ #endif