cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

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