summaryrefslogtreecommitdiff
path: root/include
diff options
context:
space:
mode:
authorHarrison Mutai <harrison.mutai@arm.com>2026-06-23 14:52:19 +0000
committerTrustedFirmware Code Review <review@review.trustedfirmware.org>2026-06-23 14:52:19 +0000
commitc69734c36f503f99b3b8ba7453891f26404debad (patch)
tree825f485d9015d1be8e076d7bdace5ffca2cde1d3 /include
parentd4362918f079888c3522b5f2a89497e1f416d8e5 (diff)
parentc48a114c6f875d2ee6fb61f7b70e0a68d2762c4d (diff)
downloadarm-trusted-firmware-c69734c36f503f99b3b8ba7453891f26404debad.tar.gz
arm-trusted-firmware-c69734c36f503f99b3b8ba7453891f26404debad.zip
Merge changes from topic "ar/brbev1p1" into integration
* changes: fix(cpufeat): invalidate the FEAT_BRBE buffer after reset feat(cpufeat): add support for FEAT_BRBEv1p1
Diffstat (limited to 'include')
-rw-r--r--include/arch/aarch64/arch.h124
-rw-r--r--include/arch/aarch64/arch_features.h5
-rw-r--r--include/arch/aarch64/arch_helpers.h117
-rw-r--r--include/lib/extensions/brbe.h45
4 files changed, 288 insertions, 3 deletions
diff --git a/include/arch/aarch64/arch.h b/include/arch/aarch64/arch.h
index 966e060b1..bbd04ded1 100644
--- a/include/arch/aarch64/arch.h
+++ b/include/arch/aarch64/arch.h
@@ -1813,7 +1813,129 @@
/*******************************************************************************
* FEAT_BRBE - Branch Record Buffer Extension Registers
******************************************************************************/
-#define BRBCR_EL2 S2_4_C9_C0_0
+#define BRBE_RECORDS_PER_BANK 32
+
+#define BRBCR_EL2 S2_4_C9_C0_0
+
+#define BRBFCR_EL1 S2_1_C9_C0_1
+#define BRBFCR_EL1_PAUSED_BIT BIT(7)
+#define BRBFCR_EL1_INDCALL_BIT BIT(20)
+#define BRBFCR_EL1_DIRCALL_BIT BIT(21)
+#define BRBFCR_EL1_BANK_SHIFT U(28)
+#define BRBFCR_EL1_BANK_WIDTH U(2)
+
+#define BRBIDR0_EL1 S2_1_C9_C2_0
+#define BRBIDR0_EL1_NUMREC_SHIFT UL(0)
+#define BRBIDR0_EL1_NUMREC_WIDTH UL(8)
+
+#define BRBINFINJ_EL1 S2_1_C9_C1_0
+#define BRBSRCINJ_EL1 S2_1_C9_C1_1
+#define BRBTGTINJ_EL1 S2_1_C9_C1_2
+
+#define BRBINF0_EL1 S2_1_C8_C0_0
+#define BRBINF1_EL1 S2_1_C8_C1_0
+#define BRBINF2_EL1 S2_1_C8_C2_0
+#define BRBINF3_EL1 S2_1_C8_C3_0
+#define BRBINF4_EL1 S2_1_C8_C4_0
+#define BRBINF5_EL1 S2_1_C8_C5_0
+#define BRBINF6_EL1 S2_1_C8_C6_0
+#define BRBINF7_EL1 S2_1_C8_C7_0
+#define BRBINF8_EL1 S2_1_C8_C8_0
+#define BRBINF9_EL1 S2_1_C8_C9_0
+#define BRBINF10_EL1 S2_1_C8_C10_0
+#define BRBINF11_EL1 S2_1_C8_C11_0
+#define BRBINF12_EL1 S2_1_C8_C12_0
+#define BRBINF13_EL1 S2_1_C8_C13_0
+#define BRBINF14_EL1 S2_1_C8_C14_0
+#define BRBINF15_EL1 S2_1_C8_C15_0
+#define BRBINF16_EL1 S2_1_C8_C0_4
+#define BRBINF17_EL1 S2_1_C8_C1_4
+#define BRBINF18_EL1 S2_1_C8_C2_4
+#define BRBINF19_EL1 S2_1_C8_C3_4
+#define BRBINF20_EL1 S2_1_C8_C4_4
+#define BRBINF21_EL1 S2_1_C8_C5_4
+#define BRBINF22_EL1 S2_1_C8_C6_4
+#define BRBINF23_EL1 S2_1_C8_C7_4
+#define BRBINF24_EL1 S2_1_C8_C8_4
+#define BRBINF25_EL1 S2_1_C8_C9_4
+#define BRBINF26_EL1 S2_1_C8_C10_4
+#define BRBINF27_EL1 S2_1_C8_C11_4
+#define BRBINF28_EL1 S2_1_C8_C12_4
+#define BRBINF29_EL1 S2_1_C8_C13_4
+#define BRBINF30_EL1 S2_1_C8_C14_4
+#define BRBINF31_EL1 S2_1_C8_C15_4
+#define BRBINF_VALID_SHIFT U(0)
+#define BRBINF_VALID_WIDTH U(3)
+#define BRBINF_INVALID U(0x0)
+#define BRBINF_HALF_TGT U(0x1)
+#define BRBINF_HALF_SRC U(0x2)
+#define BRBINF_FULL U(0x3)
+
+#define BRBSRC0_EL1 S2_1_C8_C0_1
+#define BRBSRC1_EL1 S2_1_C8_C1_1
+#define BRBSRC2_EL1 S2_1_C8_C2_1
+#define BRBSRC3_EL1 S2_1_C8_C3_1
+#define BRBSRC4_EL1 S2_1_C8_C4_1
+#define BRBSRC5_EL1 S2_1_C8_C5_1
+#define BRBSRC6_EL1 S2_1_C8_C6_1
+#define BRBSRC7_EL1 S2_1_C8_C7_1
+#define BRBSRC8_EL1 S2_1_C8_C8_1
+#define BRBSRC9_EL1 S2_1_C8_C9_1
+#define BRBSRC10_EL1 S2_1_C8_C10_1
+#define BRBSRC11_EL1 S2_1_C8_C11_1
+#define BRBSRC12_EL1 S2_1_C8_C12_1
+#define BRBSRC13_EL1 S2_1_C8_C13_1
+#define BRBSRC14_EL1 S2_1_C8_C14_1
+#define BRBSRC15_EL1 S2_1_C8_C15_1
+#define BRBSRC16_EL1 S2_1_C8_C0_5
+#define BRBSRC17_EL1 S2_1_C8_C1_5
+#define BRBSRC18_EL1 S2_1_C8_C2_5
+#define BRBSRC19_EL1 S2_1_C8_C3_5
+#define BRBSRC20_EL1 S2_1_C8_C4_5
+#define BRBSRC21_EL1 S2_1_C8_C5_5
+#define BRBSRC22_EL1 S2_1_C8_C6_5
+#define BRBSRC23_EL1 S2_1_C8_C7_5
+#define BRBSRC24_EL1 S2_1_C8_C8_5
+#define BRBSRC25_EL1 S2_1_C8_C9_5
+#define BRBSRC26_EL1 S2_1_C8_C10_5
+#define BRBSRC27_EL1 S2_1_C8_C11_5
+#define BRBSRC28_EL1 S2_1_C8_C12_5
+#define BRBSRC29_EL1 S2_1_C8_C13_5
+#define BRBSRC30_EL1 S2_1_C8_C14_5
+#define BRBSRC31_EL1 S2_1_C8_C15_5
+
+#define BRBTGT0_EL1 S2_1_C8_C0_2
+#define BRBTGT1_EL1 S2_1_C8_C1_2
+#define BRBTGT2_EL1 S2_1_C8_C2_2
+#define BRBTGT3_EL1 S2_1_C8_C3_2
+#define BRBTGT4_EL1 S2_1_C8_C4_2
+#define BRBTGT5_EL1 S2_1_C8_C5_2
+#define BRBTGT6_EL1 S2_1_C8_C6_2
+#define BRBTGT7_EL1 S2_1_C8_C7_2
+#define BRBTGT8_EL1 S2_1_C8_C8_2
+#define BRBTGT9_EL1 S2_1_C8_C9_2
+#define BRBTGT10_EL1 S2_1_C8_C10_2
+#define BRBTGT11_EL1 S2_1_C8_C11_2
+#define BRBTGT12_EL1 S2_1_C8_C12_2
+#define BRBTGT13_EL1 S2_1_C8_C13_2
+#define BRBTGT14_EL1 S2_1_C8_C14_2
+#define BRBTGT15_EL1 S2_1_C8_C15_2
+#define BRBTGT16_EL1 S2_1_C8_C0_6
+#define BRBTGT17_EL1 S2_1_C8_C1_6
+#define BRBTGT18_EL1 S2_1_C8_C2_6
+#define BRBTGT19_EL1 S2_1_C8_C3_6
+#define BRBTGT20_EL1 S2_1_C8_C4_6
+#define BRBTGT21_EL1 S2_1_C8_C5_6
+#define BRBTGT22_EL1 S2_1_C8_C6_6
+#define BRBTGT23_EL1 S2_1_C8_C7_6
+#define BRBTGT24_EL1 S2_1_C8_C8_6
+#define BRBTGT25_EL1 S2_1_C8_C9_6
+#define BRBTGT26_EL1 S2_1_C8_C10_6
+#define BRBTGT27_EL1 S2_1_C8_C11_6
+#define BRBTGT28_EL1 S2_1_C8_C12_6
+#define BRBTGT29_EL1 S2_1_C8_C13_6
+#define BRBTGT30_EL1 S2_1_C8_C14_6
+#define BRBTGT31_EL1 S2_1_C8_C15_6
/*******************************************************************************
* FEAT_LS64_ACCDATA - LoadStore64B with status data
diff --git a/include/arch/aarch64/arch_features.h b/include/arch/aarch64/arch_features.h
index d59444f23..eac18405a 100644
--- a/include/arch/aarch64/arch_features.h
+++ b/include/arch/aarch64/arch_features.h
@@ -346,6 +346,10 @@
gen(feat_mec, id_aa64mmfr3_el1, ENABLE_FEAT_MEC, \
ID_AA64MMFR3_EL1_MEC, 1U, 1U, FEAT_ENABLE_ALL_WORLDS)
+#define FEAT_BRBEV1P1(gen) \
+ gen(feat_brbev1p1, id_aa64dfr0_el1, ENABLE_FEAT_BRBEV1P1, \
+ ID_AA64DFR0_BRBE, 2U, 2U, FEAT_ENABLE_ALL_WORLDS)
+
/* === v9.4 features === */
#define FEAT_D128(gen) \
gen(feat_d128, id_aa64mmfr3_el1, ENABLE_FEAT_D128, \
@@ -520,6 +524,7 @@
FEAT_TRBE(gen) \
FEAT_BRBE(gen) \
FEAT_EBEP(gen) \
+ FEAT_BRBEV1P1(gen) \
FEAT_SEBEP(gen)
CPUFEAT_LIST(CREATE_FEATURE_FUNCS)
diff --git a/include/arch/aarch64/arch_helpers.h b/include/arch/aarch64/arch_helpers.h
index 923ad7156..c799b0c53 100644
--- a/include/arch/aarch64/arch_helpers.h
+++ b/include/arch/aarch64/arch_helpers.h
@@ -789,8 +789,123 @@ DEFINE_RENAME_SYSREG_RW_FUNCS(clusterpmmdcr_el3, CLUSTERPMMDCR_EL3)
DEFINE_RENAME_SYSREG_RW_FUNCS(cpuppmcr_el3, CPUPPMCR_EL3)
DEFINE_RENAME_SYSREG_RW_FUNCS(cpumpmmcr_el3, CPUMPMMCR_EL3)
-/* Armv9.1 FEAT_BRBE Registers */
+/* Armv9.1 FEAT_BRBE instructions and registers */
+static inline void brbiall(void)
+{
+ __asm__ volatile("sys #1, c7, c2, 4" : : : "memory");
+}
+
+static inline void brbinj(void)
+{
+ __asm__ volatile("sys #1, c7, c2, 5" : : : "memory");
+}
+
DEFINE_RENAME_SYSREG_RW_FUNCS(brbcr_el2, BRBCR_EL2)
+DEFINE_RENAME_SYSREG_RW_FUNCS(brbidr0_el1, BRBIDR0_EL1)
+DEFINE_RENAME_SYSREG_RW_FUNCS(brbfcr_el1, BRBFCR_EL1)
+
+DEFINE_RENAME_SYSREG_RW_FUNCS(brbinfinj_el1, BRBINFINJ_EL1)
+DEFINE_RENAME_SYSREG_RW_FUNCS(brbsrcinj_el1, BRBSRCINJ_EL1)
+DEFINE_RENAME_SYSREG_RW_FUNCS(brbtgtinj_el1, BRBTGTINJ_EL1)
+
+DEFINE_RENAME_SYSREG_READ_FUNC(brbinf0_el1, BRBINF0_EL1)
+DEFINE_RENAME_SYSREG_READ_FUNC(brbinf1_el1, BRBINF1_EL1)
+DEFINE_RENAME_SYSREG_READ_FUNC(brbinf2_el1, BRBINF2_EL1)
+DEFINE_RENAME_SYSREG_READ_FUNC(brbinf3_el1, BRBINF3_EL1)
+DEFINE_RENAME_SYSREG_READ_FUNC(brbinf4_el1, BRBINF4_EL1)
+DEFINE_RENAME_SYSREG_READ_FUNC(brbinf5_el1, BRBINF5_EL1)
+DEFINE_RENAME_SYSREG_READ_FUNC(brbinf6_el1, BRBINF6_EL1)
+DEFINE_RENAME_SYSREG_READ_FUNC(brbinf7_el1, BRBINF7_EL1)
+DEFINE_RENAME_SYSREG_READ_FUNC(brbinf8_el1, BRBINF8_EL1)
+DEFINE_RENAME_SYSREG_READ_FUNC(brbinf9_el1, BRBINF9_EL1)
+DEFINE_RENAME_SYSREG_READ_FUNC(brbinf10_el1, BRBINF10_EL1)
+DEFINE_RENAME_SYSREG_READ_FUNC(brbinf11_el1, BRBINF11_EL1)
+DEFINE_RENAME_SYSREG_READ_FUNC(brbinf12_el1, BRBINF12_EL1)
+DEFINE_RENAME_SYSREG_READ_FUNC(brbinf13_el1, BRBINF13_EL1)
+DEFINE_RENAME_SYSREG_READ_FUNC(brbinf14_el1, BRBINF14_EL1)
+DEFINE_RENAME_SYSREG_READ_FUNC(brbinf15_el1, BRBINF15_EL1)
+DEFINE_RENAME_SYSREG_READ_FUNC(brbinf16_el1, BRBINF16_EL1)
+DEFINE_RENAME_SYSREG_READ_FUNC(brbinf17_el1, BRBINF17_EL1)
+DEFINE_RENAME_SYSREG_READ_FUNC(brbinf18_el1, BRBINF18_EL1)
+DEFINE_RENAME_SYSREG_READ_FUNC(brbinf19_el1, BRBINF19_EL1)
+DEFINE_RENAME_SYSREG_READ_FUNC(brbinf20_el1, BRBINF20_EL1)
+DEFINE_RENAME_SYSREG_READ_FUNC(brbinf21_el1, BRBINF21_EL1)
+DEFINE_RENAME_SYSREG_READ_FUNC(brbinf22_el1, BRBINF22_EL1)
+DEFINE_RENAME_SYSREG_READ_FUNC(brbinf23_el1, BRBINF23_EL1)
+DEFINE_RENAME_SYSREG_READ_FUNC(brbinf24_el1, BRBINF24_EL1)
+DEFINE_RENAME_SYSREG_READ_FUNC(brbinf25_el1, BRBINF25_EL1)
+DEFINE_RENAME_SYSREG_READ_FUNC(brbinf26_el1, BRBINF26_EL1)
+DEFINE_RENAME_SYSREG_READ_FUNC(brbinf27_el1, BRBINF27_EL1)
+DEFINE_RENAME_SYSREG_READ_FUNC(brbinf28_el1, BRBINF28_EL1)
+DEFINE_RENAME_SYSREG_READ_FUNC(brbinf29_el1, BRBINF29_EL1)
+DEFINE_RENAME_SYSREG_READ_FUNC(brbinf30_el1, BRBINF30_EL1)
+DEFINE_RENAME_SYSREG_READ_FUNC(brbinf31_el1, BRBINF31_EL1)
+
+DEFINE_RENAME_SYSREG_READ_FUNC(brbsrc0_el1, BRBSRC0_EL1)
+DEFINE_RENAME_SYSREG_READ_FUNC(brbsrc1_el1, BRBSRC1_EL1)
+DEFINE_RENAME_SYSREG_READ_FUNC(brbsrc2_el1, BRBSRC2_EL1)
+DEFINE_RENAME_SYSREG_READ_FUNC(brbsrc3_el1, BRBSRC3_EL1)
+DEFINE_RENAME_SYSREG_READ_FUNC(brbsrc4_el1, BRBSRC4_EL1)
+DEFINE_RENAME_SYSREG_READ_FUNC(brbsrc5_el1, BRBSRC5_EL1)
+DEFINE_RENAME_SYSREG_READ_FUNC(brbsrc6_el1, BRBSRC6_EL1)
+DEFINE_RENAME_SYSREG_READ_FUNC(brbsrc7_el1, BRBSRC7_EL1)
+DEFINE_RENAME_SYSREG_READ_FUNC(brbsrc8_el1, BRBSRC8_EL1)
+DEFINE_RENAME_SYSREG_READ_FUNC(brbsrc9_el1, BRBSRC9_EL1)
+DEFINE_RENAME_SYSREG_READ_FUNC(brbsrc10_el1, BRBSRC10_EL1)
+DEFINE_RENAME_SYSREG_READ_FUNC(brbsrc11_el1, BRBSRC11_EL1)
+DEFINE_RENAME_SYSREG_READ_FUNC(brbsrc12_el1, BRBSRC12_EL1)
+DEFINE_RENAME_SYSREG_READ_FUNC(brbsrc13_el1, BRBSRC13_EL1)
+DEFINE_RENAME_SYSREG_READ_FUNC(brbsrc14_el1, BRBSRC14_EL1)
+DEFINE_RENAME_SYSREG_READ_FUNC(brbsrc15_el1, BRBSRC15_EL1)
+DEFINE_RENAME_SYSREG_READ_FUNC(brbsrc16_el1, BRBSRC16_EL1)
+DEFINE_RENAME_SYSREG_READ_FUNC(brbsrc17_el1, BRBSRC17_EL1)
+DEFINE_RENAME_SYSREG_READ_FUNC(brbsrc18_el1, BRBSRC18_EL1)
+DEFINE_RENAME_SYSREG_READ_FUNC(brbsrc19_el1, BRBSRC19_EL1)
+DEFINE_RENAME_SYSREG_READ_FUNC(brbsrc20_el1, BRBSRC20_EL1)
+DEFINE_RENAME_SYSREG_READ_FUNC(brbsrc21_el1, BRBSRC21_EL1)
+DEFINE_RENAME_SYSREG_READ_FUNC(brbsrc22_el1, BRBSRC22_EL1)
+DEFINE_RENAME_SYSREG_READ_FUNC(brbsrc23_el1, BRBSRC23_EL1)
+DEFINE_RENAME_SYSREG_READ_FUNC(brbsrc24_el1, BRBSRC24_EL1)
+DEFINE_RENAME_SYSREG_READ_FUNC(brbsrc25_el1, BRBSRC25_EL1)
+DEFINE_RENAME_SYSREG_READ_FUNC(brbsrc26_el1, BRBSRC26_EL1)
+DEFINE_RENAME_SYSREG_READ_FUNC(brbsrc27_el1, BRBSRC27_EL1)
+DEFINE_RENAME_SYSREG_READ_FUNC(brbsrc28_el1, BRBSRC28_EL1)
+DEFINE_RENAME_SYSREG_READ_FUNC(brbsrc29_el1, BRBSRC29_EL1)
+DEFINE_RENAME_SYSREG_READ_FUNC(brbsrc30_el1, BRBSRC30_EL1)
+DEFINE_RENAME_SYSREG_READ_FUNC(brbsrc31_el1, BRBSRC31_EL1)
+
+DEFINE_RENAME_SYSREG_READ_FUNC(brbtgt0_el1, BRBTGT0_EL1)
+DEFINE_RENAME_SYSREG_READ_FUNC(brbtgt1_el1, BRBTGT1_EL1)
+DEFINE_RENAME_SYSREG_READ_FUNC(brbtgt2_el1, BRBTGT2_EL1)
+DEFINE_RENAME_SYSREG_READ_FUNC(brbtgt3_el1, BRBTGT3_EL1)
+DEFINE_RENAME_SYSREG_READ_FUNC(brbtgt4_el1, BRBTGT4_EL1)
+DEFINE_RENAME_SYSREG_READ_FUNC(brbtgt5_el1, BRBTGT5_EL1)
+DEFINE_RENAME_SYSREG_READ_FUNC(brbtgt6_el1, BRBTGT6_EL1)
+DEFINE_RENAME_SYSREG_READ_FUNC(brbtgt7_el1, BRBTGT7_EL1)
+DEFINE_RENAME_SYSREG_READ_FUNC(brbtgt8_el1, BRBTGT8_EL1)
+DEFINE_RENAME_SYSREG_READ_FUNC(brbtgt9_el1, BRBTGT9_EL1)
+DEFINE_RENAME_SYSREG_READ_FUNC(brbtgt10_el1, BRBTGT10_EL1)
+DEFINE_RENAME_SYSREG_READ_FUNC(brbtgt11_el1, BRBTGT11_EL1)
+DEFINE_RENAME_SYSREG_READ_FUNC(brbtgt12_el1, BRBTGT12_EL1)
+DEFINE_RENAME_SYSREG_READ_FUNC(brbtgt13_el1, BRBTGT13_EL1)
+DEFINE_RENAME_SYSREG_READ_FUNC(brbtgt14_el1, BRBTGT14_EL1)
+DEFINE_RENAME_SYSREG_READ_FUNC(brbtgt15_el1, BRBTGT15_EL1)
+DEFINE_RENAME_SYSREG_READ_FUNC(brbtgt16_el1, BRBTGT16_EL1)
+DEFINE_RENAME_SYSREG_READ_FUNC(brbtgt17_el1, BRBTGT17_EL1)
+DEFINE_RENAME_SYSREG_READ_FUNC(brbtgt18_el1, BRBTGT18_EL1)
+DEFINE_RENAME_SYSREG_READ_FUNC(brbtgt19_el1, BRBTGT19_EL1)
+DEFINE_RENAME_SYSREG_READ_FUNC(brbtgt20_el1, BRBTGT20_EL1)
+DEFINE_RENAME_SYSREG_READ_FUNC(brbtgt21_el1, BRBTGT21_EL1)
+DEFINE_RENAME_SYSREG_READ_FUNC(brbtgt22_el1, BRBTGT22_EL1)
+DEFINE_RENAME_SYSREG_READ_FUNC(brbtgt23_el1, BRBTGT23_EL1)
+DEFINE_RENAME_SYSREG_READ_FUNC(brbtgt24_el1, BRBTGT24_EL1)
+DEFINE_RENAME_SYSREG_READ_FUNC(brbtgt25_el1, BRBTGT25_EL1)
+DEFINE_RENAME_SYSREG_READ_FUNC(brbtgt26_el1, BRBTGT26_EL1)
+DEFINE_RENAME_SYSREG_READ_FUNC(brbtgt27_el1, BRBTGT27_EL1)
+DEFINE_RENAME_SYSREG_READ_FUNC(brbtgt28_el1, BRBTGT28_EL1)
+DEFINE_RENAME_SYSREG_READ_FUNC(brbtgt29_el1, BRBTGT29_EL1)
+DEFINE_RENAME_SYSREG_READ_FUNC(brbtgt30_el1, BRBTGT30_EL1)
+DEFINE_RENAME_SYSREG_READ_FUNC(brbtgt31_el1, BRBTGT31_EL1)
/* Armv9.2 RME Registers */
DEFINE_RENAME_SYSREG_RW_FUNCS(gptbr_el3, GPTBR_EL3)
diff --git a/include/lib/extensions/brbe.h b/include/lib/extensions/brbe.h
index 425a0377b..51e70adb4 100644
--- a/include/lib/extensions/brbe.h
+++ b/include/lib/extensions/brbe.h
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2022-2024, Arm Limited. All rights reserved.
+ * Copyright (c) 2022-2026, Arm Limited. All rights reserved.
*
* SPDX-License-Identifier: BSD-3-Clause
*/
@@ -11,10 +11,53 @@
#if ENABLE_BRBE_FOR_NS
void brbe_enable(cpu_context_t *ctx);
+void brbe_enable_el3(void);
+void brbe_start_recording(void);
+void brbe_stop_recording(void);
+void _brbe_dump_branch_records(void);
+static inline void brbe_dump_branch_records(void)
+{
+ u_register_t brbfcr = read_brbfcr_el1();
+
+ /* Pause branch recording so that we can dump without polluting the
+ * record. Do this in a static inline for zero extra branches. */
+ write_brbfcr_el1(brbfcr | BRBFCR_EL1_PAUSED_BIT);
+ isb();
+
+ _brbe_dump_branch_records();
+
+ write_brbfcr_el1(brbfcr);
+ isb();
+}
#else
static inline void brbe_enable(cpu_context_t *ctx)
{
}
+static inline void brbe_enable_el3(void)
+{
+}
+static inline void brbe_start_recording(void)
+{
+}
+static inline void brbe_stop_recording(void)
+{
+}
+static inline void brbe_dump_branch_records(void)
+{
+}
#endif /* ENABLE_BRBE_FOR_NS */
+/* Maximum number of branch records per bank (32 per bank, 2 banks max) */
+#define BRBE_MAX_RECORDS_PER_BANK U(32)
+#define BRBE_MAX_BANKS U(2)
+#define BRBE_MAX_RECORDS (BRBE_MAX_RECORDS_PER_BANK * BRBE_MAX_BANKS)
+
+/* BRBE context structure for save/restore */
+typedef struct brbe_regs {
+ u_register_t brbfcr_el1;
+ u_register_t records;
+ u_register_t brbinf[BRBE_MAX_RECORDS];
+ u_register_t brbsrc[BRBE_MAX_RECORDS];
+ u_register_t brbtgt[BRBE_MAX_RECORDS];
+} brbe_regs_t;
#endif /* BRBE_H */