Thread (16 messages) 16 messages, 4 authors, 2025-07-08

Re: [PATCH v23 1/4] arm64/sysreg: Add BRBE registers and fields

From: Rob Herring <robh@kernel.org>
Date: 2025-06-12 20:23:47

On Thu, Jun 12, 2025 at 2:46 PM Adam Young
[off-list ref] wrote:
tested-by: Adam Young<redacted>
Thanks, I assume this is for patch 1, 2, and 4 at least because just
this patch does nothing on its own.

Note that on the mail lists, you should not top-post, but reply below
the quoted message.

Rob
Built and run on a BRBE capable machine.

Built userland perf tool

can run

perf record --branch-filter any,save_type,u true

as well as

perf record --branch-filter any,save_type,u ./sort

And will generate a perf.data file.

The mechanism applies cleanly and produced what looks like sane output.


On 6/11/25 14:01, Rob Herring (Arm) wrote:
quoted
From: Anshuman Khandual <redacted>

This patch adds definitions related to the Branch Record Buffer Extension
(BRBE) as per ARM DDI 0487K.a. These will be used by KVM and a BRBE driver
in subsequent patches.

Some existing BRBE definitions in asm/sysreg.h are replaced with equivalent
generated definitions.

Cc: Marc Zyngier <maz@kernel.org>
Reviewed-by: Mark Brown <broonie@kernel.org>
Signed-off-by: Anshuman Khandual <redacted>
Signed-off-by: Mark Rutland <mark.rutland@arm.com>
Tested-by: James Clark <james.clark@linaro.org>
Acked-by: Will Deacon <will@kernel.org>
Signed-off-by: "Rob Herring (Arm)" <robh@kernel.org>
---
v19:
- split BRBINF.CC field into mantissa and exponent
---
  arch/arm64/include/asm/sysreg.h |  16 ++---
  arch/arm64/tools/sysreg         | 132 ++++++++++++++++++++++++++++++++++++++++
  2 files changed, 138 insertions(+), 10 deletions(-)
diff --git a/arch/arm64/include/asm/sysreg.h b/arch/arm64/include/asm/sysreg.h
index f1bb0d10c39a..ef76a4b9e240 100644
--- a/arch/arm64/include/asm/sysreg.h
+++ b/arch/arm64/include/asm/sysreg.h
@@ -202,16 +202,8 @@
  #define SYS_DBGVCR32_EL2            sys_reg(2, 4, 0, 7, 0)

  #define SYS_BRBINF_EL1(n)           sys_reg(2, 1, 8, (n & 15), (((n & 16) >> 2) | 0))
-#define SYS_BRBINFINJ_EL1            sys_reg(2, 1, 9, 1, 0)
  #define SYS_BRBSRC_EL1(n)           sys_reg(2, 1, 8, (n & 15), (((n & 16) >> 2) | 1))
-#define SYS_BRBSRCINJ_EL1            sys_reg(2, 1, 9, 1, 1)
  #define SYS_BRBTGT_EL1(n)           sys_reg(2, 1, 8, (n & 15), (((n & 16) >> 2) | 2))
-#define SYS_BRBTGTINJ_EL1            sys_reg(2, 1, 9, 1, 2)
-#define SYS_BRBTS_EL1                        sys_reg(2, 1, 9, 0, 2)
-
-#define SYS_BRBCR_EL1                        sys_reg(2, 1, 9, 0, 0)
-#define SYS_BRBFCR_EL1                       sys_reg(2, 1, 9, 0, 1)
-#define SYS_BRBIDR0_EL1                      sys_reg(2, 1, 9, 2, 0)

  #define SYS_TRCITECR_EL1            sys_reg(3, 0, 1, 2, 3)
  #define SYS_TRCACATR(m)                     sys_reg(2, 1, 2, ((m & 7) << 1), (2 | (m >> 3)))
@@ -277,8 +269,6 @@
  /* ETM */
  #define SYS_TRCOSLAR                        sys_reg(2, 1, 1, 0, 4)

-#define SYS_BRBCR_EL2                        sys_reg(2, 4, 9, 0, 0)
-
  #define SYS_MIDR_EL1                        sys_reg(3, 0, 0, 0, 0)
  #define SYS_MPIDR_EL1                       sys_reg(3, 0, 0, 0, 5)
  #define SYS_REVIDR_EL1                      sys_reg(3, 0, 0, 0, 6)
@@ -821,6 +811,12 @@
  #define OP_COSP_RCTX                        sys_insn(1, 3, 7, 3, 6)
  #define OP_CPP_RCTX                 sys_insn(1, 3, 7, 3, 7)

