1*91f16700Schasinglulu/* 2*91f16700Schasinglulu * Copyright (c) 2021, ARM Limited and Contributors. All rights reserved. 3*91f16700Schasinglulu * 4*91f16700Schasinglulu * SPDX-License-Identifier: BSD-3-Clause 5*91f16700Schasinglulu */ 6*91f16700Schasinglulu 7*91f16700Schasinglulu#include <arch.h> 8*91f16700Schasinglulu#include <asm_macros.S> 9*91f16700Schasinglulu#include <bl1/bl1.h> 10*91f16700Schasinglulu#include <common/bl_common.h> 11*91f16700Schasinglulu#include <context.h> 12*91f16700Schasinglulu 13*91f16700Schasinglulu/* ----------------------------------------------------------------------------- 14*91f16700Schasinglulu * File contains an EL2 equivalent of the EL3 vector table from: 15*91f16700Schasinglulu * .../bl1/aarch64/bl1_exceptions.S 16*91f16700Schasinglulu * ----------------------------------------------------------------------------- 17*91f16700Schasinglulu */ 18*91f16700Schasinglulu 19*91f16700Schasinglulu/* ----------------------------------------------------------------------------- 20*91f16700Schasinglulu * Very simple stackless exception handlers used by BL1. 21*91f16700Schasinglulu * ----------------------------------------------------------------------------- 22*91f16700Schasinglulu */ 23*91f16700Schasinglulu .globl bl1_exceptions 24*91f16700Schasinglulu 25*91f16700Schasingluluvector_base bl1_exceptions 26*91f16700Schasinglulu 27*91f16700Schasinglulu /* ----------------------------------------------------- 28*91f16700Schasinglulu * Current EL with SP0 : 0x0 - 0x200 29*91f16700Schasinglulu * ----------------------------------------------------- 30*91f16700Schasinglulu */ 31*91f16700Schasingluluvector_entry SynchronousExceptionSP0 32*91f16700Schasinglulu mov x0, #SYNC_EXCEPTION_SP_EL0 33*91f16700Schasinglulu bl plat_report_exception 34*91f16700Schasinglulu no_ret plat_panic_handler 35*91f16700Schasingluluend_vector_entry SynchronousExceptionSP0 36*91f16700Schasinglulu 37*91f16700Schasingluluvector_entry IrqSP0 38*91f16700Schasinglulu mov x0, #IRQ_SP_EL0 39*91f16700Schasinglulu bl plat_report_exception 40*91f16700Schasinglulu no_ret plat_panic_handler 41*91f16700Schasingluluend_vector_entry IrqSP0 42*91f16700Schasinglulu 43*91f16700Schasingluluvector_entry FiqSP0 44*91f16700Schasinglulu mov x0, #FIQ_SP_EL0 45*91f16700Schasinglulu bl plat_report_exception 46*91f16700Schasinglulu no_ret plat_panic_handler 47*91f16700Schasingluluend_vector_entry FiqSP0 48*91f16700Schasinglulu 49*91f16700Schasingluluvector_entry SErrorSP0 50*91f16700Schasinglulu mov x0, #SERROR_SP_EL0 51*91f16700Schasinglulu bl plat_report_exception 52*91f16700Schasinglulu no_ret plat_panic_handler 53*91f16700Schasingluluend_vector_entry SErrorSP0 54*91f16700Schasinglulu 55*91f16700Schasinglulu /* ----------------------------------------------------- 56*91f16700Schasinglulu * Current EL with SPx: 0x200 - 0x400 57*91f16700Schasinglulu * ----------------------------------------------------- 58*91f16700Schasinglulu */ 59*91f16700Schasingluluvector_entry SynchronousExceptionSPx 60*91f16700Schasinglulu mov x0, #SYNC_EXCEPTION_SP_ELX 61*91f16700Schasinglulu bl plat_report_exception 62*91f16700Schasinglulu no_ret plat_panic_handler 63*91f16700Schasingluluend_vector_entry SynchronousExceptionSPx 64*91f16700Schasinglulu 65*91f16700Schasingluluvector_entry IrqSPx 66*91f16700Schasinglulu mov x0, #IRQ_SP_ELX 67*91f16700Schasinglulu bl plat_report_exception 68*91f16700Schasinglulu no_ret plat_panic_handler 69*91f16700Schasingluluend_vector_entry IrqSPx 70*91f16700Schasinglulu 71*91f16700Schasingluluvector_entry FiqSPx 72*91f16700Schasinglulu mov x0, #FIQ_SP_ELX 73*91f16700Schasinglulu bl plat_report_exception 74*91f16700Schasinglulu no_ret plat_panic_handler 75*91f16700Schasingluluend_vector_entry FiqSPx 76*91f16700Schasinglulu 77*91f16700Schasingluluvector_entry SErrorSPx 78*91f16700Schasinglulu mov x0, #SERROR_SP_ELX 79*91f16700Schasinglulu bl plat_report_exception 80*91f16700Schasinglulu no_ret plat_panic_handler 81*91f16700Schasingluluend_vector_entry SErrorSPx 82*91f16700Schasinglulu 83*91f16700Schasinglulu /* ----------------------------------------------------- 84*91f16700Schasinglulu * Lower EL using AArch64 : 0x400 - 0x600 85*91f16700Schasinglulu * ----------------------------------------------------- 86*91f16700Schasinglulu */ 87*91f16700Schasingluluvector_entry SynchronousExceptionA64 88*91f16700Schasinglulu /* The current v8-R64 implementation does not support conduit calls */ 89*91f16700Schasinglulu b el2_panic 90*91f16700Schasingluluend_vector_entry SynchronousExceptionA64 91*91f16700Schasinglulu 92*91f16700Schasingluluvector_entry IrqA64 93*91f16700Schasinglulu mov x0, #IRQ_AARCH64 94*91f16700Schasinglulu bl plat_report_exception 95*91f16700Schasinglulu no_ret plat_panic_handler 96*91f16700Schasingluluend_vector_entry IrqA64 97*91f16700Schasinglulu 98*91f16700Schasingluluvector_entry FiqA64 99*91f16700Schasinglulu mov x0, #FIQ_AARCH64 100*91f16700Schasinglulu bl plat_report_exception 101*91f16700Schasinglulu no_ret plat_panic_handler 102*91f16700Schasingluluend_vector_entry FiqA64 103*91f16700Schasinglulu 104*91f16700Schasingluluvector_entry SErrorA64 105*91f16700Schasinglulu mov x0, #SERROR_AARCH64 106*91f16700Schasinglulu bl plat_report_exception 107*91f16700Schasinglulu no_ret plat_panic_handler 108*91f16700Schasingluluend_vector_entry SErrorA64 109*91f16700Schasinglulu 110*91f16700Schasinglulu 111*91f16700Schasingluluunexpected_sync_exception: 112*91f16700Schasinglulu mov x0, #SYNC_EXCEPTION_AARCH64 113*91f16700Schasinglulu bl plat_report_exception 114*91f16700Schasinglulu no_ret plat_panic_handler 115*91f16700Schasinglulu 116*91f16700Schasinglulu /* ----------------------------------------------------- 117*91f16700Schasinglulu * Save Secure/Normal world context and jump to 118*91f16700Schasinglulu * BL1 SMC handler. 119*91f16700Schasinglulu * ----------------------------------------------------- 120*91f16700Schasinglulu */ 121