1 /* SPDX-License-Identifier: GPL-2.0 */ 2 #ifndef __ASMARM_ARCH_SCU_H 3 #define __ASMARM_ARCH_SCU_H 4 5 #define SCU_PM_NORMAL 0 6 #define SCU_PM_DORMANT 2 7 #define SCU_PM_POWEROFF 3 8 9 #ifndef __ASSEMBLER__ 10 11 #include <linux/errno.h> 12 #include <asm/cputype.h> 13 14 static inline bool scu_a9_has_base(void) 15 { 16 return read_cpuid_part() == ARM_CPU_PART_CORTEX_A9; 17 } 18 19 static inline unsigned long scu_a9_get_base(void) 20 { 21 unsigned long pa; 22 23 asm("mrc p15, 4, %0, c15, c0, 0" : "=r" (pa)); 24 25 return pa; 26 } 27 28 #ifdef CONFIG_HAVE_ARM_SCU 29 unsigned int scu_get_core_count(void __iomem *); 30 int scu_power_mode(void __iomem *, unsigned int); 31 int scu_cpu_power_enable(void __iomem *, unsigned int); 32 int scu_get_cpu_power_mode(void __iomem *scu_base, unsigned int logical_cpu); 33 #else 34 static inline unsigned int scu_get_core_count(void __iomem *scu_base) 35 { 36 return 0; 37 } 38 static inline int scu_power_mode(void __iomem *scu_base, unsigned int mode) 39 { 40 return -EINVAL; 41 } 42 static inline int scu_cpu_power_enable(void __iomem *scu_base, 43 unsigned int mode) 44 { 45 return -EINVAL; 46 } 47 static inline int scu_get_cpu_power_mode(void __iomem *scu_base, 48 unsigned int logical_cpu) 49 { 50 return -EINVAL; 51 } 52 #endif 53 54 #if defined(CONFIG_SMP) && defined(CONFIG_HAVE_ARM_SCU) 55 void scu_enable(void __iomem *scu_base); 56 #else 57 static inline void scu_enable(void __iomem *scu_base) {} 58 #endif 59 60 #endif 61 62 #endif 63