From: Mark Brown Date: Fri, 23 Jan 2015 20:36:05 +0000 (+0000) Subject: Merge remote-tracking branch 'lsk/v3.10/topic/arm64-misc' into linux-linaro-lsk X-Git-Tag: firefly_0821_release~3680^2~30^2 X-Git-Url: http://demsky.eecs.uci.edu/git/?a=commitdiff_plain;h=15f82fce54b86e159fe5a1d41dcdc89e12b26459;p=firefly-linux-kernel-4.4.55.git Merge remote-tracking branch 'lsk/v3.10/topic/arm64-misc' into linux-linaro-lsk Conflicts: arch/arm64/include/asm/proc-fns.h arch/arm64/kernel/debug-monitors.c arch/arm64/kernel/psci.c --- 15f82fce54b86e159fe5a1d41dcdc89e12b26459 diff --cc arch/arm64/Kconfig index d64c1a0e9dd0,d185ea209ef1..2cf752060a41 --- a/arch/arm64/Kconfig +++ b/arch/arm64/Kconfig @@@ -16,11 -12,9 +16,12 @@@ config ARM6 select BUILDTIME_EXTABLE_SORT select CLONE_BACKWARDS select COMMON_CLK + select CPU_PM if (SUSPEND || CPU_IDLE) select DCACHE_WORD_ACCESS + select GENERIC_ALLOCATOR select GENERIC_CLOCKEVENTS + select GENERIC_CLOCKEVENTS_BROADCAST if SMP + select GENERIC_CPU_AUTOPROBE select GENERIC_EARLY_IOREMAP select GENERIC_IOMAP select GENERIC_IRQ_PROBE diff --cc arch/arm64/include/asm/proc-fns.h index 0c657bb54597,a496aa6ff7ef..0d3b0b17e927 --- a/arch/arm64/include/asm/proc-fns.h +++ b/arch/arm64/include/asm/proc-fns.h @@@ -32,8 -31,8 +32,10 @@@ extern void cpu_cache_off(void) extern void cpu_do_idle(void); extern void cpu_do_switch_mm(unsigned long pgd_phys, struct mm_struct *mm); extern void cpu_reset(unsigned long addr) __attribute__((noreturn)); +extern void cpu_do_suspend(struct cpu_suspend_ctx *ptr); +extern u64 cpu_do_resume(phys_addr_t ptr, u64 idmap_ttbr); + void cpu_soft_restart(phys_addr_t cpu_reset, + unsigned long addr) __attribute__((noreturn)); #include diff --cc arch/arm64/kernel/psci.c index e58a67974f98,553954771a67..4d827dd62199 --- a/arch/arm64/kernel/psci.c +++ b/arch/arm64/kernel/psci.c @@@ -450,21 -434,11 +450,23 @@@ static int cpu_psci_cpu_kill(unsigned i return 0; } #endif + #endif +#ifdef CONFIG_ARM64_CPU_SUSPEND +static int cpu_psci_cpu_suspend(unsigned long index) +{ + struct psci_power_state *state = __get_cpu_var(psci_power_state); + + if (!state) + return -EOPNOTSUPP; + + return psci_ops.cpu_suspend(state[index], virt_to_phys(cpu_resume)); +} +#endif + const struct cpu_operations cpu_psci_ops = { .name = "psci", + #ifdef CONFIG_SMP .cpu_init = cpu_psci_cpu_init, .cpu_prepare = cpu_psci_cpu_prepare, .cpu_boot = cpu_psci_cpu_boot, @@@ -473,9 -447,6 +475,9 @@@ .cpu_die = cpu_psci_cpu_die, .cpu_kill = cpu_psci_cpu_kill, #endif + #endif +#ifdef CONFIG_ARM64_CPU_SUSPEND + .cpu_suspend = cpu_psci_cpu_suspend, +#endif }; - #endif