platform: nordic_nrf: Unify code between startup files
Unify common code between nrf startup files.
Change-Id: Ifd3a67ac2276fa8d7ceec29482f8cec02b2cbc54
Signed-off-by: Sebastian Bøe <sebastian.boe@nordicsemi.no>
diff --git a/platform/ext/target/nordic_nrf/common/core/CMakeLists.txt b/platform/ext/target/nordic_nrf/common/core/CMakeLists.txt
index 91d3e9b..9052885 100644
--- a/platform/ext/target/nordic_nrf/common/core/CMakeLists.txt
+++ b/platform/ext/target/nordic_nrf/common/core/CMakeLists.txt
@@ -31,6 +31,11 @@
$<$<C_COMPILER_ID:GNU>:${PLATFORM_DIR}/ext/common/gcc/tfm_common_s.ld>
)
+target_sources(tfm_s
+ PRIVATE
+ startup.c
+)
+
if(NS)
target_add_scatter_file(tfm_ns
$<$<C_COMPILER_ID:GNU>:${PLATFORM_DIR}/ext/common/gcc/tfm_common_ns.ld>
@@ -39,6 +44,10 @@
INTERFACE
CMSIS_5_RTX_V8MMN
)
+ target_sources(tfm_ns
+ PRIVATE
+ $<$<C_COMPILER_ID:GNU>:${CMAKE_CURRENT_SOURCE_DIR}/startup.c>
+ )
endif()
if(BL2)
@@ -162,6 +171,10 @@
${HAL_NORDIC_PATH}/nrfx/drivers/src/nrfx_nvmc.c
nrfx_glue.c
)
+ target_sources(bl2
+ PRIVATE
+ $<$<C_COMPILER_ID:GNU>:${CMAKE_CURRENT_SOURCE_DIR}/startup.c>
+ )
target_include_directories(platform_bl2
PUBLIC
diff --git a/platform/ext/target/nordic_nrf/common/core/startup.c b/platform/ext/target/nordic_nrf/common/core/startup.c
new file mode 100644
index 0000000..e51400d
--- /dev/null
+++ b/platform/ext/target/nordic_nrf/common/core/startup.c
@@ -0,0 +1,55 @@
+/*
+ * Copyright (c) 2023 Nordic Semiconductor ASA
+ *
+ * SPDX-License-Identifier: LicenseRef-Nordic-5-Clause
+ */
+
+#include "cmsis.h"
+
+#ifdef NRF_HW_INIT_RESET_ON_BOOT
+#include "hw_init.h"
+#endif
+
+#include "startup.h"
+
+/*----------------------------------------------------------------------------
+ Reset Handler called on controller reset
+ *----------------------------------------------------------------------------*/
+void Reset_Handler(void)
+{
+#if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U)
+ __disable_irq();
+#ifdef NRF_HW_INIT_RESET_ON_BOOT
+ /* Reset CONTROL register */
+ __set_CONTROL(0);
+
+ /* Allow the MSP and PSP stacks to descend to address 0,
+ * effectively disabling stack overflow protection.
+ */
+ __set_MSPLIM(0);
+ __set_PSPLIM(0);
+
+ /* Disable MPU */
+ ARM_MPU_Disable();
+#endif /* NRF_HW_INIT_RESET_ON_BOOT */
+
+ SCB->VTOR = (uint32_t) &(__VECTOR_TABLE[0]);
+
+#ifdef NRF_HW_INIT_RESET_ON_BOOT
+ /* Initialize core architecture registers and system blocks */
+ hw_init_reset_on_boot();
+#endif /* NRF_HW_INIT_RESET_ON_BOOT */
+#endif
+
+ __set_PSP((uint32_t)(&__INITIAL_SP));
+
+ __set_MSPLIM((uint32_t)(&__STACK_LIMIT));
+ __set_PSPLIM((uint32_t)(&__STACK_LIMIT));
+
+#if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U)
+ __TZ_set_STACKSEAL_S((uint32_t *)(&__STACK_SEAL));
+#endif
+
+ SystemInit(); /* CMSIS System Initialization */
+ __PROGRAM_START(); /* Enter PreMain (C library entry point) */
+}
diff --git a/platform/ext/target/nordic_nrf/common/core/startup.h b/platform/ext/target/nordic_nrf/common/core/startup.h
new file mode 100644
index 0000000..d117847
--- /dev/null
+++ b/platform/ext/target/nordic_nrf/common/core/startup.h
@@ -0,0 +1,36 @@
+/*
+ * Copyright (c) 2023 Nordic Semiconductor ASA
+ *
+ * SPDX-License-Identifier: LicenseRef-Nordic-5-Clause
+ */
+
+/*
+ * This file has declarations needed by startup.c and
+ * startup_<platform>.c.
+ */
+
+#ifndef __STARTUP_H__
+#define __STARTUP_H__
+
+extern uint32_t __INITIAL_SP;
+extern uint32_t __STACK_LIMIT;
+
+#if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U)
+extern uint64_t __STACK_SEAL;
+#endif
+
+typedef void(*VECTOR_TABLE_Type)(void);
+
+void __PROGRAM_START(void) __NO_RETURN;
+
+#define DEFAULT_IRQ_HANDLER(handler_name) \
+void __WEAK handler_name(void) __NO_RETURN; \
+void handler_name(void) { \
+ while(1); \
+}
+
+__NO_RETURN void Reset_Handler(void);
+
+extern const VECTOR_TABLE_Type __VECTOR_TABLE[];
+
+#endif /* __STARTUP_H__ */
diff --git a/platform/ext/target/nordic_nrf/common/nrf5340/gcc/startup_nrf5340.c b/platform/ext/target/nordic_nrf/common/nrf5340/gcc/startup_nrf5340.c
index 6c5d227..34dd99c 100644
--- a/platform/ext/target/nordic_nrf/common/nrf5340/gcc/startup_nrf5340.c
+++ b/platform/ext/target/nordic_nrf/common/nrf5340/gcc/startup_nrf5340.c
@@ -26,35 +26,8 @@
#ifdef NRF_HW_INIT_RESET_ON_BOOT
#include "hw_init.h"
#endif
+#include "startup.h"
-/*----------------------------------------------------------------------------
- External References
- *----------------------------------------------------------------------------*/
-extern uint32_t __INITIAL_SP;
-extern uint32_t __STACK_LIMIT;
-#if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U)
-extern uint64_t __STACK_SEAL;
-#endif
-
-typedef void(*VECTOR_TABLE_Type)(void);
-
-extern void __PROGRAM_START(void) __NO_RETURN;
-
-/*----------------------------------------------------------------------------
- Internal References
- *----------------------------------------------------------------------------*/
-void Reset_Handler (void) __NO_RETURN;
-
-/*----------------------------------------------------------------------------
- Exception / Interrupt Handler
- *----------------------------------------------------------------------------*/
-#define DEFAULT_IRQ_HANDLER(handler_name) \
-void __WEAK handler_name(void) __NO_RETURN; \
-void handler_name(void) { \
- while(1); \
-}
-
-/* Exceptions */
DEFAULT_IRQ_HANDLER(NMI_Handler)
DEFAULT_IRQ_HANDLER(HardFault_Handler)
DEFAULT_IRQ_HANDLER(MemManage_Handler)
@@ -108,17 +81,12 @@
DEFAULT_IRQ_HANDLER(KMU_IRQHandler)
DEFAULT_IRQ_HANDLER(CRYPTOCELL_IRQHandler)
-/*----------------------------------------------------------------------------
- Exception / Interrupt Vector table
- *----------------------------------------------------------------------------*/
-
#if defined ( __GNUC__ )
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wpedantic"
#endif
-extern const VECTOR_TABLE_Type __VECTOR_TABLE[];
- const VECTOR_TABLE_Type __VECTOR_TABLE[] __VECTOR_TABLE_ATTRIBUTE = {
+const VECTOR_TABLE_Type __VECTOR_TABLE[] __VECTOR_TABLE_ATTRIBUTE = {
(VECTOR_TABLE_Type)(&__INITIAL_SP), /* Initial Stack Pointer */
Reset_Handler, /* Reset Handler */
NMI_Handler, /* NMI Handler */
@@ -211,45 +179,3 @@
#if defined ( __GNUC__ )
#pragma GCC diagnostic pop
#endif
-
-/*----------------------------------------------------------------------------
- Reset Handler called on controller reset
- *----------------------------------------------------------------------------*/
-void Reset_Handler(void)
-{
-#if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U)
- __disable_irq();
-#ifdef NRF_HW_INIT_RESET_ON_BOOT
- /* Reset CONTROL register */
- __set_CONTROL(0);
-
- /* Allow the MSP and PSP stacks to descend to address 0,
- * effectively disabling stack overflow protection.
- */
- __set_MSPLIM(0);
- __set_PSPLIM(0);
-
- /* Disable MPU */
- ARM_MPU_Disable();
-#endif /* NRF_HW_INIT_RESET_ON_BOOT */
-
- SCB->VTOR = (uint32_t) &(__VECTOR_TABLE[0]);
-
-#ifdef NRF_HW_INIT_RESET_ON_BOOT
- /* Initialize core architecture registers and system blocks */
- hw_init_reset_on_boot();
-#endif /* NRF_HW_INIT_RESET_ON_BOOT */
-#endif
-
- __set_PSP((uint32_t)(&__INITIAL_SP));
-
- __set_MSPLIM((uint32_t)(&__STACK_LIMIT));
- __set_PSPLIM((uint32_t)(&__STACK_LIMIT));
-
-#if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U)
- __TZ_set_STACKSEAL_S((uint32_t *)(&__STACK_SEAL));
-#endif
-
- SystemInit(); /* CMSIS System Initialization */
- __PROGRAM_START(); /* Enter PreMain (C library entry point) */
-}
diff --git a/platform/ext/target/nordic_nrf/common/nrf91/gcc/startup_nrf91.c b/platform/ext/target/nordic_nrf/common/nrf91/gcc/startup_nrf91.c
index 1f2f33a..32be195 100644
--- a/platform/ext/target/nordic_nrf/common/nrf91/gcc/startup_nrf91.c
+++ b/platform/ext/target/nordic_nrf/common/nrf91/gcc/startup_nrf91.c
@@ -23,35 +23,8 @@
#include "cmsis.h"
#include "hw_init.h"
+#include "startup.h"
-/*----------------------------------------------------------------------------
- External References
- *----------------------------------------------------------------------------*/
-extern uint32_t __INITIAL_SP;
-extern uint32_t __STACK_LIMIT;
-#if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U)
-extern uint64_t __STACK_SEAL;
-#endif
-
-typedef void(*VECTOR_TABLE_Type)(void);
-
-extern void __PROGRAM_START(void) __NO_RETURN;
-
-/*----------------------------------------------------------------------------
- Internal References
- *----------------------------------------------------------------------------*/
-void Reset_Handler (void) __NO_RETURN;
-
-/*----------------------------------------------------------------------------
- Exception / Interrupt Handler
- *----------------------------------------------------------------------------*/
-#define DEFAULT_IRQ_HANDLER(handler_name) \
-void __WEAK handler_name(void) __NO_RETURN; \
-void handler_name(void) { \
- while(1); \
-}
-
-/* Exceptions */
DEFAULT_IRQ_HANDLER(NMI_Handler)
DEFAULT_IRQ_HANDLER(HardFault_Handler)
DEFAULT_IRQ_HANDLER(MemManage_Handler)
@@ -95,17 +68,12 @@
DEFAULT_IRQ_HANDLER(KMU_IRQHandler)
DEFAULT_IRQ_HANDLER(CRYPTOCELL_IRQHandler)
-/*----------------------------------------------------------------------------
- Exception / Interrupt Vector table
- *----------------------------------------------------------------------------*/
-
#if defined ( __GNUC__ )
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wpedantic"
#endif
-extern const VECTOR_TABLE_Type __VECTOR_TABLE[];
- const VECTOR_TABLE_Type __VECTOR_TABLE[] __VECTOR_TABLE_ATTRIBUTE = {
+const VECTOR_TABLE_Type __VECTOR_TABLE[] __VECTOR_TABLE_ATTRIBUTE = {
(VECTOR_TABLE_Type)(&__INITIAL_SP), /* Initial Stack Pointer */
Reset_Handler, /* Reset Handler */
NMI_Handler, /* NMI Handler */
@@ -194,45 +162,3 @@
#if defined ( __GNUC__ )
#pragma GCC diagnostic pop
#endif
-
-/*----------------------------------------------------------------------------
- Reset Handler called on controller reset
- *----------------------------------------------------------------------------*/
-void Reset_Handler(void)
-{
-#if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U)
- __disable_irq();
-#ifdef NRF_HW_INIT_RESET_ON_BOOT
- /* Reset CONTROL register */
- __set_CONTROL(0);
-
- /* Allow the MSP and PSP stacks to descend to address 0,
- * effectively disabling stack overflow protection.
- */
- __set_MSPLIM(0);
- __set_PSPLIM(0);
-
- /* Disable MPU */
- ARM_MPU_Disable();
-#endif /* NRF_HW_INIT_RESET_ON_BOOT */
-
- SCB->VTOR = (uint32_t) &(__VECTOR_TABLE[0]);
-
-#ifdef NRF_HW_INIT_RESET_ON_BOOT
- /* Initialize core architecture registers and system blocks */
- hw_init_reset_on_boot();
-#endif /* NRF_HW_INIT_RESET_ON_BOOT */
-#endif
-
- __set_PSP((uint32_t)(&__INITIAL_SP));
-
- __set_MSPLIM((uint32_t)(&__STACK_LIMIT));
- __set_PSPLIM((uint32_t)(&__STACK_LIMIT));
-
-#if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U)
- __TZ_set_STACKSEAL_S((uint32_t *)(&__STACK_SEAL));
-#endif
-
- SystemInit(); /* CMSIS System Initialization */
- __PROGRAM_START(); /* Enter PreMain (C library entry point) */
-}