1529d1ae2f8db94d97940db803d992872bffeaec
[platform/kernel/linux-rpi.git] / arch / arm / include / asm / smp_scu.h
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 int scu_cpu_power_enable(void __iomem *, unsigned int);
31 int scu_get_cpu_power_mode(void __iomem *scu_base, unsigned int logical_cpu);
32 #else
33 static inline unsigned int scu_get_core_count(void __iomem *scu_base)
34 {
35         return 0;
36 }
37 static inline int scu_power_mode(void __iomem *scu_base, unsigned int mode)
38 {
39         return -EINVAL;
40 }
41 static inline int scu_cpu_power_enable(void __iomem *scu_base,
42                                        unsigned int mode)
43 {
44         return -EINVAL;
45 }
46 static inline int scu_get_cpu_power_mode(void __iomem *scu_base,
47                                          unsigned int logical_cpu)
48 {
49         return -EINVAL;
50 }
51 #endif
52
53 #if defined(CONFIG_SMP) && defined(CONFIG_HAVE_ARM_SCU)
54 void scu_enable(void __iomem *scu_base);
55 #else
56 static inline void scu_enable(void __iomem *scu_base) {}
57 #endif
58
59 #endif
60
61 #endif