xref: /aosp_15_r20/external/arm-trusted-firmware/include/lib/extensions/amu.h (revision 54fd6939e177f8ff529b10183254802c76df6d08)
1*54fd6939SJiyong Park /*
2*54fd6939SJiyong Park  * Copyright (c) 2017-2021, ARM Limited and Contributors. All rights reserved.
3*54fd6939SJiyong Park  *
4*54fd6939SJiyong Park  * SPDX-License-Identifier: BSD-3-Clause
5*54fd6939SJiyong Park  */
6*54fd6939SJiyong Park 
7*54fd6939SJiyong Park #ifndef AMU_H
8*54fd6939SJiyong Park #define AMU_H
9*54fd6939SJiyong Park 
10*54fd6939SJiyong Park #include <stdbool.h>
11*54fd6939SJiyong Park #include <stdint.h>
12*54fd6939SJiyong Park 
13*54fd6939SJiyong Park #include <context.h>
14*54fd6939SJiyong Park 
15*54fd6939SJiyong Park #include <platform_def.h>
16*54fd6939SJiyong Park 
17*54fd6939SJiyong Park #if __aarch64__
18*54fd6939SJiyong Park void amu_enable(bool el2_unused, cpu_context_t *ctx);
19*54fd6939SJiyong Park #else
20*54fd6939SJiyong Park void amu_enable(bool el2_unused);
21*54fd6939SJiyong Park #endif
22*54fd6939SJiyong Park 
23*54fd6939SJiyong Park #if ENABLE_AMU_AUXILIARY_COUNTERS
24*54fd6939SJiyong Park /*
25*54fd6939SJiyong Park  * AMU data for a single core.
26*54fd6939SJiyong Park  */
27*54fd6939SJiyong Park struct amu_core {
28*54fd6939SJiyong Park 	uint16_t enable; /* Mask of auxiliary counters to enable */
29*54fd6939SJiyong Park };
30*54fd6939SJiyong Park 
31*54fd6939SJiyong Park /*
32*54fd6939SJiyong Park  * Topological platform data specific to the AMU.
33*54fd6939SJiyong Park  */
34*54fd6939SJiyong Park struct amu_topology {
35*54fd6939SJiyong Park 	struct amu_core cores[PLATFORM_CORE_COUNT]; /* Per-core data */
36*54fd6939SJiyong Park };
37*54fd6939SJiyong Park 
38*54fd6939SJiyong Park #if !ENABLE_AMU_FCONF
39*54fd6939SJiyong Park /*
40*54fd6939SJiyong Park  * Retrieve the platform's AMU topology. A `NULL` return value is treated as a
41*54fd6939SJiyong Park  * non-fatal error, in which case no auxiliary counters will be enabled.
42*54fd6939SJiyong Park  */
43*54fd6939SJiyong Park const struct amu_topology *plat_amu_topology(void);
44*54fd6939SJiyong Park #endif /* ENABLE_AMU_FCONF */
45*54fd6939SJiyong Park #endif /* ENABLE_AMU_AUXILIARY_COUNTERS */
46*54fd6939SJiyong Park 
47*54fd6939SJiyong Park #endif /* AMU_H */
48