diff --git a/arch/arm/include/syscall.h b/arch/arm/include/syscall.h index ca5fd9dbf48..3b424bbb08a 100644 --- a/arch/arm/include/syscall.h +++ b/arch/arm/include/syscall.h @@ -126,31 +126,6 @@ * Public Types ****************************************************************************/ -/* Result from SMC/HVC call - * a0-a7 result values from registers 0 to 7 - */ - -struct arm_smccc_res -{ - unsigned long a0; - unsigned long a1; - unsigned long a2; - unsigned long a3; - unsigned long a4; - unsigned long a5; - unsigned long a6; - unsigned long a7; -}; - -typedef struct arm_smccc_res arm_smccc_res_t; - -enum arm_smccc_conduit -{ - SMCCC_CONDUIT_NONE, - SMCCC_CONDUIT_SMC, - SMCCC_CONDUIT_HVC, -}; - /**************************************************************************** * Inline functions ****************************************************************************/ @@ -341,32 +316,6 @@ static inline long smh_call(unsigned int nbr, void *parm) * Public Function Prototypes ****************************************************************************/ -/* Make HVC calls - * - * param a0 function identifier - * param a1-a7 parameters registers - * param res results - */ - -void arm_smccc_hvc(unsigned long a0, unsigned long a1, - unsigned long a2, unsigned long a3, - unsigned long a4, unsigned long a5, - unsigned long a6, unsigned long a7, - struct arm_smccc_res *res); - -/* Make SMC calls - * - * param a0 function identifier - * param a1-a7 parameters registers - * param res results - */ - -void arm_smccc_smc(unsigned long a0, unsigned long a1, - unsigned long a2, unsigned long a3, - unsigned long a4, unsigned long a5, - unsigned long a6, unsigned long a7, - struct arm_smccc_res *res); - #ifdef __cplusplus #define EXTERN extern "C" extern "C" diff --git a/arch/arm/src/armv7-a/CMakeLists.txt b/arch/arm/src/armv7-a/CMakeLists.txt index 700381a1c34..543cc6e2356 100644 --- a/arch/arm/src/armv7-a/CMakeLists.txt +++ b/arch/arm/src/armv7-a/CMakeLists.txt @@ -110,4 +110,8 @@ if(CONFIG_SMP) arm_scu.c) endif() +if(CONFIG_ARCH_HAVE_PSCI) + list(APPEND SRCS arm_cpu_psci.c arm_smccc.S) +endif() + target_sources(arch PRIVATE ${SRCS}) diff --git a/arch/arm/src/armv7-a/Make.defs b/arch/arm/src/armv7-a/Make.defs index ddb629b6931..6ea56bba388 100644 --- a/arch/arm/src/armv7-a/Make.defs +++ b/arch/arm/src/armv7-a/Make.defs @@ -94,3 +94,7 @@ ifeq ($(CONFIG_SMP),y) CMN_CSRCS += arm_scu.c endif +ifeq ($(CONFIG_ARCH_HAVE_PSCI),y) + CMN_ASRCS += arm_smccc.S + CMN_CSRCS += arm_cpu_psci.c +endif diff --git a/arch/arm/src/common/arm_cpu_psci.c b/arch/arm/src/armv7-a/arm_cpu_psci.c similarity index 99% rename from arch/arm/src/common/arm_cpu_psci.c rename to arch/arm/src/armv7-a/arm_cpu_psci.c index 8e7dd201e81..37ee4d543cd 100644 --- a/arch/arm/src/common/arm_cpu_psci.c +++ b/arch/arm/src/armv7-a/arm_cpu_psci.c @@ -1,5 +1,5 @@ /*************************************************************************** - * arch/arm/src/common/arm_cpu_psci.c + * arch/arm/src/armv7-a/arm_cpu_psci.c * * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with diff --git a/arch/arm/src/common/arm_cpu_psci.h b/arch/arm/src/armv7-a/arm_cpu_psci.h similarity index 76% rename from arch/arm/src/common/arm_cpu_psci.h rename to arch/arm/src/armv7-a/arm_cpu_psci.h index 26559a599fa..a63299bb3e4 100644 --- a/arch/arm/src/common/arm_cpu_psci.h +++ b/arch/arm/src/armv7-a/arm_cpu_psci.h @@ -1,5 +1,5 @@ /**************************************************************************** - * arch/arm/src/common/arm_cpu_psci.h + * arch/arm/src/armv7-a/arm_cpu_psci.h * * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with @@ -18,8 +18,8 @@ * ****************************************************************************/ -#ifndef __ARCH_ARM_SRC_COMMON_ARM_CPU_PSCI_H -#define __ARCH_ARM_SRC_COMMON_ARM_CPU_PSCI_H +#ifndef __ARCH_ARM_SRC_ARMV7_A_ARM_CPU_PSCI_H +#define __ARCH_ARM_SRC_ARMV7_A_ARM_CPU_PSCI_H /**************************************************************************** * Included Files @@ -83,6 +83,31 @@ #define PSCI_VERSION_MINOR(ver) \ ((ver) & PSCI_VERSION_MINOR_MASK) +/* Result from SMC/HVC call + * a0-a7 result values from registers 0 to 7 + */ + +struct arm_smccc_res +{ + unsigned long a0; + unsigned long a1; + unsigned long a2; + unsigned long a3; + unsigned long a4; + unsigned long a5; + unsigned long a6; + unsigned long a7; +}; + +typedef struct arm_smccc_res arm_smccc_res_t; + +enum arm_smccc_conduit +{ + SMCCC_CONDUIT_NONE, + SMCCC_CONDUIT_SMC, + SMCCC_CONDUIT_HVC, +}; + typedef unsigned long (*psci_fn)(unsigned long, unsigned long, unsigned long, unsigned long); @@ -97,6 +122,32 @@ struct psci_interface * Public Function Prototypes ****************************************************************************/ +/* Make HVC calls + * + * param a0 function identifier + * param a1-a7 parameters registers + * param res results + */ + +void arm_smccc_hvc(unsigned long a0, unsigned long a1, + unsigned long a2, unsigned long a3, + unsigned long a4, unsigned long a5, + unsigned long a6, unsigned long a7, + struct arm_smccc_res *res); + +/* Make SMC calls + * + * param a0 function identifier + * param a1-a7 parameters registers + * param res results + */ + +void arm_smccc_smc(unsigned long a0, unsigned long a1, + unsigned long a2, unsigned long a3, + unsigned long a4, unsigned long a5, + unsigned long a6, unsigned long a7, + struct arm_smccc_res *res); + uint32_t psci_version(void); int psci_cpu_off(void); int psci_cpu_reset(void); @@ -104,4 +155,4 @@ int psci_cpu_on(unsigned long cpuid, uintptr_t entry_point); int psci_sys_poweroff(void); int psci_sys_reset(void); -#endif /* __ARCH_ARM_SRC_COMMON_ARM_CPU_PSCI_H */ +#endif /* __ARCH_ARM_SRC_ARMV7_A_ARM_CPU_PSCI_H */ diff --git a/arch/arm/src/common/arm_smccc.S b/arch/arm/src/armv7-a/arm_smccc.S similarity index 98% rename from arch/arm/src/common/arm_smccc.S rename to arch/arm/src/armv7-a/arm_smccc.S index d9874b0e953..51befee0458 100644 --- a/arch/arm/src/common/arm_smccc.S +++ b/arch/arm/src/armv7-a/arm_smccc.S @@ -1,5 +1,5 @@ /**************************************************************************** - * arch/arm/src/common/arm_smccc.S + * arch/arm/src/armv7-a/arm_smccc.S * * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with diff --git a/arch/arm/src/common/CMakeLists.txt b/arch/arm/src/common/CMakeLists.txt index c1dcef481db..ac630ec46b9 100644 --- a/arch/arm/src/common/CMakeLists.txt +++ b/arch/arm/src/common/CMakeLists.txt @@ -55,11 +55,6 @@ if(NOT CONFIG_ARCH_IDLE_CUSTOM) list(APPEND SRCS arm_idle.c) endif() -if(CONFIG_ARCH_HAVE_PSCI) - list(APPEND SRCS arm_smccc.S) - list(APPEND SRCS arm_cpu_psci.c) -endif() - if(CONFIG_BUILD_PROTECTED OR CONFIG_BUILD_KERNEL) list(APPEND SRCS arm_task_start.c arm_pthread_start.c arm_signal_dispatch.c) diff --git a/arch/arm/src/common/Make.defs b/arch/arm/src/common/Make.defs index 850411428c5..7a8073db1c5 100644 --- a/arch/arm/src/common/Make.defs +++ b/arch/arm/src/common/Make.defs @@ -41,11 +41,6 @@ ifneq ($(CONFIG_ARCH_IDLE_CUSTOM),y) CMN_CSRCS += arm_idle.c endif -ifeq ($(CONFIG_ARCH_HAVE_PSCI),y) - CMN_ASRCS += arm_smccc.S - CMN_CSRCS += arm_cpu_psci.c -endif - ifeq ($(CONFIG_BUILD_PROTECTED)$(CONFIG_BUILD_KERNEL),y) CMN_CSRCS += arm_task_start.c arm_pthread_start.c CMN_CSRCS += arm_signal_dispatch.c