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) */
-}