diff --git a/bl31/ehf.c b/bl31/ehf.c index 6f3d9412e..5b78ebb13 100644 --- a/bl31/ehf.c +++ b/bl31/ehf.c @@ -478,13 +478,10 @@ void __init ehf_init(void) /* Route EL3 interrupts when in Non-secure. */ set_interrupt_rm_flag(flags, NON_SECURE); - /* - * Route EL3 interrupts when in secure, only when SPMC is not present - * in S-EL2. - */ -#if !(defined(SPD_spmd) && (SPMD_SPM_AT_SEL2 == 1)) + /* Route EL3 interrupts only when SPM_MM present in secure. */ +#if SPM_MM set_interrupt_rm_flag(flags, SECURE); -#endif /* !(defined(SPD_spmd) && (SPMD_SPM_AT_SEL2 == 1)) */ +#endif /* Register handler for EL3 interrupts */ ret = register_interrupt_type_handler(INTR_TYPE_EL3, diff --git a/include/bl31/interrupt_mgmt.h b/include/bl31/interrupt_mgmt.h index 21af112a0..8b9dfb646 100644 --- a/include/bl31/interrupt_mgmt.h +++ b/include/bl31/interrupt_mgmt.h @@ -107,10 +107,10 @@ static inline int32_t validate_ns_interrupt_rm(uint32_t x) static inline int32_t validate_el3_interrupt_rm(uint32_t x) { -#if EL3_EXCEPTION_HANDLING && !(defined(SPD_spmd) && (SPMD_SPM_AT_SEL2 == 1)) +#if EL3_EXCEPTION_HANDLING && SPM_MM /* * With EL3 exception handling, EL3 interrupts are always routed to EL3 - * from both Secure and Non-secure, when the SPMC does not live in S-EL2. + * from Non-secure and from secure only if SPM_MM is present. * Therefore INTR_EL3_VALID_RM1 is the only valid routing model. */ if (x == INTR_EL3_VALID_RM1)