114637Sxiaofeya/* SPDX-License-Identifier: GPL-2.0 */ 214637Sxiaofeya#ifndef __ASMARM_ARCH_SCU_H 314637Sxiaofeya#define __ASMARM_ARCH_SCU_H 414637Sxiaofeya 514637Sxiaofeya#define SCU_PM_NORMAL 0 614637Sxiaofeya#define SCU_PM_DORMANT 2 714637Sxiaofeya#define SCU_PM_POWEROFF 3 814637Sxiaofeya 914637Sxiaofeya#ifndef __ASSEMBLER__ 1014637Sxiaofeya 1114637Sxiaofeya#include <linux/errno.h> 1214637Sxiaofeya#include <asm/cputype.h> 1314637Sxiaofeya 1414637Sxiaofeyastatic inline bool scu_a9_has_base(void) 1514637Sxiaofeya{ 1614637Sxiaofeya return read_cpuid_part() == ARM_CPU_PART_CORTEX_A9; 1714637Sxiaofeya} 1814637Sxiaofeya 1914637Sxiaofeyastatic inline unsigned long scu_a9_get_base(void) 2014637Sxiaofeya{ 2114637Sxiaofeya unsigned long pa; 2214637Sxiaofeya 2314637Sxiaofeya asm("mrc p15, 4, %0, c15, c0, 0" : "=r" (pa)); 2414637Sxiaofeya 2514637Sxiaofeya return pa; 2614637Sxiaofeya} 2714637Sxiaofeya 2814637Sxiaofeya#ifdef CONFIG_HAVE_ARM_SCU 2914637Sxiaofeyaunsigned int scu_get_core_count(void __iomem *); 3014637Sxiaofeyaint scu_power_mode(void __iomem *, unsigned int); 3114637Sxiaofeyaint scu_cpu_power_enable(void __iomem *, unsigned int); 3214637Sxiaofeyaint scu_get_cpu_power_mode(void __iomem *scu_base, unsigned int logical_cpu); 3314637Sxiaofeya#else 3414637Sxiaofeyastatic inline unsigned int scu_get_core_count(void __iomem *scu_base) 3514637Sxiaofeya{ 3614637Sxiaofeya return 0; 3714637Sxiaofeya} 3814637Sxiaofeyastatic inline int scu_power_mode(void __iomem *scu_base, unsigned int mode) 3914637Sxiaofeya{ 4014637Sxiaofeya return -EINVAL; 4114637Sxiaofeya} 4214637Sxiaofeyastatic inline int scu_cpu_power_enable(void __iomem *scu_base, 4314637Sxiaofeya unsigned int mode) 4414637Sxiaofeya{ 4514637Sxiaofeya return -EINVAL; 4614637Sxiaofeya} 4714637Sxiaofeyastatic 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 63