Branch data Line data Source code
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 : 0 : 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