| /* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */ |
| /* |
| * |
| * (C) COPYRIGHT 2023 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. |
| * |
| */ |
| |
| /** |
| * DOC: GPU metrics frontend APIs |
| */ |
| |
| #ifndef _KBASE_GPU_METRICS_H_ |
| #define _KBASE_GPU_METRICS_H_ |
| |
| #if IS_ENABLED(CONFIG_MALI_TRACE_POWER_GPU_WORK_PERIOD) |
| #include <mali_kbase.h> |
| |
| /** |
| * kbase_gpu_metrics_get_emit_interval() - Return the trace point emission interval. |
| * |
| * Return: The time interval in nanosecond for GPU metrics trace point emission. |
| */ |
| unsigned long kbase_gpu_metrics_get_emit_interval(void); |
| |
| /** |
| * kbase_gpu_metrics_ctx_put() - Decrement the Kbase context count for the GPU metrics |
| * context and free it if the count becomes 0. |
| * |
| * @kbdev: Pointer to the GPU device. |
| * @gpu_metrics_ctx: Pointer to the GPU metrics context. |
| * |
| * This function must be called when a Kbase context is destroyed. |
| * The function would decrement the Kbase context count for the GPU metrics context and |
| * free the memory if the count becomes 0. |
| * The function would emit a power/gpu_work_period tracepoint for the GPU metrics context |
| * if there was some GPU activity done for it since the last tracepoint was emitted. |
| * |
| * Note: The caller must appropriately serialize the call to this function with the |
| * call to other GPU metrics functions declared in this file. |
| */ |
| void kbase_gpu_metrics_ctx_put(struct kbase_device *kbdev, |
| struct kbase_gpu_metrics_ctx *gpu_metrics_ctx); |
| |
| /** |
| * kbase_gpu_metrics_ctx_get() - Increment the Kbase context count for the GPU metrics |
| * context if it exists. |
| * |
| * @kbdev: Pointer to the GPU device. |
| * @aid: Unique identifier of the Application that is creating the Kbase context. |
| * |
| * This function must be called when a Kbase context is created. |
| * The function would increment the Kbase context count for the GPU metrics context, |
| * corresponding to the @aid, if it exists. |
| * |
| * Return: Pointer to the GPU metrics context corresponding to the @aid if it already |
| * exists otherwise NULL. |
| * |
| * Note: The caller must appropriately serialize the call to this function with the |
| * call to other GPU metrics functions declared in this file. |
| * The caller shall allocate memory for GPU metrics context structure if the |
| * function returns NULL. |
| */ |
| struct kbase_gpu_metrics_ctx *kbase_gpu_metrics_ctx_get(struct kbase_device *kbdev, u32 aid); |
| |
| /** |
| * kbase_gpu_metrics_ctx_init() - Initialise the GPU metrics context |
| * |
| * @kbdev: Pointer to the GPU device. |
| * @gpu_metrics_ctx: Pointer to the GPU metrics context. |
| * @aid: Unique identifier of the Application for which GPU metrics |
| * context needs to be initialized. |
| * |
| * This function must be called when a Kbase context is created, after the call to |
| * kbase_gpu_metrics_ctx_get() returned NULL and memory for the GPU metrics context |
| * structure was allocated. |
| * |
| * Note: The caller must appropriately serialize the call to this function with the |
| * call to other GPU metrics functions declared in this file. |
| */ |
| void kbase_gpu_metrics_ctx_init(struct kbase_device *kbdev, |
| struct kbase_gpu_metrics_ctx *gpu_metrics_ctx, u32 aid); |
| |
| /** |
| * kbase_gpu_metrics_ctx_start_activity() - Report the start of some GPU activity |
| * for GPU metrics context. |
| * |
| * @kctx: Pointer to the Kbase context contributing data to the GPU metrics context. |
| * @timestamp_ns: CPU timestamp at which the GPU activity started. |
| * |
| * The provided timestamp would be later used as the "start_time_ns" for the |
| * power/gpu_work_period tracepoint if this is the first GPU activity for the GPU |
| * metrics context in the current work period. |
| * |
| * Note: The caller must appropriately serialize the call to this function with the |
| * call to other GPU metrics functions declared in this file. |
| */ |
| void kbase_gpu_metrics_ctx_start_activity(struct kbase_context *kctx, u64 timestamp_ns); |
| |
| /** |
| * kbase_gpu_metrics_ctx_end_activity() - Report the end of some GPU activity |
| * for GPU metrics context. |
| * |
| * @kctx: Pointer to the Kbase context contributing data to the GPU metrics context. |
| * @timestamp_ns: CPU timestamp at which the GPU activity ended. |
| * |
| * The provided timestamp would be later used as the "end_time_ns" for the |
| * power/gpu_work_period tracepoint if this is the last GPU activity for the GPU |
| * metrics context in the current work period. |
| * |
| * Note: The caller must appropriately serialize the call to this function with the |
| * call to other GPU metrics functions declared in this file. |
| */ |
| void kbase_gpu_metrics_ctx_end_activity(struct kbase_context *kctx, u64 timestamp_ns); |
| |
| /** |
| * kbase_gpu_metrics_emit_tracepoint() - Emit power/gpu_work_period tracepoint |
| * for active GPU metrics contexts. |
| * |
| * @kbdev: Pointer to the GPU device. |
| * @ts: Timestamp at which the tracepoint is being emitted. |
| * |
| * This function would loop through all the active GPU metrics contexts and emit a |
| * power/gpu_work_period tracepoint for them. |
| * The GPU metrics context that is found to be inactive since the last tracepoint |
| * was emitted would be moved to the inactive list. |
| * The current work period would be considered as over and a new work period would |
| * begin whenever any application does the GPU activity. |
| * |
| * Note: The caller must appropriately serialize the call to this function with the |
| * call to other GPU metrics functions declared in this file. |
| */ |
| void kbase_gpu_metrics_emit_tracepoint(struct kbase_device *kbdev, u64 ts); |
| |
| /** |
| * kbase_gpu_metrics_init() - Initialise a gpu_metrics instance for a GPU |
| * |
| * @kbdev: Pointer to the GPU device. |
| * |
| * This function is called once for each @kbdev. |
| * |
| * Return: 0 on success, or negative on failure. |
| */ |
| int kbase_gpu_metrics_init(struct kbase_device *kbdev); |
| |
| /** |
| * kbase_gpu_metrics_term() - Terminate a gpu_metrics instance |
| * |
| * @kbdev: Pointer to the GPU device. |
| */ |
| void kbase_gpu_metrics_term(struct kbase_device *kbdev); |
| |
| #endif |
| #endif /* _KBASE_GPU_METRICS_H_ */ |