diff --git a/bsps/aarch64/xilinx-versal/include/bsp.h b/bsps/aarch64/xilinx-versal/include/bsp.h index 5b01637786..9fc8a2ef58 100644 --- a/bsps/aarch64/xilinx-versal/include/bsp.h +++ b/bsps/aarch64/xilinx-versal/include/bsp.h @@ -44,6 +44,8 @@ #include +#define BSP_RESET_SMC + #ifndef ASM #include @@ -60,8 +62,6 @@ extern "C" { #define BSP_ARM_GIC_DIST_BASE 0xf9000000 #define BSP_ARM_GIC_REDIST_BASE 0xf9080000 -#define BSP_RESET_SMC - /* * DDRMC mapping */ diff --git a/bsps/aarch64/xilinx-zynqmp/include/bsp.h b/bsps/aarch64/xilinx-zynqmp/include/bsp.h index 2da74e5af4..84c8f2dbd8 100644 --- a/bsps/aarch64/xilinx-zynqmp/include/bsp.h +++ b/bsps/aarch64/xilinx-zynqmp/include/bsp.h @@ -41,6 +41,10 @@ #define BSP_FEATURE_IRQ_EXTENSION +#define BSP_RESET_SMC + +#define BSP_CPU_ON_USES_SMC + #ifndef ASM #include @@ -79,9 +83,6 @@ LINKER_SYMBOL(bsp_r1_ram_end) #define BSP_ARM_GIC_CPUIF_BASE 0xf9020000 #define BSP_ARM_GIC_DIST_BASE 0xf9010000 -#define BSP_RESET_SMC -#define BSP_CPU_ON_USES_SMC - #define BSP_FDT_IS_SUPPORTED extern unsigned int zynqmp_dtb_len; extern unsigned char zynqmp_dtb[]; diff --git a/bsps/shared/start/bspreset-arm-psci.c b/bsps/shared/start/bspreset-arm-psci.S similarity index 78% rename from bsps/shared/start/bspreset-arm-psci.c rename to bsps/shared/start/bspreset-arm-psci.S index 1827df6edc..a81d9fbc49 100644 --- a/bsps/shared/start/bspreset-arm-psci.c +++ b/bsps/shared/start/bspreset-arm-psci.S @@ -5,10 +5,12 @@ * * @ingroup RTEMSBSPsShared * - * @brief PSCI-based BSP reset hook. + * @brief This source file contains the PSCI-based bsp_reset() implementation. */ /* + * Copyright (C) 2024 embedded brains GmbH & Co. KG + * * Copyright (C) 2020 On-Line Applications Research Corporation (OAR) * Written by Kinsey Moore * @@ -35,25 +37,19 @@ */ #include -#include -void bsp_reset( rtems_fatal_source source, rtems_fatal_code code ) -{ - uint32_t PSCI_FN_SYSTEM_RESET = 0x84000009; - (void) source; - (void) code; - __asm__ volatile( -#if defined(AARCH64_MULTILIB_ARCH_V8) || defined(AARCH64_MULTILIB_ARCH_V8_ILP32) - "mov x0, %0\n" -#else - "mov r0, %0\n" -#endif +#include + +FUNCTION_ENTRY(bsp_reset) + + /* PSCI_FN_SYSTEM_RESET = 0x84000009 */ + mov x0, 9 + movk x0, 0x8400, lsl 16 + #ifdef BSP_RESET_SMC - "smc #0\n" + smc #0 #else - "hvc #0\n" + hvc #0 #endif - : : "r" (PSCI_FN_SYSTEM_RESET) - ); - RTEMS_UNREACHABLE(); -} + +FUNCTION_END(bsp_reset) diff --git a/spec/build/bsps/aarch64/a53/obj.yml b/spec/build/bsps/aarch64/a53/obj.yml index 9b9c5fc1ed..25fb221d98 100644 --- a/spec/build/bsps/aarch64/a53/obj.yml +++ b/spec/build/bsps/aarch64/a53/obj.yml @@ -27,7 +27,7 @@ source: - bsps/shared/dev/serial/console-termios-init.c - bsps/shared/dev/serial/console-termios.c - bsps/shared/irq/irq-default-handler.c -- bsps/shared/start/bspreset-arm-psci.c +- bsps/shared/start/bspreset-arm-psci.S - bsps/shared/start/gettargethash-default.c - bsps/shared/start/sbrk.c type: build diff --git a/spec/build/bsps/aarch64/a72/obj.yml b/spec/build/bsps/aarch64/a72/obj.yml index ffe4dbf3e3..0a23560668 100644 --- a/spec/build/bsps/aarch64/a72/obj.yml +++ b/spec/build/bsps/aarch64/a72/obj.yml @@ -27,7 +27,7 @@ source: - bsps/shared/dev/serial/console-termios-init.c - bsps/shared/dev/serial/console-termios.c - bsps/shared/irq/irq-default-handler.c -- bsps/shared/start/bspreset-arm-psci.c +- bsps/shared/start/bspreset-arm-psci.S - bsps/shared/start/gettargethash-default.c - bsps/shared/start/sbrk.c type: build diff --git a/spec/build/bsps/aarch64/raspberrypi/bspraspberrypi4.yml b/spec/build/bsps/aarch64/raspberrypi/bspraspberrypi4.yml index 5f0a4d7623..3783e37b83 100644 --- a/spec/build/bsps/aarch64/raspberrypi/bspraspberrypi4.yml +++ b/spec/build/bsps/aarch64/raspberrypi/bspraspberrypi4.yml @@ -79,7 +79,7 @@ source: - bsps/shared/dev/getentropy/getentropy-cpucounter.c - bsps/shared/dev/btimer/btimer-cpucounter.c - bsps/shared/irq/irq-default-handler.c -- bsps/shared/start/bspreset-arm-psci.c +- bsps/shared/start/bspreset-arm-psci.S - bsps/shared/start/gettargethash-default.c - bsps/shared/start/sbrk.c - bsps/shared/start/wkspaceinitone.c diff --git a/spec/build/bsps/aarch64/xilinx-versal/obj.yml b/spec/build/bsps/aarch64/xilinx-versal/obj.yml index 9f90c650fb..dd137c3918 100644 --- a/spec/build/bsps/aarch64/xilinx-versal/obj.yml +++ b/spec/build/bsps/aarch64/xilinx-versal/obj.yml @@ -33,7 +33,7 @@ source: - bsps/shared/dev/serial/console-termios-init.c - bsps/shared/dev/serial/console-termios.c - bsps/shared/irq/irq-default-handler.c -- bsps/shared/start/bspreset-arm-psci.c +- bsps/shared/start/bspreset-arm-psci.S - bsps/shared/start/gettargethash-default.c - bsps/shared/start/sbrk.c type: build diff --git a/spec/build/bsps/aarch64/xilinx-zynqmp/obj.yml b/spec/build/bsps/aarch64/xilinx-zynqmp/obj.yml index b5f7885f08..57881aa62a 100644 --- a/spec/build/bsps/aarch64/xilinx-zynqmp/obj.yml +++ b/spec/build/bsps/aarch64/xilinx-zynqmp/obj.yml @@ -35,7 +35,7 @@ source: - bsps/shared/dev/serial/console-termios-init.c - bsps/shared/dev/serial/console-termios.c - bsps/shared/irq/irq-default-handler.c -- bsps/shared/start/bspreset-arm-psci.c +- bsps/shared/start/bspreset-arm-psci.S - bsps/shared/start/gettargethash-default.c - bsps/shared/start/sbrk.c type: build