1 /* 2 * Copyright (c) 2021-2023, Arm Limited. All rights reserved. 3 * 4 * SPDX-License-Identifier: BSD-3-Clause 5 */ 6 7 #include <stdbool.h> 8 9 #include <arch.h> 10 #include <arch_helpers.h> 11 #include <lib/extensions/sys_reg_trace.h> 12 sys_reg_trace_enable_per_world(per_world_context_t * per_world_ctx)13void sys_reg_trace_enable_per_world(per_world_context_t *per_world_ctx) 14 { 15 /* 16 * CPTR_EL3.TTA: Set to zero so that System register accesses to the 17 * trace registers do not trap to EL3. 18 */ 19 uint64_t val = per_world_ctx->ctx_cptr_el3; 20 val &= ~(TTA_BIT); 21 per_world_ctx->ctx_cptr_el3 = val; 22 } 23 sys_reg_trace_disable_per_world(per_world_context_t * per_world_ctx)24void sys_reg_trace_disable_per_world(per_world_context_t *per_world_ctx) 25 { 26 /* 27 * CPTR_EL3.TTA: Set to one so that System register accesses to the 28 * trace registers trap to EL3, unless it is trapped by CPACR.TRCDIS, 29 * CPACR_EL1.TTA, or CPTR_EL2.TTA 30 */ 31 uint64_t val = per_world_ctx->ctx_cptr_el3; 32 val |= TTA_BIT; 33 per_world_ctx->ctx_cptr_el3 = val; 34 } 35 sys_reg_trace_init_el2_unused(void)36void sys_reg_trace_init_el2_unused(void) 37 { 38 /* 39 * CPTR_EL2.TTA: Set to zero so that Non-secure System register accesses 40 * to the trace registers from both Execution states do not trap to 41 * EL2. If PE trace unit System registers are not implemented then this 42 * bit is reserved, and must be set to zero. 43 */ 44 write_cptr_el2(read_cptr_el2() & ~CPTR_EL2_TTA_BIT); 45 } 46