diff options
| -rw-r--r-- | arch/arm/mach-mvebu/Makefile | 2 | ||||
| -rw-r--r-- | arch/arm/mach-mvebu/pmsu.c | 9 | ||||
| -rw-r--r-- | arch/arm/mach-mvebu/pmsu_ll.S | 25 | 
3 files changed, 28 insertions, 8 deletions
| diff --git a/arch/arm/mach-mvebu/Makefile b/arch/arm/mach-mvebu/Makefile index 2ecb828e4a8b..1636cdbef01a 100644 --- a/arch/arm/mach-mvebu/Makefile +++ b/arch/arm/mach-mvebu/Makefile @@ -7,7 +7,7 @@ CFLAGS_pmsu.o			:= -march=armv7-a  obj-y				 += system-controller.o mvebu-soc-id.o  ifeq ($(CONFIG_MACH_MVEBU_V7),y) -obj-y				 += cpu-reset.o board-v7.o coherency.o coherency_ll.o pmsu.o +obj-y				 += cpu-reset.o board-v7.o coherency.o coherency_ll.o pmsu.o pmsu_ll.o  obj-$(CONFIG_SMP)		 += platsmp.o headsmp.o platsmp-a9.o headsmp-a9.o  obj-$(CONFIG_HOTPLUG_CPU)	 += hotplug.o  endif diff --git a/arch/arm/mach-mvebu/pmsu.c b/arch/arm/mach-mvebu/pmsu.c index 53a55c8520bf..a1d407c0febe 100644 --- a/arch/arm/mach-mvebu/pmsu.c +++ b/arch/arm/mach-mvebu/pmsu.c @@ -66,6 +66,8 @@ static void __iomem *pmsu_mp_base;  extern void ll_disable_coherency(void);  extern void ll_enable_coherency(void); +extern void armada_370_xp_cpu_resume(void); +  static struct platform_device armada_xp_cpuidle_device = {  	.name = "cpuidle-armada-370-xp",  }; @@ -140,13 +142,6 @@ static void armada_370_xp_pmsu_enable_l2_powerdown_onidle(void)  	writel(reg, pmsu_mp_base + L2C_NFABRIC_PM_CTL);  } -static void armada_370_xp_cpu_resume(void) -{ -	asm volatile("bl    ll_add_cpu_to_smp_group\n\t" -		     "bl    ll_enable_coherency\n\t" -		     "b	    cpu_resume\n\t"); -} -  /* No locking is needed because we only access per-CPU registers */  void armada_370_xp_pmsu_idle_prepare(bool deepidle)  { diff --git a/arch/arm/mach-mvebu/pmsu_ll.S b/arch/arm/mach-mvebu/pmsu_ll.S new file mode 100644 index 000000000000..fc3de68d8c54 --- /dev/null +++ b/arch/arm/mach-mvebu/pmsu_ll.S @@ -0,0 +1,25 @@ +/* + * Copyright (C) 2014 Marvell + * + * Thomas Petazzoni <thomas.petazzoni@free-electrons.com> + * Gregory Clement <gregory.clement@free-electrons.com> + * + * This file is licensed under the terms of the GNU General Public + * License version 2.  This program is licensed "as is" without any + * warranty of any kind, whether express or implied. + */ + +#include <linux/linkage.h> +#include <asm/assembler.h> + +/* + * This is the entry point through which CPUs exiting cpuidle deep + * idle state are going. + */ +ENTRY(armada_370_xp_cpu_resume) +ARM_BE8(setend	be )			@ go BE8 if entered LE +	bl	ll_add_cpu_to_smp_group +	bl	ll_enable_coherency +	b	cpu_resume +ENDPROC(armada_370_xp_cpu_resume) + | 
