diff --git a/bl31/aarch64/bl31_entrypoint.S b/bl31/aarch64/bl31_entrypoint.S index 2e7476a..e4dfea4 100644 --- a/bl31/aarch64/bl31_entrypoint.S +++ b/bl31/aarch64/bl31_entrypoint.S @@ -72,11 +72,13 @@ isb /* --------------------------------------------- - * Set the exception vector to something sane. + * Set the exception vector and zero tpidr_el3 + * until the crash reporting is set up * --------------------------------------------- */ - adr x1, early_exceptions + adr x1, runtime_exceptions msr vbar_el3, x1 + msr tpidr_el3, xzr /* --------------------------------------------------------------------- * The initial state of the Architectural feature trap register @@ -134,10 +136,10 @@ * Initialise cpu_data and crash reporting * --------------------------------------------- */ - bl init_cpu_data_ptr #if CRASH_REPORTING bl init_crash_reporting #endif + bl init_cpu_data_ptr /* --------------------------------------------- * Use SP_EL0 for the C runtime stack. diff --git a/bl31/bl31.mk b/bl31/bl31.mk index 4602e41..5555c31 100644 --- a/bl31/bl31.mk +++ b/bl31/bl31.mk @@ -38,8 +38,7 @@ bl31/aarch64/context.S \ bl31/aarch64/cpu_data.S \ bl31/aarch64/runtime_exceptions.S \ - bl31/aarch64/crash_reporting.S \ - common/aarch64/early_exceptions.S \ + bl31/aarch64/crash_reporting.S \ lib/aarch64/cpu_helpers.S \ lib/locks/bakery/bakery_lock.c \ lib/locks/exclusive/spinlock.S \ diff --git a/bl31/bl31_main.c b/bl31/bl31_main.c index 5bb11ba..6f88e65 100644 --- a/bl31/bl31_main.c +++ b/bl31/bl31_main.c @@ -71,7 +71,6 @@ ******************************************************************************/ void bl31_main(void) { - /* Perform remaining generic architectural setup from EL3 */ bl31_arch_setup(); @@ -89,16 +88,7 @@ /* Clean caches before re-entering normal world */ dcsw_op_all(DCCSW); - /* - * Use the more complex exception vectors now that context - * management is setup. SP_EL3 should point to a 'cpu_context' - * structure which has an exception stack allocated. The PSCI - * service should have set the context. - */ - assert(cm_get_context(NON_SECURE)); - cm_set_next_eret_context(NON_SECURE); - write_vbar_el3((uint64_t) runtime_exceptions); - isb(); + /* By default run the non-secure BL3-3 image next */ next_image_type = NON_SECURE; /* diff --git a/include/bl31/runtime_svc.h b/include/bl31/runtime_svc.h index 3b84f06..f3543d4 100644 --- a/include/bl31/runtime_svc.h +++ b/include/bl31/runtime_svc.h @@ -268,7 +268,6 @@ extern uint64_t __RT_SVC_DESCS_START__; extern uint64_t __RT_SVC_DESCS_END__; void init_crash_reporting(void); -void runtime_exceptions(void); #endif /*__ASSEMBLY__*/ #endif /* __RUNTIME_SVC_H__ */ diff --git a/services/std_svc/psci/psci_afflvl_on.c b/services/std_svc/psci/psci_afflvl_on.c index 1c7a877..e4d8f1f 100644 --- a/services/std_svc/psci/psci_afflvl_on.c +++ b/services/std_svc/psci/psci_afflvl_on.c @@ -373,16 +373,6 @@ bl31_arch_setup(); /* - * Use the more complex exception vectors to enable SPD - * initialisation. SP_EL3 should point to a 'cpu_context' - * structure. The calling cpu should have set the - * context already - */ - assert(cm_get_context(NON_SECURE)); - cm_set_next_eret_context(NON_SECURE); - write_vbar_el3((uint64_t) runtime_exceptions); - - /* * Call the cpu on finish handler registered by the Secure Payload * Dispatcher to let it do any bookeeping. If the handler encounters an * error, it's expected to assert within diff --git a/services/std_svc/psci/psci_afflvl_suspend.c b/services/std_svc/psci/psci_afflvl_suspend.c index 3a1a419..9934310 100644 --- a/services/std_svc/psci/psci_afflvl_suspend.c +++ b/services/std_svc/psci/psci_afflvl_suspend.c @@ -491,15 +491,6 @@ rc = PSCI_E_SUCCESS; /* - * Use the more complex exception vectors to enable SPD - * initialisation. SP_EL3 should point to a 'cpu_context' - * structure. The non-secure context should have been - * set on this cpu prior to suspension. - */ - cm_set_next_eret_context(NON_SECURE); - write_vbar_el3((uint64_t) runtime_exceptions); - - /* * Call the cpu suspend finish handler registered by the Secure Payload * Dispatcher to let it do any bookeeping. If the handler encounters an * error, it's expected to assert within diff --git a/services/std_svc/psci/psci_entry.S b/services/std_svc/psci/psci_entry.S index 037673d..5628d79 100644 --- a/services/std_svc/psci/psci_entry.S +++ b/services/std_svc/psci/psci_entry.S @@ -67,12 +67,10 @@ bl init_cpu_data_ptr /* --------------------------------------------- - * Exceptions should not occur at this point. - * Set VBAR in order to handle and report any - * that do occur + * Set the exception vectors * --------------------------------------------- */ - adr x0, early_exceptions + adr x0, runtime_exceptions msr vbar_el3, x0 isb