mirror of
https://github.com/ARM-software/arm-trusted-firmware.git
synced 2025-04-21 03:54:34 +00:00
Merge "fix(security): Set MDCR_EL3.MCCD bit" into integration
This commit is contained in:
commit
66bf006e28
3 changed files with 29 additions and 14 deletions
|
@ -434,8 +434,16 @@
|
||||||
#define SCR_RESET_VAL SCR_RES1_BITS
|
#define SCR_RESET_VAL SCR_RES1_BITS
|
||||||
|
|
||||||
/* MDCR_EL3 definitions */
|
/* MDCR_EL3 definitions */
|
||||||
|
#define MDCR_EnPMSN_BIT (ULL(1) << 36)
|
||||||
|
#define MDCR_MPMX_BIT (ULL(1) << 35)
|
||||||
|
#define MDCR_MCCD_BIT (ULL(1) << 34)
|
||||||
#define MDCR_MTPME_BIT (ULL(1) << 28)
|
#define MDCR_MTPME_BIT (ULL(1) << 28)
|
||||||
|
#define MDCR_TDCC_BIT (ULL(1) << 27)
|
||||||
#define MDCR_SCCD_BIT (ULL(1) << 23)
|
#define MDCR_SCCD_BIT (ULL(1) << 23)
|
||||||
|
#define MDCR_EPMAD_BIT (ULL(1) << 21)
|
||||||
|
#define MDCR_EDAD_BIT (ULL(1) << 20)
|
||||||
|
#define MDCR_TTRF_BIT (ULL(1) << 19)
|
||||||
|
#define MDCR_STE_BIT (ULL(1) << 18)
|
||||||
#define MDCR_SPME_BIT (ULL(1) << 17)
|
#define MDCR_SPME_BIT (ULL(1) << 17)
|
||||||
#define MDCR_SDD_BIT (ULL(1) << 16)
|
#define MDCR_SDD_BIT (ULL(1) << 16)
|
||||||
#define MDCR_SPD32(x) ((x) << 14)
|
#define MDCR_SPD32(x) ((x) << 14)
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 2015-2020, ARM Limited and Contributors. All rights reserved.
|
* Copyright (c) 2015-2021, ARM Limited and Contributors. All rights reserved.
|
||||||
*
|
*
|
||||||
* SPDX-License-Identifier: BSD-3-Clause
|
* SPDX-License-Identifier: BSD-3-Clause
|
||||||
*/
|
*/
|
||||||
|
@ -113,8 +113,13 @@
|
||||||
*
|
*
|
||||||
* MDCR_EL3.SCCD: Set to one so that cycle counting by PMCCNTR_EL0 is
|
* MDCR_EL3.SCCD: Set to one so that cycle counting by PMCCNTR_EL0 is
|
||||||
* prohibited in Secure state. This bit is RES0 in versions of the
|
* prohibited in Secure state. This bit is RES0 in versions of the
|
||||||
* architecture earlier than ARMv8.5, setting it to 1 doesn't have any
|
* architecture with FEAT_PMUv3p5 not implemented, setting it to 1
|
||||||
* effect on them.
|
* doesn't have any effect on them.
|
||||||
|
*
|
||||||
|
* MDCR_EL3.MCCD: Set to one so that cycle counting by PMCCNTR_EL0 is
|
||||||
|
* prohibited in EL3. This bit is RES0 in versions of the
|
||||||
|
* architecture with FEAT_PMUv3p7 not implemented, setting it to 1
|
||||||
|
* doesn't have any effect on them.
|
||||||
*
|
*
|
||||||
* MDCR_EL3.SPME: Set to zero so that event counting by the programmable
|
* MDCR_EL3.SPME: Set to zero so that event counting by the programmable
|
||||||
* counters PMEVCNTR<n>_EL0 is prohibited in Secure state. If ARMv8.2
|
* counters PMEVCNTR<n>_EL0 is prohibited in Secure state. If ARMv8.2
|
||||||
|
@ -124,9 +129,9 @@
|
||||||
* ---------------------------------------------------------------------
|
* ---------------------------------------------------------------------
|
||||||
*/
|
*/
|
||||||
mov_imm x0, ((MDCR_EL3_RESET_VAL | MDCR_SDD_BIT | \
|
mov_imm x0, ((MDCR_EL3_RESET_VAL | MDCR_SDD_BIT | \
|
||||||
MDCR_SPD32(MDCR_SPD32_DISABLE) | MDCR_SCCD_BIT) & \
|
MDCR_SPD32(MDCR_SPD32_DISABLE) | MDCR_SCCD_BIT | \
|
||||||
~(MDCR_SPME_BIT | MDCR_TDOSA_BIT | MDCR_TDA_BIT | \
|
MDCR_MCCD_BIT) & ~(MDCR_SPME_BIT | MDCR_TDOSA_BIT | \
|
||||||
MDCR_TPM_BIT))
|
MDCR_TDA_BIT | MDCR_TPM_BIT))
|
||||||
|
|
||||||
msr mdcr_el3, x0
|
msr mdcr_el3, x0
|
||||||
|
|
||||||
|
|
|
@ -697,13 +697,14 @@ func save_gp_pmcr_pauth_regs
|
||||||
str x18, [sp, #CTX_GPREGS_OFFSET + CTX_GPREG_SP_EL0]
|
str x18, [sp, #CTX_GPREGS_OFFSET + CTX_GPREG_SP_EL0]
|
||||||
|
|
||||||
/* ----------------------------------------------------------
|
/* ----------------------------------------------------------
|
||||||
* Check if earlier initialization MDCR_EL3.SCCD to 1 failed,
|
* Check if earlier initialization MDCR_EL3.SCCD/MCCD to 1
|
||||||
* meaning that ARMv8-PMU is not implemented and PMCR_EL0
|
* failed, meaning that FEAT_PMUv3p5/7 is not implemented and
|
||||||
* should be saved in non-secure context.
|
* PMCR_EL0 should be saved in non-secure context.
|
||||||
* ----------------------------------------------------------
|
* ----------------------------------------------------------
|
||||||
*/
|
*/
|
||||||
|
mov_imm x10, (MDCR_SCCD_BIT | MDCR_MCCD_BIT)
|
||||||
mrs x9, mdcr_el3
|
mrs x9, mdcr_el3
|
||||||
tst x9, #MDCR_SCCD_BIT
|
tst x9, x10
|
||||||
bne 1f
|
bne 1f
|
||||||
|
|
||||||
/* Secure Cycle Counter is not disabled */
|
/* Secure Cycle Counter is not disabled */
|
||||||
|
@ -792,13 +793,14 @@ func restore_gp_pmcr_pauth_regs
|
||||||
|
|
||||||
/* ----------------------------------------------------------
|
/* ----------------------------------------------------------
|
||||||
* Back to Non-secure state.
|
* Back to Non-secure state.
|
||||||
* Check if earlier initialization MDCR_EL3.SCCD to 1 failed,
|
* Check if earlier initialization MDCR_EL3.SCCD/MCCD to 1
|
||||||
* meaning that ARMv8-PMU is not implemented and PMCR_EL0
|
* failed, meaning that FEAT_PMUv3p5/7 is not implemented and
|
||||||
* should be restored from non-secure context.
|
* PMCR_EL0 should be restored from non-secure context.
|
||||||
* ----------------------------------------------------------
|
* ----------------------------------------------------------
|
||||||
*/
|
*/
|
||||||
|
mov_imm x1, (MDCR_SCCD_BIT | MDCR_MCCD_BIT)
|
||||||
mrs x0, mdcr_el3
|
mrs x0, mdcr_el3
|
||||||
tst x0, #MDCR_SCCD_BIT
|
tst x0, x1
|
||||||
bne 2f
|
bne 2f
|
||||||
ldr x0, [sp, #CTX_EL3STATE_OFFSET + CTX_PMCR_EL0]
|
ldr x0, [sp, #CTX_EL3STATE_OFFSET + CTX_PMCR_EL0]
|
||||||
msr pmcr_el0, x0
|
msr pmcr_el0, x0
|
||||||
|
|
Loading…
Add table
Reference in a new issue