xref: /aosp_15_r20/external/arm-trusted-firmware/lib/extensions/trf/aarch32/trf.c (revision 54fd6939e177f8ff529b10183254802c76df6d08)
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 Park static 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 Park void 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