mirror of
https://github.com/ARM-software/arm-trusted-firmware.git
synced 2025-04-16 01:24:27 +00:00
feat(sys_reg_trace): initialize trap settings of trace system registers access
Trap bits of trace system registers access are in architecturally UNKNOWN state at boot hence 1. Initialized trap bits to one to prohibit trace system registers accesses in lower ELs (EL2, EL1) in all security states when system trace registers are implemented. 2. These bits are RES0 in the absence of system trace register support and hence set it to zero to aligns with the Arm ARM reference recommendation,that mentions software must writes RES0 bits with all 0s. Change-Id: I4b6c15cda882325273492895d72568b29de89ca3 Signed-off-by: Manish V Badarkhe <Manish.Badarkhe@arm.com>
This commit is contained in:
parent
813524ea9d
commit
2031d6166a
4 changed files with 36 additions and 0 deletions
|
@ -102,6 +102,12 @@
|
|||
/* CSSELR definitions */
|
||||
#define LEVEL_SHIFT U(1)
|
||||
|
||||
/* ID_DFR0_EL1 definitions */
|
||||
#define ID_DFR0_COPTRC_SHIFT U(12)
|
||||
#define ID_DFR0_COPTRC_MASK U(0xf)
|
||||
#define ID_DFR0_COPTRC_SUPPORTED U(1)
|
||||
#define ID_DFR0_COPTRC_LENGTH U(4)
|
||||
|
||||
/* ID_DFR1_EL1 definitions */
|
||||
#define ID_DFR1_MTPMU_SHIFT U(0)
|
||||
#define ID_DFR1_MTPMU_MASK U(0xf)
|
||||
|
@ -516,6 +522,7 @@
|
|||
#define CTR p15, 0, c0, c0, 1
|
||||
#define CNTFRQ p15, 0, c14, c0, 0
|
||||
#define ID_MMFR4 p15, 0, c0, c2, 6
|
||||
#define ID_DFR0 p15, 0, c0, c1, 2
|
||||
#define ID_DFR1 p15, 0, c0, c3, 5
|
||||
#define ID_PFR0 p15, 0, c0, c1, 0
|
||||
#define ID_PFR1 p15, 0, c0, c1, 1
|
||||
|
|
|
@ -63,11 +63,23 @@
|
|||
* cp11 field is ignored, but is set to same value as cp10. The cp10
|
||||
* field is set to allow access to Advanced SIMD and floating point
|
||||
* features from both Security states.
|
||||
*
|
||||
* NSACR.NSTRCDIS: When system register trace implemented, Set to one
|
||||
* so that NS System register accesses to all implemented trace
|
||||
* registers are disabled.
|
||||
* When system register trace is not implemented, this bit is RES0 and
|
||||
* hence set to zero.
|
||||
* ---------------------------------------------------------------------
|
||||
*/
|
||||
ldcopr r0, NSACR
|
||||
and r0, r0, #NSACR_IMP_DEF_MASK
|
||||
orr r0, r0, #(NSACR_RESET_VAL | NSACR_ENABLE_FP_ACCESS)
|
||||
ldcopr r1, ID_DFR0
|
||||
ubfx r1, r1, #ID_DFR0_COPTRC_SHIFT, #ID_DFR0_COPTRC_LENGTH
|
||||
cmp r1, #ID_DFR0_COPTRC_SUPPORTED
|
||||
bne 1f
|
||||
orr r0, r0, #NSTRCDIS_BIT
|
||||
1:
|
||||
stcopr r0, NSACR
|
||||
isb
|
||||
|
||||
|
|
|
@ -188,6 +188,12 @@
|
|||
#define EL_IMPL_A64ONLY ULL(1)
|
||||
#define EL_IMPL_A64_A32 ULL(2)
|
||||
|
||||
/* ID_AA64DFR0_EL1.TraceVer definitions */
|
||||
#define ID_AA64DFR0_TRACEVER_SHIFT U(4)
|
||||
#define ID_AA64DFR0_TRACEVER_MASK ULL(0xf)
|
||||
#define ID_AA64DFR0_TRACEVER_SUPPORTED ULL(1)
|
||||
#define ID_AA64DFR0_TRACEVER_LENGTH U(4)
|
||||
|
||||
/* ID_AA64DFR0_EL1.PMS definitions (for ARMv8.2+) */
|
||||
#define ID_AA64DFR0_PMS_SHIFT U(32)
|
||||
#define ID_AA64DFR0_PMS_MASK ULL(0xf)
|
||||
|
|
|
@ -186,6 +186,12 @@
|
|||
* CPTR_EL3.TCPAC: Set to zero so that any accesses to CPACR_EL1,
|
||||
* CPTR_EL2, CPACR, or HCPTR do not trap to EL3.
|
||||
*
|
||||
* CPTR_EL3.TTA: Set to one so that accesses to the trace system
|
||||
* registers trap to EL3 from all exception levels and security
|
||||
* states when system register trace is implemented.
|
||||
* When system register trace is not implemented, this bit is RES0 and
|
||||
* hence set to zero.
|
||||
*
|
||||
* CPTR_EL3.TTA: Set to zero so that System register accesses to the
|
||||
* trace registers do not trap to EL3.
|
||||
*
|
||||
|
@ -201,6 +207,11 @@
|
|||
*/
|
||||
|
||||
mov_imm x0, (CPTR_EL3_RESET_VAL & ~(TCPAC_BIT | TTA_BIT | TFP_BIT))
|
||||
mrs x1, id_aa64dfr0_el1
|
||||
ubfx x1, x1, #ID_AA64DFR0_TRACEVER_SHIFT, #ID_AA64DFR0_TRACEVER_LENGTH
|
||||
cbz x1, 1f
|
||||
orr x0, x0, #TTA_BIT
|
||||
1:
|
||||
msr cptr_el3, x0
|
||||
|
||||
/*
|
||||
|
|
Loading…
Add table
Reference in a new issue