1 /*
2 * Copyright (c) 2022-2024, Arm Limited. All rights reserved.
3 *
4 * SPDX-License-Identifier: Apache-2.0
5 *
6 * Licensed under the Apache License, Version 2.0 (the License); you may
7 * not use this file except in compliance with the License.
8 * You may obtain a copy of the License at
9 *
10 * www.apache.org/licenses/LICENSE-2.0
11 *
12 * Unless required by applicable law or agreed to in writing, software
13 * distributed under the License is distributed on an AS IS BASIS, WITHOUT
14 * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15 * See the License for the specific language governing permissions and
16 * limitations under the License.
17 */
18
19 /*
20 * This file is derivative of CMSIS V5.9.0 startup_ARMCM33.c
21 * Git SHA: 2b7495b8535bdcb306dac29b9ded4cfb679d7e5c
22 */
23
24 #include "tfm_hal_device_header.h"
25 #include "startup.h"
26 #include "exception_info.h"
27
default_tfm_IRQHandler(void)28 __NO_RETURN __attribute__((naked)) void default_tfm_IRQHandler(void) {
29 EXCEPTION_INFO();
30
31 __ASM volatile(
32 "BL default_irq_handler \n"
33 "B . \n"
34 );
35 }
36
37 DEFAULT_IRQ_HANDLER(NMI_Handler)
38 DEFAULT_IRQ_HANDLER(SVC_Handler)
39 DEFAULT_IRQ_HANDLER(DebugMon_Handler)
40 DEFAULT_IRQ_HANDLER(PendSV_Handler)
41 DEFAULT_IRQ_HANDLER(SysTick_Handler)
42
43 DEFAULT_IRQ_HANDLER(FPU_IRQHandler)
44 DEFAULT_IRQ_HANDLER(CACHE_IRQHandler)
45 DEFAULT_IRQ_HANDLER(CLOCK_POWER_IRQHandler)
46 DEFAULT_IRQ_HANDLER(SERIAL0_IRQHandler)
47 DEFAULT_IRQ_HANDLER(SERIAL1_IRQHandler)
48 DEFAULT_IRQ_HANDLER(SPIM4_IRQHandler)
49 DEFAULT_IRQ_HANDLER(SERIAL2_IRQHandler)
50 DEFAULT_IRQ_HANDLER(SERIAL3_IRQHandler)
51 DEFAULT_IRQ_HANDLER(GPIOTE0_IRQHandler)
52 DEFAULT_IRQ_HANDLER(SAADC_IRQHandler)
53 DEFAULT_IRQ_HANDLER(TIMER0_IRQHandler)
54 DEFAULT_IRQ_HANDLER(TIMER1_IRQHandler)
55 DEFAULT_IRQ_HANDLER(TIMER2_IRQHandler)
56 DEFAULT_IRQ_HANDLER(RTC0_IRQHandler)
57 DEFAULT_IRQ_HANDLER(RTC1_IRQHandler)
58 DEFAULT_IRQ_HANDLER(WDT0_IRQHandler)
59 DEFAULT_IRQ_HANDLER(WDT1_IRQHandler)
60 DEFAULT_IRQ_HANDLER(COMP_LPCOMP_IRQHandler)
61 DEFAULT_IRQ_HANDLER(EGU0_IRQHandler)
62 DEFAULT_IRQ_HANDLER(EGU1_IRQHandler)
63 DEFAULT_IRQ_HANDLER(EGU2_IRQHandler)
64 DEFAULT_IRQ_HANDLER(EGU3_IRQHandler)
65 DEFAULT_IRQ_HANDLER(EGU4_IRQHandler)
66 DEFAULT_IRQ_HANDLER(EGU5_IRQHandler)
67 DEFAULT_IRQ_HANDLER(PWM0_IRQHandler)
68 DEFAULT_IRQ_HANDLER(PWM1_IRQHandler)
69 DEFAULT_IRQ_HANDLER(PWM2_IRQHandler)
70 DEFAULT_IRQ_HANDLER(PWM3_IRQHandler)
71 DEFAULT_IRQ_HANDLER(PDM0_IRQHandler)
72 DEFAULT_IRQ_HANDLER(I2S0_IRQHandler)
73 DEFAULT_IRQ_HANDLER(IPC_IRQHandler)
74 DEFAULT_IRQ_HANDLER(QSPI_IRQHandler)
75 DEFAULT_IRQ_HANDLER(NFCT_IRQHandler)
76 DEFAULT_IRQ_HANDLER(GPIOTE1_IRQHandler)
77 DEFAULT_IRQ_HANDLER(QDEC0_IRQHandler)
78 DEFAULT_IRQ_HANDLER(QDEC1_IRQHandler)
79 DEFAULT_IRQ_HANDLER(USBD_IRQHandler)
80 DEFAULT_IRQ_HANDLER(USBREGULATOR_IRQHandler)
81 DEFAULT_IRQ_HANDLER(KMU_IRQHandler)
82 DEFAULT_IRQ_HANDLER(CRYPTOCELL_IRQHandler)
83
84 #if defined(DOMAIN_NS) || defined(BL2)
85 DEFAULT_IRQ_HANDLER(SPU_IRQHandler)
86 DEFAULT_IRQ_HANDLER(HardFault_Handler)
87 DEFAULT_IRQ_HANDLER(MemManage_Handler)
88 DEFAULT_IRQ_HANDLER(BusFault_Handler)
89 DEFAULT_IRQ_HANDLER(UsageFault_Handler)
90 DEFAULT_IRQ_HANDLER(SecureFault_Handler)
91 #else
92 /*
93 * Default IRQ handlers will usually be overriden as they are
94 * weak. But due to the way TF-M links it's binary (doesn't use
95 * whole-archive), weak doesn't always work. So we explicitly ifdef
96 * out some IRQ handlers that we know will be overridden anyway to be
97 * safe.
98 */
99 #endif
100
101 #if defined ( __GNUC__ )
102 #pragma GCC diagnostic push
103 #pragma GCC diagnostic ignored "-Wpedantic"
104 #endif
105
106 const VECTOR_TABLE_Type __VECTOR_TABLE[] __VECTOR_TABLE_ATTRIBUTE = {
107 (VECTOR_TABLE_Type)(&__INITIAL_SP), /* Initial Stack Pointer */
108 Reset_Handler, /* Reset Handler */
109 NMI_Handler, /* NMI Handler */
110 HardFault_Handler, /* Hard Fault Handler */
111 MemManage_Handler, /* MPU Fault Handler */
112 BusFault_Handler, /* Bus Fault Handler */
113 UsageFault_Handler, /* Usage Fault Handler */
114 SecureFault_Handler, /* Secure Fault Handler */
115 0, /* Reserved */
116 0, /* Reserved */
117 0, /* Reserved */
118 SVC_Handler, /* SVCall Handler */
119 DebugMon_Handler, /* Debug Monitor Handler */
120 0, /* Reserved */
121 PendSV_Handler, /* PendSV Handler */
122 SysTick_Handler, /* SysTick Handler */
123
124 /* External Interrupts */
125 FPU_IRQHandler,
126 CACHE_IRQHandler,
127 0, /* Reserved */
128 SPU_IRQHandler,
129 0, /* Reserved */
130 CLOCK_POWER_IRQHandler,
131 0, /* Reserved */
132 0, /* Reserved */
133 SERIAL0_IRQHandler,
134 SERIAL1_IRQHandler,
135 SPIM4_IRQHandler,
136 SERIAL2_IRQHandler,
137 SERIAL3_IRQHandler,
138 GPIOTE0_IRQHandler,
139 SAADC_IRQHandler,
140 TIMER0_IRQHandler,
141 TIMER1_IRQHandler,
142 TIMER2_IRQHandler,
143 0, /* Reserved */
144 0, /* Reserved */
145 RTC0_IRQHandler,
146 RTC1_IRQHandler,
147 0, /* Reserved */
148 0, /* Reserved */
149 WDT0_IRQHandler,
150 WDT1_IRQHandler,
151 COMP_LPCOMP_IRQHandler,
152 EGU0_IRQHandler,
153 EGU1_IRQHandler,
154 EGU2_IRQHandler,
155 EGU3_IRQHandler,
156 EGU4_IRQHandler,
157 EGU5_IRQHandler,
158 PWM0_IRQHandler,
159 PWM1_IRQHandler,
160 PWM2_IRQHandler,
161 PWM3_IRQHandler,
162 0, /* Reserved */
163 PDM0_IRQHandler,
164 0, /* Reserved */
165 I2S0_IRQHandler,
166 0, /* Reserved */
167 IPC_IRQHandler,
168 QSPI_IRQHandler,
169 0, /* Reserved */
170 NFCT_IRQHandler,
171 0, /* Reserved */
172 GPIOTE1_IRQHandler,
173 0, /* Reserved */
174 0, /* Reserved */
175 0, /* Reserved */
176 QDEC0_IRQHandler,
177 QDEC1_IRQHandler,
178 0, /* Reserved */
179 USBD_IRQHandler,
180 USBREGULATOR_IRQHandler,
181 0, /* Reserved */
182 KMU_IRQHandler,
183 0, /* Reserved */
184 0, /* Reserved */
185 0, /* Reserved */
186 0, /* Reserved */
187 0, /* Reserved */
188 0, /* Reserved */
189 0, /* Reserved */
190 0, /* Reserved */
191 0, /* Reserved */
192 0, /* Reserved */
193 CRYPTOCELL_IRQHandler,
194 };
195
196 #if defined ( __GNUC__ )
197 #pragma GCC diagnostic pop
198 #endif
199