mirror of
https://github.com/ARM-software/arm-trusted-firmware.git
synced 2025-04-19 11:04:20 +00:00

Combining the EL2 and EL3 enablement code necessitates that it must be called at el3_exit, which is the only place with enough context to make the decision of what needs to be set. Decouple them to allow them to be called from elsewhere. Also take some time to clarify and simplify AMU code. The sanity check in the context_restore() is now wrong, as the cpu may turn off on suspend, thus resetting the value of the counter enables. Remove it. Finally, this completes the migration to cm_manage_extensions_el3() and manage_extensions_nonsecure() so manage_extensions_nonsecure_mixed() is being removed. Signed-off-by: Boyan Karatotev <boyan.karatotev@arm.com> Change-Id: I66399132364c32be66017506bb54cbadd8485577
67 lines
1.2 KiB
C
67 lines
1.2 KiB
C
/*
|
|
* Copyright (c) 2017-2021, ARM Limited and Contributors. All rights reserved.
|
|
*
|
|
* SPDX-License-Identifier: BSD-3-Clause
|
|
*/
|
|
|
|
#ifndef AMU_H
|
|
#define AMU_H
|
|
|
|
#include <stdbool.h>
|
|
#include <stdint.h>
|
|
|
|
#include <context.h>
|
|
|
|
#include <platform_def.h>
|
|
|
|
#if ENABLE_FEAT_AMU
|
|
#if __aarch64__
|
|
void amu_enable(cpu_context_t *ctx);
|
|
void amu_init_el3(void);
|
|
void amu_init_el2_unused(void);
|
|
#else
|
|
void amu_enable(bool el2_unused);
|
|
#endif
|
|
#else
|
|
#if __aarch64__
|
|
void amu_enable(cpu_context_t *ctx)
|
|
{
|
|
}
|
|
void amu_init_el3(void)
|
|
{
|
|
}
|
|
void amu_init_el2_unused(void)
|
|
{
|
|
}
|
|
#else
|
|
static inline void amu_enable(bool el2_unused)
|
|
{
|
|
}
|
|
#endif
|
|
#endif
|
|
|
|
#if ENABLE_AMU_AUXILIARY_COUNTERS
|
|
/*
|
|
* AMU data for a single core.
|
|
*/
|
|
struct amu_core {
|
|
uint16_t enable; /* Mask of auxiliary counters to enable */
|
|
};
|
|
|
|
/*
|
|
* Topological platform data specific to the AMU.
|
|
*/
|
|
struct amu_topology {
|
|
struct amu_core cores[PLATFORM_CORE_COUNT]; /* Per-core data */
|
|
};
|
|
|
|
#if !ENABLE_AMU_FCONF
|
|
/*
|
|
* Retrieve the platform's AMU topology. A `NULL` return value is treated as a
|
|
* non-fatal error, in which case no auxiliary counters will be enabled.
|
|
*/
|
|
const struct amu_topology *plat_amu_topology(void);
|
|
#endif /* ENABLE_AMU_FCONF */
|
|
#endif /* ENABLE_AMU_AUXILIARY_COUNTERS */
|
|
|
|
#endif /* AMU_H */
|