af3cfdbf56
ARM64_CPU_SUSPEND config option was introduced to make code providing context save/restore selectable only on platforms requiring power management capabilities. Currently ARM64_CPU_SUSPEND depends on the PM_SLEEP config option which in turn is set by the SUSPEND config option. The introduction of CPU_IDLE for arm64 requires that code configured by ARM64_CPU_SUSPEND (context save/restore) should be compiled in in order to enable the CPU idle driver to rely on CPU operations carrying out context save/restore. The ARM64_CPUIDLE config option (ARM64 generic idle driver) is therefore forced to select ARM64_CPU_SUSPEND, even if there may be (ie PM_SLEEP) failed dependencies, which is not a clean way of handling the kernel configuration option. For these reasons, this patch removes the ARM64_CPU_SUSPEND config option and makes the context save/restore dependent on CPU_PM, which is selected whenever either SUSPEND or CPU_IDLE are configured, cleaning up dependencies in the process. This way, code previously configured through ARM64_CPU_SUSPEND is compiled in whenever a power management subsystem requires it to be present in the kernel (SUSPEND || CPU_IDLE), which is the behaviour expected on ARM64 kernels. The cpu_suspend and cpu_init_idle CPU operations are added only if CPU_IDLE is selected, since they are CPU_IDLE specific methods and should be grouped and defined accordingly. PSCI CPU operations are updated to reflect the introduced changes. Signed-off-by: Lorenzo Pieralisi <lorenzo.pieralisi@arm.com> Cc: Arnd Bergmann <arnd@arndb.de> Cc: Will Deacon <will.deacon@arm.com> Cc: Krzysztof Kozlowski <k.kozlowski@samsung.com> Cc: Daniel Lezcano <daniel.lezcano@linaro.org> Cc: Mark Rutland <mark.rutland@arm.com> Signed-off-by: Catalin Marinas <catalin.marinas@arm.com>
26 lines
576 B
C
26 lines
576 B
C
#ifndef __ASM_SUSPEND_H
|
|
#define __ASM_SUSPEND_H
|
|
|
|
#define NR_CTX_REGS 11
|
|
|
|
/*
|
|
* struct cpu_suspend_ctx must be 16-byte aligned since it is allocated on
|
|
* the stack, which must be 16-byte aligned on v8
|
|
*/
|
|
struct cpu_suspend_ctx {
|
|
/*
|
|
* This struct must be kept in sync with
|
|
* cpu_do_{suspend/resume} in mm/proc.S
|
|
*/
|
|
u64 ctx_regs[NR_CTX_REGS];
|
|
u64 sp;
|
|
} __aligned(16);
|
|
|
|
struct sleep_save_sp {
|
|
phys_addr_t *save_ptr_stash;
|
|
phys_addr_t save_ptr_stash_phys;
|
|
};
|
|
|
|
extern int __cpu_suspend(unsigned long arg, int (*fn)(unsigned long));
|
|
extern void cpu_resume(void);
|
|
#endif
|