Greg Kroah-Hartman | b244131 | 2017-11-01 15:07:57 +0100 | [diff] [blame^] | 1 | /* SPDX-License-Identifier: GPL-2.0 */ |
Catalin Marinas | 4b17244 | 2007-02-14 19:20:28 +0100 | [diff] [blame] | 2 | #ifndef __ASMARM_ARCH_SCU_H |
| 3 | #define __ASMARM_ARCH_SCU_H |
| 4 | |
Russell King | 292ec42 | 2011-02-04 10:36:39 +0000 | [diff] [blame] | 5 | #define SCU_PM_NORMAL 0 |
| 6 | #define SCU_PM_DORMANT 2 |
| 7 | #define SCU_PM_POWEROFF 3 |
| 8 | |
| 9 | #ifndef __ASSEMBLER__ |
Hiroshi Doyu | e9d6b335 | 2013-01-22 07:52:01 +0200 | [diff] [blame] | 10 | |
Johan Hovold | fed3c15 | 2017-07-17 09:28:19 +0100 | [diff] [blame] | 11 | #include <linux/errno.h> |
Hiroshi Doyu | e9d6b335 | 2013-01-22 07:52:01 +0200 | [diff] [blame] | 12 | #include <asm/cputype.h> |
| 13 | |
| 14 | static inline bool scu_a9_has_base(void) |
| 15 | { |
Russell King | af040ff | 2014-06-24 19:43:15 +0100 | [diff] [blame] | 16 | return read_cpuid_part() == ARM_CPU_PART_CORTEX_A9; |
Hiroshi Doyu | e9d6b335 | 2013-01-22 07:52:01 +0200 | [diff] [blame] | 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 | |
Nishanth Menon | 2abc75a | 2013-06-26 09:39:47 -0500 | [diff] [blame] | 28 | #ifdef CONFIG_HAVE_ARM_SCU |
Russell King | a8cbcd9 | 2009-05-16 11:51:14 +0100 | [diff] [blame] | 29 | unsigned int scu_get_core_count(void __iomem *); |
Russell King | 292ec42 | 2011-02-04 10:36:39 +0000 | [diff] [blame] | 30 | int scu_power_mode(void __iomem *, unsigned int); |
Nishanth Menon | 2abc75a | 2013-06-26 09:39:47 -0500 | [diff] [blame] | 31 | #else |
| 32 | static inline unsigned int scu_get_core_count(void __iomem *scu_base) |
| 33 | { |
| 34 | return 0; |
| 35 | } |
| 36 | static inline int scu_power_mode(void __iomem *scu_base, unsigned int mode) |
| 37 | { |
| 38 | return -EINVAL; |
| 39 | } |
| 40 | #endif |
Rob Herring | eed8812 | 2013-01-31 09:26:06 -0600 | [diff] [blame] | 41 | |
Nishanth Menon | 2abc75a | 2013-06-26 09:39:47 -0500 | [diff] [blame] | 42 | #if defined(CONFIG_SMP) && defined(CONFIG_HAVE_ARM_SCU) |
Rob Herring | eed8812 | 2013-01-31 09:26:06 -0600 | [diff] [blame] | 43 | void scu_enable(void __iomem *scu_base); |
| 44 | #else |
| 45 | static inline void scu_enable(void __iomem *scu_base) {} |
| 46 | #endif |
| 47 | |
Russell King | 292ec42 | 2011-02-04 10:36:39 +0000 | [diff] [blame] | 48 | #endif |
Catalin Marinas | 4b17244 | 2007-02-14 19:20:28 +0100 | [diff] [blame] | 49 | |
| 50 | #endif |