smp_scu.h (1352B)
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 14static inline bool scu_a9_has_base(void) 15{ 16 return read_cpuid_part() == ARM_CPU_PART_CORTEX_A9; 17} 18 19static 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 29unsigned int scu_get_core_count(void __iomem *); 30int scu_power_mode(void __iomem *, unsigned int); 31int scu_cpu_power_enable(void __iomem *, unsigned int); 32int scu_get_cpu_power_mode(void __iomem *scu_base, unsigned int logical_cpu); 33#else 34static inline unsigned int scu_get_core_count(void __iomem *scu_base) 35{ 36 return 0; 37} 38static inline int scu_power_mode(void __iomem *scu_base, unsigned int mode) 39{ 40 return -EINVAL; 41} 42static inline int scu_cpu_power_enable(void __iomem *scu_base, 43 unsigned int mode) 44{ 45 return -EINVAL; 46} 47static 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) 55void scu_enable(void __iomem *scu_base); 56#else 57static inline void scu_enable(void __iomem *scu_base) {} 58#endif 59 60#endif 61 62#endif