diff options
author | johpow01 <john.powell@arm.com> | 2022-01-28 17:06:20 -0600 |
---|---|---|
committer | John Powell <john.powell@arm.com> | 2022-05-05 19:43:10 +0200 |
commit | 744ad97445ce7aa65adaef376d0b5bafc12a90d3 (patch) | |
tree | 843a7156144107e776b282ba0db093b44c7ac64a /lib | |
parent | 8d6502183d1ef67d84ef4a086d6eb1aa309086bc (diff) | |
download | trusted-firmware-a-744ad97445ce7aa65adaef376d0b5bafc12a90d3.tar.gz |
feat(brbe): add BRBE support for NS world
This patch enables access to the branch record buffer control registers
in non-secure EL2 and EL1 using the new build option ENABLE_BRBE_FOR_NS.
It is disabled for all secure world, and cannot be used with ENABLE_RME.
This option is disabled by default, however, the FVP platform makefile
enables it for FVP builds.
Signed-off-by: John Powell <john.powell@arm.com>
Change-Id: I576a49d446a8a73286ea6417c16bd0b8de71fca0
Diffstat (limited to 'lib')
-rw-r--r-- | lib/el3_runtime/aarch64/context_mgmt.c | 5 | ||||
-rw-r--r-- | lib/extensions/brbe/brbe.c | 35 |
2 files changed, 40 insertions, 0 deletions
diff --git a/lib/el3_runtime/aarch64/context_mgmt.c b/lib/el3_runtime/aarch64/context_mgmt.c index 47e7d8c31a..449f120a57 100644 --- a/lib/el3_runtime/aarch64/context_mgmt.c +++ b/lib/el3_runtime/aarch64/context_mgmt.c @@ -20,6 +20,7 @@ #include <lib/el3_runtime/context_mgmt.h> #include <lib/el3_runtime/pubsub_events.h> #include <lib/extensions/amu.h> +#include <lib/extensions/brbe.h> #include <lib/extensions/mpam.h> #include <lib/extensions/sme.h> #include <lib/extensions/spe.h> @@ -469,6 +470,10 @@ static void manage_extensions_nonsecure(bool el2_unused, cpu_context_t *ctx) trbe_enable(); #endif /* ENABLE_TRBE_FOR_NS */ +#if ENABLE_BRBE_FOR_NS + brbe_enable(); +#endif /* ENABLE_BRBE_FOR_NS */ + #if ENABLE_SYS_REG_TRACE_FOR_NS sys_reg_trace_enable(ctx); #endif /* ENABLE_SYS_REG_TRACE_FOR_NS */ diff --git a/lib/extensions/brbe/brbe.c b/lib/extensions/brbe/brbe.c new file mode 100644 index 0000000000..6975b049cc --- /dev/null +++ b/lib/extensions/brbe/brbe.c @@ -0,0 +1,35 @@ +/* + * Copyright (c) 2022, Arm Limited. All rights reserved. + * + * SPDX-License-Identifier: BSD-3-Clause + */ + +#include <arch.h> +#include <arch_helpers.h> + +static bool brbe_supported(void) +{ + uint64_t features; + + features = read_id_aa64dfr0_el1() >> ID_AA64DFR0_BRBE_SHIFT; + return ((features & ID_AA64DFR0_BRBE_MASK) == + ID_AA64DFR0_BRBE_SUPPORTED); +} + +void brbe_enable(void) +{ + uint64_t val; + + if (brbe_supported()) { + /* + * MDCR_EL3.SBRBE = 0b01 + * + * Allows BRBE usage in non-secure world and prohibited in + * secure world. + */ + val = read_mdcr_el3(); + val &= ~(MDCR_SBRBE_MASK << MDCR_SBRBE_SHIFT); + val |= (0x1UL << MDCR_SBRBE_SHIFT); + write_mdcr_el3(val); + } +} |