| /* SPDX-License-Identifier: BSD-2-Clause */ |
| /* |
| * Copyright (c) 2017, Linaro Limited |
| */ |
| |
| #ifndef BENCH_H |
| #define BENCH_H |
| |
| #include <inttypes.h> |
| #include <mm/core_memprot.h> |
| #include <mm/core_mmu.h> |
| #include <optee_msg.h> |
| |
| /* |
| * Cycle count divider is enabled (in PMCR), |
| * CCNT value is incremented every 64th clock cycle |
| */ |
| #define TEE_BENCH_DIVIDER 64 |
| |
| /* Max amount of timestamps per buffer */ |
| #define TEE_BENCH_MAX_STAMPS 32 |
| #define TEE_BENCH_MAX_MASK (TEE_BENCH_MAX_STAMPS - 1) |
| |
| #define OPTEE_MSG_RPC_CMD_BENCH_REG_NEW 0 |
| #define OPTEE_MSG_RPC_CMD_BENCH_REG_DEL 1 |
| |
| /* OP-TEE susbsystems ids */ |
| #define TEE_BENCH_CLIENT 0x10000000 |
| #define TEE_BENCH_KMOD 0x20000000 |
| #define TEE_BENCH_CORE 0x30000000 |
| #define TEE_BENCH_UTEE 0x40000000 |
| #define TEE_BENCH_DUMB_TA 0xF0000001 |
| |
| /* storing timestamp */ |
| struct tee_time_st { |
| uint64_t cnt; /* stores value from CNTPCT register */ |
| uint64_t addr; /* stores value from program counter register */ |
| uint64_t src; /* OP-TEE subsystem id */ |
| }; |
| |
| /* per-cpu circular buffer for timestamps */ |
| struct tee_ts_cpu_buf { |
| uint64_t head; |
| uint64_t tail; |
| struct tee_time_st stamps[TEE_BENCH_MAX_STAMPS]; |
| }; |
| |
| /* memory layout for shared memory, where timestamps will be stored */ |
| struct tee_ts_global { |
| uint64_t cores; |
| struct tee_ts_cpu_buf cpu_buf[]; |
| }; |
| |
| #ifdef CFG_TEE_BENCHMARK |
| void bm_timestamp(void); |
| #else |
| static inline void bm_timestamp(void) {} |
| #endif /* CFG_TEE_BENCHMARK */ |
| |
| #endif /* BENCH_H */ |