1*54fd6939SJiyong Park /* 2*54fd6939SJiyong Park * Copyright (c) 2021, Arm Limited. All rights reserved. 3*54fd6939SJiyong Park * 4*54fd6939SJiyong Park * SPDX-License-Identifier: BSD-3-Clause 5*54fd6939SJiyong Park */ 6*54fd6939SJiyong Park 7*54fd6939SJiyong Park #include <stdbool.h> 8*54fd6939SJiyong Park 9*54fd6939SJiyong Park #include <arch.h> 10*54fd6939SJiyong Park #include <arch_helpers.h> 11*54fd6939SJiyong Park #include <lib/extensions/trf.h> 12*54fd6939SJiyong Park trf_supported(void)13*54fd6939SJiyong Parkstatic bool trf_supported(void) 14*54fd6939SJiyong Park { 15*54fd6939SJiyong Park uint32_t features; 16*54fd6939SJiyong Park 17*54fd6939SJiyong Park features = read_id_dfr0() >> ID_DFR0_TRACEFILT_SHIFT; 18*54fd6939SJiyong Park return ((features & ID_DFR0_TRACEFILT_MASK) == 19*54fd6939SJiyong Park ID_DFR0_TRACEFILT_SUPPORTED); 20*54fd6939SJiyong Park } 21*54fd6939SJiyong Park trf_enable(void)22*54fd6939SJiyong Parkvoid trf_enable(void) 23*54fd6939SJiyong Park { 24*54fd6939SJiyong Park uint32_t val; 25*54fd6939SJiyong Park 26*54fd6939SJiyong Park if (trf_supported()) { 27*54fd6939SJiyong Park /* 28*54fd6939SJiyong Park * Allow access of trace filter control registers from 29*54fd6939SJiyong Park * non-monitor mode 30*54fd6939SJiyong Park */ 31*54fd6939SJiyong Park val = read_sdcr(); 32*54fd6939SJiyong Park val &= ~SDCR_TTRF_BIT; 33*54fd6939SJiyong Park write_sdcr(val); 34*54fd6939SJiyong Park } 35*54fd6939SJiyong Park } 36