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