xref: /openbmc/linux/arch/arm/include/asm/smp_scu.h (revision 84fbfc33)
1 #ifndef __ASMARM_ARCH_SCU_H
2 #define __ASMARM_ARCH_SCU_H
3 
4 #define SCU_PM_NORMAL	0
5 #define SCU_PM_DORMANT	2
6 #define SCU_PM_POWEROFF	3
7 
8 #ifndef __ASSEMBLER__
9 
10 #include <linux/errno.h>
11 #include <asm/cputype.h>
12 
13 static inline bool scu_a9_has_base(void)
14 {
15 	return read_cpuid_part() == ARM_CPU_PART_CORTEX_A9;
16 }
17 
18 static inline unsigned long scu_a9_get_base(void)
19 {
20 	unsigned long pa;
21 
22 	asm("mrc p15, 4, %0, c15, c0, 0" : "=r" (pa));
23 
24 	return pa;
25 }
26 
27 #ifdef CONFIG_HAVE_ARM_SCU
28 unsigned int scu_get_core_count(void __iomem *);
29 int scu_power_mode(void __iomem *, unsigned int);
30 #else
31 static inline unsigned int scu_get_core_count(void __iomem *scu_base)
32 {
33 	return 0;
34 }
35 static inline int scu_power_mode(void __iomem *scu_base, unsigned int mode)
36 {
37 	return -EINVAL;
38 }
39 #endif
40 
41 #if defined(CONFIG_SMP) && defined(CONFIG_HAVE_ARM_SCU)
42 void scu_enable(void __iomem *scu_base);
43 #else
44 static inline void scu_enable(void __iomem *scu_base) {}
45 #endif
46 
47 #endif
48 
49 #endif
50