+/*
+ * BRBE Instructions
+ */
+#define BRB_IALL_INSN        __emit_inst(0xd5000000 | OP_BRB_IALL | (0x1f))
+#define BRB_INJ_INSN __emit_inst(0xd5000000 | OP_BRB_INJ  | (0x1f))
+
  /* Common SCTLR_ELx flags. */
  #define SCTLR_ELx_ENTP2     (BIT(60))
  #define SCTLR_ELx_DSSBS     (BIT(44))
diff --git a/arch/arm64/tools/sysreg b/arch/arm64/tools/sysreg
index 8a8cf6874298..81c4e214ba33 100644
--- a/arch/arm64/tools/sysreg
+++ b/arch/arm64/tools/sysreg
@@ -1329,6 +1329,138 @@ UnsignedEnum  3:0     MTEPERM
  EndEnum
  EndSysreg

+
+SysregFields BRBINFx_EL1
+Res0 63:47
+Field        46      CCU
+Field        45:40   CC_EXP
+Field        39:32   CC_MANT
+Res0 31:18
+Field        17      LASTFAILED
+Field        16      T
+Res0 15:14
+Enum 13:8            TYPE
+     0b000000        DIRECT_UNCOND
+     0b000001        INDIRECT
+     0b000010        DIRECT_LINK
+     0b000011        INDIRECT_LINK
+     0b000101        RET
+     0b000111        ERET
+     0b001000        DIRECT_COND
+     0b100001        DEBUG_HALT
+     0b100010        CALL
+     0b100011        TRAP
+     0b100100        SERROR
+     0b100110        INSN_DEBUG
+     0b100111        DATA_DEBUG
+     0b101010        ALIGN_FAULT
+     0b101011        INSN_FAULT
+     0b101100        DATA_FAULT
+     0b101110        IRQ
+     0b101111        FIQ
+     0b110000        IMPDEF_TRAP_EL3
+     0b111001        DEBUG_EXIT
+EndEnum
+Enum 7:6     EL
+     0b00    EL0
+     0b01    EL1
+     0b10    EL2
+     0b11    EL3
+EndEnum
+Field        5       MPRED
+Res0 4:2
+Enum 1:0     VALID
+     0b00    NONE
+     0b01    TARGET
+     0b10    SOURCE
+     0b11    FULL
+EndEnum
+EndSysregFields
+
+SysregFields BRBCR_ELx
+Res0 63:24
+Field        23      EXCEPTION
+Field        22      ERTN
+Res0 21:10
+Field        9       FZPSS
+Field        8       FZP
+Res0 7
+Enum 6:5     TS
+     0b01    VIRTUAL
+     0b10    GUEST_PHYSICAL
+     0b11    PHYSICAL
+EndEnum
+Field        4       MPRED
+Field        3       CC
+Res0 2
+Field        1       ExBRE
+Field        0       E0BRE
+EndSysregFields
+
+Sysreg       BRBCR_EL1       2       1       9       0       0
+Fields       BRBCR_ELx
+EndSysreg
+
+Sysreg       BRBFCR_EL1      2       1       9       0       1
+Res0 63:30
+Enum 29:28   BANK
+     0b00    BANK_0
+     0b01    BANK_1
+EndEnum
+Res0 27:23
+Field        22      CONDDIR
+Field        21      DIRCALL
+Field        20      INDCALL
+Field        19      RTN
+Field        18      INDIRECT
+Field        17      DIRECT
+Field        16      EnI
+Res0 15:8
+Field        7       PAUSED
+Field        6       LASTFAILED
+Res0 5:0
+EndSysreg
+
+Sysreg       BRBTS_EL1       2       1       9       0       2
+Field        63:0    TS
+EndSysreg
+
+Sysreg       BRBINFINJ_EL1   2       1       9       1       0
+Fields BRBINFx_EL1
+EndSysreg
+
+Sysreg       BRBSRCINJ_EL1   2       1       9       1       1
+Field        63:0 ADDRESS
+EndSysreg
+
+Sysreg       BRBTGTINJ_EL1   2       1       9       1       2
+Field        63:0 ADDRESS
+EndSysreg
+
+Sysreg       BRBIDR0_EL1     2       1       9       2       0
+Res0 63:16
+Enum 15:12   CC
+     0b0101  20_BIT
+EndEnum
+Enum 11:8    FORMAT
+     0b0000  FORMAT_0
+EndEnum
+Enum 7:0             NUMREC
+     0b00001000      8
+     0b00010000      16
+     0b00100000      32
+     0b01000000      64
+EndEnum
+EndSysreg
+
+Sysreg       BRBCR_EL2       2       4       9       0       0
+Fields       BRBCR_ELx
+EndSysreg
+
+Sysreg       BRBCR_EL12      2       5       9       0       0
+Fields       BRBCR_ELx
+EndSysreg
+
  Sysreg      ID_AA64ZFR0_EL1 3       0       0       4       4
  Res0        63:60
  UnsignedEnum        59:56   F64MM
  
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help