xref: /rk3399_ARM-atf/lib/extensions/amu/aarch32/amu.c (revision 0767d50e699d3d9cb827172dd7742618d37aabe0)
1 /*
2  * Copyright (c) 2017, ARM Limited and Contributors. All rights reserved.
3  *
4  * SPDX-License-Identifier: BSD-3-Clause
5  */
6 
7 #include <amu.h>
8 #include <arch.h>
9 #include <arch_helpers.h>
10 #include <debug.h>
11 
12 void amu_enable(int el2_unused)
13 {
14 	uint64_t features;
15 
16 	features = read_id_pfr0() >> ID_PFR0_AMU_SHIFT;
17 	if ((features & ID_PFR0_AMU_MASK) != 1) {
18 		WARN("Cannot enable AMU - not supported\n");
19 		return;
20 	}
21 
22 	if (el2_unused) {
23 		uint64_t v;
24 
25 		/*
26 		 * Non-secure access from EL0 or EL1 to the Activity Monitor
27 		 * registers do not trap to EL2.
28 		 */
29 		v = read_hcptr();
30 		v &= ~TAM_BIT;
31 		write_hcptr(v);
32 	}
33 
34 	/* Enable group 0 counters */
35 	write_amcntenset0(AMU_GROUP0_COUNTERS_MASK);
36 }
37