mirror of https://gitee.com/openkylin/linux.git
ARM: pm: add function to set WFI low-power mode for SMP CPUs
Add a function to set the SCU low-power mode for SMP CPUs. This centralizes this functionality rather than having to expose the SCU register definitions to each platform. Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
This commit is contained in:
parent
afe8a88755
commit
292ec42af7
|
@ -1,7 +1,14 @@
|
||||||
#ifndef __ASMARM_ARCH_SCU_H
|
#ifndef __ASMARM_ARCH_SCU_H
|
||||||
#define __ASMARM_ARCH_SCU_H
|
#define __ASMARM_ARCH_SCU_H
|
||||||
|
|
||||||
|
#define SCU_PM_NORMAL 0
|
||||||
|
#define SCU_PM_DORMANT 2
|
||||||
|
#define SCU_PM_POWEROFF 3
|
||||||
|
|
||||||
|
#ifndef __ASSEMBLER__
|
||||||
unsigned int scu_get_core_count(void __iomem *);
|
unsigned int scu_get_core_count(void __iomem *);
|
||||||
void scu_enable(void __iomem *);
|
void scu_enable(void __iomem *);
|
||||||
|
int scu_power_mode(void __iomem *, unsigned int);
|
||||||
|
#endif
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -50,3 +50,26 @@ void __init scu_enable(void __iomem *scu_base)
|
||||||
*/
|
*/
|
||||||
flush_cache_all();
|
flush_cache_all();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Set the executing CPUs power mode as defined. This will be in
|
||||||
|
* preparation for it executing a WFI instruction.
|
||||||
|
*
|
||||||
|
* This function must be called with preemption disabled, and as it
|
||||||
|
* has the side effect of disabling coherency, caches must have been
|
||||||
|
* flushed. Interrupts must also have been disabled.
|
||||||
|
*/
|
||||||
|
int scu_power_mode(void __iomem *scu_base, unsigned int mode)
|
||||||
|
{
|
||||||
|
unsigned int val;
|
||||||
|
int cpu = smp_processor_id();
|
||||||
|
|
||||||
|
if (mode > 3 || mode == 1 || cpu > 3)
|
||||||
|
return -EINVAL;
|
||||||
|
|
||||||
|
val = __raw_readb(scu_base + SCU_CPU_STATUS + cpu) & ~0x03;
|
||||||
|
val |= mode;
|
||||||
|
__raw_writeb(val, scu_base + SCU_CPU_STATUS + cpu);
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in New Issue