mirror of
https://github.com/ARM-software/arm-trusted-firmware.git
synced 2025-04-16 01:24:27 +00:00
feat(trbe): add trbe under feature detection mechanism
This change adds "FEAT_TRBE" to be part of feature detection mechanism. Previously feature enablement flags were of boolean type, containing either 0 or 1. With the introduction of feature detection procedure we now support three states for feature enablement build flags(0 to 2). Accordingly, "ENABLE_TRBE_FOR_NS" flag is now modified from boolean to numeric type to align with the feature detection. Change-Id: I53d3bc8dc2f6eac63feef22dfd627f3a48480afc Signed-off-by: Jayanth Dodderi Chidanand <jayanthdodderi.chidanand@arm.com>
This commit is contained in:
parent
1298f2f13d
commit
47c681b7d7
5 changed files with 28 additions and 16 deletions
2
Makefile
2
Makefile
|
@ -1045,7 +1045,6 @@ $(eval $(call assert_booleans,\
|
|||
COT_DESC_IN_DTB \
|
||||
USE_SP804_TIMER \
|
||||
PSA_FWU_SUPPORT \
|
||||
ENABLE_TRBE_FOR_NS \
|
||||
ENABLE_SYS_REG_TRACE_FOR_NS \
|
||||
ENABLE_MPMM \
|
||||
ENABLE_MPMM_FCONF \
|
||||
|
@ -1062,6 +1061,7 @@ $(eval $(call assert_numerics,\
|
|||
CTX_INCLUDE_MTE_REGS \
|
||||
CTX_INCLUDE_NEVE_REGS \
|
||||
ENABLE_BRBE_FOR_NS \
|
||||
ENABLE_TRBE_FOR_NS \
|
||||
ENABLE_BTI \
|
||||
ENABLE_PAUTH \
|
||||
ENABLE_FEAT_AMUv1 \
|
||||
|
|
|
@ -244,6 +244,16 @@ static void read_feat_brbe(void)
|
|||
#endif
|
||||
}
|
||||
|
||||
/******************************************************
|
||||
* Feature : FEAT_TRBE (Trace Buffer Extension)
|
||||
*****************************************************/
|
||||
static void read_feat_trbe(void)
|
||||
{
|
||||
#if (ENABLE_TRBE_FOR_NS == FEAT_STATE_1)
|
||||
feat_detect_panic(is_feat_trbe_present(), "TRBE");
|
||||
#endif
|
||||
}
|
||||
|
||||
/***********************************************************************************
|
||||
* TF-A supports many Arm architectural features starting from arch version
|
||||
* (8.0 till 8.7+). These features are mostly enabled through build flags. This
|
||||
|
@ -306,6 +316,7 @@ void detect_arch_features(void)
|
|||
|
||||
/* v9.0 features */
|
||||
read_feat_brbe();
|
||||
read_feat_trbe();
|
||||
|
||||
/* v9.2 features */
|
||||
read_feat_rme();
|
||||
|
|
|
@ -988,11 +988,12 @@ Common build options
|
|||
0 to 2, to align with the ``FEATURE_DETECTION`` mechanism. The default is 0
|
||||
and it is automatically disabled when the target architecture is AArch32.
|
||||
|
||||
- ``ENABLE_TRBE_FOR_NS``: This flag is used to enable access of trace buffer
|
||||
- ``ENABLE_TRBE_FOR_NS``: Numeric value to enable access of trace buffer
|
||||
control registers from NS ELs, NS-EL2 or NS-EL1(when NS-EL2 is implemented
|
||||
but unused) when FEAT_TRBE is implemented. TRBE is an optional architectural
|
||||
feature for AArch64. The default is 0 and it is automatically disabled when
|
||||
the target architecture is AArch32.
|
||||
feature for AArch64. This flag can take the values 0 to 2, to align with the
|
||||
``FEATURE_DETECTION`` mechanism. The default is 0 and it is automatically
|
||||
disabled when the target architecture is AArch32.
|
||||
|
||||
- ``ENABLE_SYS_REG_TRACE_FOR_NS``: Boolean option to enable trace system
|
||||
registers access from NS ELs, NS-EL2 or NS-EL1 (when NS-EL2 is implemented
|
||||
|
|
|
@ -234,5 +234,13 @@ static inline bool is_feat_brbe_present(void)
|
|||
ID_AA64DFR0_BRBE_MASK) == ID_AA64DFR0_BRBE_SUPPORTED);
|
||||
}
|
||||
|
||||
/*******************************************************************************
|
||||
* Function to identify the presence of FEAT_TRBE (Trace Buffer Extension)
|
||||
******************************************************************************/
|
||||
static inline bool is_feat_trbe_present(void)
|
||||
{
|
||||
return (((read_id_aa64dfr0_el1() >> ID_AA64DFR0_TRACEBUFFER_SHIFT) &
|
||||
ID_AA64DFR0_TRACEBUFFER_MASK) == ID_AA64DFR0_TRACEBUFFER_SUPPORTED);
|
||||
}
|
||||
|
||||
#endif /* ARCH_FEATURES_H */
|
||||
|
|
|
@ -1,10 +1,11 @@
|
|||
/*
|
||||
* Copyright (c) 2021, Arm Limited. All rights reserved.
|
||||
* Copyright (c) 2021-2022, Arm Limited. All rights reserved.
|
||||
*
|
||||
* SPDX-License-Identifier: BSD-3-Clause
|
||||
*/
|
||||
|
||||
#include <arch.h>
|
||||
#include <arch_features.h>
|
||||
#include <arch_helpers.h>
|
||||
#include <lib/el3_runtime/pubsub.h>
|
||||
#include <lib/extensions/trbe.h>
|
||||
|
@ -18,20 +19,11 @@ static void tsb_csync(void)
|
|||
__asm__ volatile("hint #18");
|
||||
}
|
||||
|
||||
static bool trbe_supported(void)
|
||||
{
|
||||
uint64_t features;
|
||||
|
||||
features = read_id_aa64dfr0_el1() >> ID_AA64DFR0_TRACEBUFFER_SHIFT;
|
||||
return ((features & ID_AA64DFR0_TRACEBUFFER_MASK) ==
|
||||
ID_AA64DFR0_TRACEBUFFER_SUPPORTED);
|
||||
}
|
||||
|
||||
void trbe_enable(void)
|
||||
{
|
||||
uint64_t val;
|
||||
|
||||
if (trbe_supported()) {
|
||||
if (is_feat_trbe_present()) {
|
||||
/*
|
||||
* MDCR_EL3.NSTB = 0b11
|
||||
* Allow access of trace buffer control registers from NS-EL1
|
||||
|
@ -46,7 +38,7 @@ void trbe_enable(void)
|
|||
|
||||
static void *trbe_drain_trace_buffers_hook(const void *arg __unused)
|
||||
{
|
||||
if (trbe_supported()) {
|
||||
if (is_feat_trbe_present()) {
|
||||
/*
|
||||
* Before switching from normal world to secure world
|
||||
* the trace buffers need to be drained out to memory. This is
|
||||
|
|
Loading…
Add table
Reference in a new issue