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 13 void sys_reg_trace_enable(cpu_context_t *ctx) 14 { 15 uint64_t val; 16 17 /* Retrieve CPTR_EL3 value from the given context 'ctx', 18 * and update CPTR_EL3.TTA bit to 0. 19 * This function is called while switching context to NS to 20 * allow system trace register access to NS-EL2 and NS-EL1 21 * when NS-EL2 is implemented but not used. 22 */ 23 val = read_ctx_reg(get_el3state_ctx(ctx), CTX_CPTR_EL3); 24 val &= ~TTA_BIT; 25 write_ctx_reg(get_el3state_ctx(ctx), CTX_CPTR_EL3, val); 26 } 27 28 void sys_reg_trace_init_el2_unused(void) 29 { 30 /* 31 * CPTR_EL2.TTA: Set to zero so that Non-secure System register accesses 32 * to the trace registers from both Execution states do not trap to 33 * EL2. If PE trace unit System registers are not implemented then this 34 * bit is reserved, and must be set to zero. 35 */ 36 write_cptr_el2(read_cptr_el2() & ~CPTR_EL2_TTA_BIT); 37 } 38