mirror of
https://github.com/ARM-software/arm-trusted-firmware.git
synced 2025-04-16 09:34:18 +00:00
Add macro to check whether the CPU implements an EL
Replace all instances of checks with the new macro. Change-Id: I0eec39b9376475a1a9707a3115de9d36f88f8a2a Signed-off-by: Jeenu Viswambharan <jeenu.viswambharan@arm.com>
This commit is contained in:
parent
7fa3214e18
commit
f4c8aa9054
8 changed files with 22 additions and 27 deletions
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
* Copyright (c) 2015-2016, ARM Limited and Contributors. All rights reserved.
|
||||
* Copyright (c) 2015-2017, ARM Limited and Contributors. All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions are met:
|
||||
|
@ -72,8 +72,7 @@ void bl1_prepare_next_image(unsigned int image_id)
|
|||
* Ensure that the build flag to save AArch32 system registers in CPU
|
||||
* context is not set for AArch64-only platforms.
|
||||
*/
|
||||
if (((read_id_aa64pfr0_el1() >> ID_AA64PFR0_EL1_SHIFT)
|
||||
& ID_AA64PFR0_ELX_MASK) == 0x1) {
|
||||
if (EL_IMPLEMENTED(1) == EL_IMPL_A64ONLY) {
|
||||
ERROR("EL1 supports AArch64-only. Please set build flag "
|
||||
"CTX_INCLUDE_AARCH32_REGS = 0");
|
||||
panic();
|
||||
|
@ -99,9 +98,8 @@ void bl1_prepare_next_image(unsigned int image_id)
|
|||
next_bl_ep->spsr = SPSR_64(MODE_EL1, MODE_SP_ELX,
|
||||
DISABLE_ALL_EXCEPTIONS);
|
||||
} else {
|
||||
/* Use EL2 if supported else use EL1. */
|
||||
if (read_id_aa64pfr0_el1() &
|
||||
(ID_AA64PFR0_ELX_MASK << ID_AA64PFR0_EL2_SHIFT)) {
|
||||
/* Use EL2 if supported; else use EL1. */
|
||||
if (EL_IMPLEMENTED(2)) {
|
||||
next_bl_ep->spsr = SPSR_64(MODE_EL2, MODE_SP_ELX,
|
||||
DISABLE_ALL_EXCEPTIONS);
|
||||
} else {
|
||||
|
|
|
@ -172,8 +172,7 @@ void bl31_prepare_next_image_entry(void)
|
|||
* Ensure that the build flag to save AArch32 system registers in CPU
|
||||
* context is not set for AArch64-only platforms.
|
||||
*/
|
||||
if (((read_id_aa64pfr0_el1() >> ID_AA64PFR0_EL1_SHIFT)
|
||||
& ID_AA64PFR0_ELX_MASK) == 0x1) {
|
||||
if (EL_IMPLEMENTED(1) == EL_IMPL_A64ONLY) {
|
||||
ERROR("EL1 supports AArch64-only. Please set build flag "
|
||||
"CTX_INCLUDE_AARCH32_REGS = 0");
|
||||
panic();
|
||||
|
|
|
@ -134,6 +134,10 @@
|
|||
#define ID_AA64PFR0_EL3_SHIFT 12
|
||||
#define ID_AA64PFR0_ELX_MASK 0xf
|
||||
|
||||
#define EL_IMPL_NONE 0
|
||||
#define EL_IMPL_A64ONLY 1
|
||||
#define EL_IMPL_A64_A32 2
|
||||
|
||||
#define ID_AA64PFR0_GIC_SHIFT 24
|
||||
#define ID_AA64PFR0_GIC_WIDTH 4
|
||||
#define ID_AA64PFR0_GIC_MASK ((1 << ID_AA64PFR0_GIC_WIDTH) - 1)
|
||||
|
|
|
@ -352,6 +352,14 @@ DEFINE_RENAME_SYSREG_WRITE_FUNC(icc_eoir1_el1, ICC_EOIR1_EL1)
|
|||
#define IS_IN_EL1() IS_IN_EL(1)
|
||||
#define IS_IN_EL3() IS_IN_EL(3)
|
||||
|
||||
/*
|
||||
* Check if an EL is implemented from AA64PFR0 register fields. 'el' argument
|
||||
* must be one of 1, 2 or 3.
|
||||
*/
|
||||
#define EL_IMPLEMENTED(el) \
|
||||
((read_id_aa64pfr0_el1() >> ID_AA64PFR0_EL##el##_SHIFT) \
|
||||
& ID_AA64PFR0_ELX_MASK)
|
||||
|
||||
/* Previously defined accesor functions with incomplete register names */
|
||||
|
||||
#define read_current_el() read_CurrentEl()
|
||||
|
|
|
@ -229,8 +229,7 @@ void cm_prepare_el3_exit(uint32_t security_state)
|
|||
sctlr_elx &= ~SCTLR_EE_BIT;
|
||||
sctlr_elx |= SCTLR_EL2_RES1;
|
||||
write_sctlr_el2(sctlr_elx);
|
||||
} else if (read_id_aa64pfr0_el1() &
|
||||
(ID_AA64PFR0_ELX_MASK << ID_AA64PFR0_EL2_SHIFT)) {
|
||||
} else if (EL_IMPLEMENTED(2)) {
|
||||
/* EL2 present but unused, need to disable safely */
|
||||
|
||||
/* HCR_EL2 = 0, except RW bit set to match SCR_EL3 */
|
||||
|
|
|
@ -137,15 +137,11 @@ uint32_t arm_get_spsr_for_bl32_entry(void)
|
|||
#ifndef AARCH32
|
||||
uint32_t arm_get_spsr_for_bl33_entry(void)
|
||||
{
|
||||
unsigned long el_status;
|
||||
unsigned int mode;
|
||||
uint32_t spsr;
|
||||
|
||||
/* Figure out what mode we enter the non-secure world in */
|
||||
el_status = read_id_aa64pfr0_el1() >> ID_AA64PFR0_EL2_SHIFT;
|
||||
el_status &= ID_AA64PFR0_ELX_MASK;
|
||||
|
||||
mode = (el_status) ? MODE_EL2 : MODE_EL1;
|
||||
mode = EL_IMPLEMENTED(2) ? MODE_EL2 : MODE_EL1;
|
||||
|
||||
/*
|
||||
* TODO: Consider the possibility of specifying the SPSR in
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
* Copyright (c) 2016, ARM Limited and Contributors. All rights reserved.
|
||||
* Copyright (c) 2016-2017, ARM Limited and Contributors. All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions are met:
|
||||
|
@ -360,20 +360,15 @@ void enable_ns_access_to_cpuectlr(void)
|
|||
static entry_point_info_t *bl31_plat_get_next_kernel64_ep_info(void)
|
||||
{
|
||||
entry_point_info_t *next_image_info;
|
||||
unsigned long el_status;
|
||||
unsigned int mode;
|
||||
|
||||
el_status = 0;
|
||||
mode = 0;
|
||||
|
||||
/* Kernel image is always non-secured */
|
||||
next_image_info = &bl33_image_ep_info;
|
||||
|
||||
/* Figure out what mode we enter the non-secure world in */
|
||||
el_status = read_id_aa64pfr0_el1() >> ID_AA64PFR0_EL2_SHIFT;
|
||||
el_status &= ID_AA64PFR0_ELX_MASK;
|
||||
|
||||
if (el_status) {
|
||||
if (EL_IMPLEMENTED(2)) {
|
||||
INFO("Kernel_EL2\n");
|
||||
mode = MODE_EL2;
|
||||
} else{
|
||||
|
|
|
@ -226,15 +226,11 @@ static uint32_t qemu_get_spsr_for_bl32_entry(void)
|
|||
******************************************************************************/
|
||||
static uint32_t qemu_get_spsr_for_bl33_entry(void)
|
||||
{
|
||||
unsigned long el_status;
|
||||
unsigned int mode;
|
||||
uint32_t spsr;
|
||||
|
||||
/* Figure out what mode we enter the non-secure world in */
|
||||
el_status = read_id_aa64pfr0_el1() >> ID_AA64PFR0_EL2_SHIFT;
|
||||
el_status &= ID_AA64PFR0_ELX_MASK;
|
||||
|
||||
mode = (el_status) ? MODE_EL2 : MODE_EL1;
|
||||
mode = EL_IMPLEMENTED(2) ? MODE_EL2 : MODE_EL1;
|
||||
|
||||
/*
|
||||
* TODO: Consider the possibility of specifying the SPSR in
|
||||
|
|
Loading…
Add table
Reference in a new issue