diff options
author | Jeenu Viswambharan <jeenu.viswambharan@arm.com> | 2018-01-10 15:00:20 +0000 |
---|---|---|
committer | Jeenu Viswambharan <jeenu.viswambharan@arm.com> | 2018-02-06 07:58:55 +0000 |
commit | 26ea390891154aaa3c0236f3c206342cc5d3fdc0 (patch) | |
tree | 1626ebb743c860435bf95e97781c4027888b77ee /include/bl31 | |
parent | c8b55b8f8be3f6a388d95a7be9af4bf94e47cf86 (diff) |
Deprecate one EL3 interrupt routing model with EL3 exception handling
When ARM Trusted Firmware is built with EL3_EXCEPTION_HANDLING=1,
EL3 interrupts (INTR_TYPE_EL3) will always preempt both Non-secure and
secure execution.
The interrupt management framework currently treats EL3 interrupt
routing as valid. For the above reason, this patch makes them invalid
when EL3_EXCEPTION_HANDLING is in effect.
Change-Id: I95bca8f5dc8df8eb0ff6f305cfba098611522a39
Signed-off-by: Jeenu Viswambharan <jeenu.viswambharan@arm.com>
Diffstat (limited to 'include/bl31')
-rw-r--r-- | include/bl31/interrupt_mgmt.h | 12 |
1 files changed, 11 insertions, 1 deletions
diff --git a/include/bl31/interrupt_mgmt.h b/include/bl31/interrupt_mgmt.h index cccad3ad..d41edd09 100644 --- a/include/bl31/interrupt_mgmt.h +++ b/include/bl31/interrupt_mgmt.h @@ -1,5 +1,5 @@ /* - * Copyright (c) 2014-2017, ARM Limited and Contributors. All rights reserved. + * Copyright (c) 2014-2018, ARM Limited and Contributors. All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause */ @@ -80,9 +80,19 @@ ((x) == INTR_NS_VALID_RM1 ? 0 :\ -EINVAL)) +#if EL3_EXCEPTION_HANDLING +/* + * With EL3 exception handling, EL3 interrupts are always routed to EL3 from + * both Secure and Non-secure, and therefore INTR_EL3_VALID_RM1 is the only + * valid routing model. + */ +#define validate_el3_interrupt_rm(x) ((x) == INTR_EL3_VALID_RM1 ? 0 : \ + -EINVAL) +#else #define validate_el3_interrupt_rm(x) ((x) == INTR_EL3_VALID_RM0 ? 0 : \ ((x) == INTR_EL3_VALID_RM1 ? 0 :\ -EINVAL)) +#endif /******************************************************************************* * Macros to set the 'flags' parameter passed to an interrupt type handler. Only |