diff mbox

[1/4] ARM: imx6: move v7_cpu_resume() into suspend-imx6.S

Message ID 1393422280-22283-1-git-send-email-shawn.guo@linaro.org
State Accepted
Commit c356bdb407baf23b202a6b4d2234114db6ae55bd
Headers show

Commit Message

Shawn Guo Feb. 26, 2014, 1:44 p.m. UTC
The suspend-imx6.S is introduced recently for suspend low-level assembly
code.  Since function v7_cpu_resume() is only used by suspend support,
it makes sense to move the function into suspend-imx6.S, and control the
build of the file with CONFIG_SUSPEND option.

Signed-off-by: Shawn Guo <shawn.guo@linaro.org>
---
 arch/arm/mach-imx/Makefile       |    5 +++--
 arch/arm/mach-imx/common.h       |    8 +++++++-
 arch/arm/mach-imx/headsmp.S      |   36 ------------------------------------
 arch/arm/mach-imx/suspend-imx6.S |   33 +++++++++++++++++++++++++++++++++
 4 files changed, 43 insertions(+), 39 deletions(-)

Comments

Shawn Guo Feb. 27, 2014, 1:12 p.m. UTC | #1
On Thu, Feb 27, 2014 at 01:59:27PM +0100, Arnd Bergmann wrote:
> On Wednesday 26 February 2014, Shawn Guo wrote:
> > 
> >  AFLAGS_suspend-imx6.o :=-Wa,-march=armv7-a
> > -obj-$(CONFIG_SOC_IMX6Q) += pm-imx6q.o headsmp.o suspend-imx6.o
> > +obj-$(CONFIG_SUSPEND) += suspend-imx6.o
> > +obj-$(CONFIG_SOC_IMX6Q) += pm-imx6q.o headsmp.o
> >  # i.MX6SL reuses i.MX6Q code
> > -obj-$(CONFIG_SOC_IMX6SL) += pm-imx6q.o headsmp.o suspend-imx6.o
> > +obj-$(CONFIG_SOC_IMX6SL) += pm-imx6q.o headsmp.o
> >  
> 
> I noticed a small bug during randconfig testing (starting to like
> my tests more recently):

Sorry for that.

> 
> You build suspend-imx6.o for all SoCs now when SUSPEND is enabled,
> so this will fail for an ARMv5-only configuration. You probably
> need something like

I received a report from 0-DAY kbuild test robot on this, and sent a
small cleanup series which fixes the error along the way.

Shawn

[1] http://thread.gmane.org/gmane.linux.ports.arm.kernel/305262

> 
> 
> diff --git a/arch/arm/mach-imx/Makefile b/arch/arm/mach-imx/Makefile
> index 9c776a0..4dd45db 100644
> --- a/arch/arm/mach-imx/Makefile
> +++ b/arch/arm/mach-imx/Makefile
> @@ -103,10 +103,10 @@ obj-$(CONFIG_SOC_IMX6Q) += clk-imx6q.o mach-imx6q.o
>  obj-$(CONFIG_SOC_IMX6SL) += clk-imx6sl.o mach-imx6sl.o
>  
>  AFLAGS_suspend-imx6.o :=-Wa,-march=armv7-a
> -obj-$(CONFIG_SUSPEND) += suspend-imx6.o
> -obj-$(CONFIG_SOC_IMX6Q) += pm-imx6q.o
> +imx6-$(CONFIG_SUSPEND) += suspend-imx6.o
> +obj-$(CONFIG_SOC_IMX6Q) += pm-imx6q.o $(imx6-y)
>  # i.MX6SL reuses i.MX6Q code
> -obj-$(CONFIG_SOC_IMX6SL) += pm-imx6q.o
> +obj-$(CONFIG_SOC_IMX6SL) += pm-imx6q.o $(imx6-y)
>  
>  # i.MX5 based machines
>  obj-$(CONFIG_MACH_MX51_BABBAGE) += mach-mx51_babbage.o
> 
> 
> 
> 
> 	Arnd
diff mbox

Patch

diff --git a/arch/arm/mach-imx/Makefile b/arch/arm/mach-imx/Makefile
index 979ff84..b4c19cd 100644
--- a/arch/arm/mach-imx/Makefile
+++ b/arch/arm/mach-imx/Makefile
@@ -103,9 +103,10 @@  obj-$(CONFIG_SOC_IMX6Q) += clk-imx6q.o mach-imx6q.o
 obj-$(CONFIG_SOC_IMX6SL) += clk-imx6sl.o mach-imx6sl.o
 
 AFLAGS_suspend-imx6.o :=-Wa,-march=armv7-a
-obj-$(CONFIG_SOC_IMX6Q) += pm-imx6q.o headsmp.o suspend-imx6.o
+obj-$(CONFIG_SUSPEND) += suspend-imx6.o
+obj-$(CONFIG_SOC_IMX6Q) += pm-imx6q.o headsmp.o
 # i.MX6SL reuses i.MX6Q code
-obj-$(CONFIG_SOC_IMX6SL) += pm-imx6q.o headsmp.o suspend-imx6.o
+obj-$(CONFIG_SOC_IMX6SL) += pm-imx6q.o headsmp.o
 
 # i.MX5 based machines
 obj-$(CONFIG_MACH_MX51_BABBAGE) += mach-mx51_babbage.o
diff --git a/arch/arm/mach-imx/common.h b/arch/arm/mach-imx/common.h
index 91d69cc..b5241ea 100644
--- a/arch/arm/mach-imx/common.h
+++ b/arch/arm/mach-imx/common.h
@@ -116,7 +116,6 @@  void imx_enable_cpu(int cpu, bool enable);
 void imx_set_cpu_jump(int cpu, void *jump_addr);
 u32 imx_get_cpu_arg(int cpu);
 void imx_set_cpu_arg(int cpu, u32 arg);
-void v7_cpu_resume(void);
 #ifdef CONFIG_SMP
 void v7_secondary_startup(void);
 void imx_scu_map_io(void);
@@ -145,7 +144,14 @@  void imx6sl_set_wait_clk(bool enter);
 void imx_cpu_die(unsigned int cpu);
 int imx_cpu_kill(unsigned int cpu);
 
+#ifdef CONFIG_SUSPEND
+void v7_cpu_resume(void);
 void imx6_suspend(void __iomem *ocram_vbase);
+#else
+static inline void v7_cpu_resume(void) {}
+static inline void imx6_suspend(void __iomem *ocram_vbase) {}
+#endif
+
 void imx6q_pm_init(void);
 void imx6dl_pm_init(void);
 void imx6sl_pm_init(void);
diff --git a/arch/arm/mach-imx/headsmp.S b/arch/arm/mach-imx/headsmp.S
index 627f16f..e4b9fed 100644
--- a/arch/arm/mach-imx/headsmp.S
+++ b/arch/arm/mach-imx/headsmp.S
@@ -12,8 +12,6 @@ 
 
 #include <linux/linkage.h>
 #include <linux/init.h>
-#include <asm/asm-offsets.h>
-#include <asm/hardware/cache-l2x0.h>
 
 	.section ".text.head", "ax"
 
@@ -35,37 +33,3 @@  ENTRY(v7_secondary_startup)
 	b	secondary_startup
 ENDPROC(v7_secondary_startup)
 #endif
-
-#ifdef CONFIG_ARM_CPU_SUSPEND
-/*
- * The following code must assume it is running from physical address
- * where absolute virtual addresses to the data section have to be
- * turned into relative ones.
- */
-
-#ifdef CONFIG_CACHE_L2X0
-	.macro	pl310_resume
-	adr	r0, l2x0_saved_regs_offset
-	ldr	r2, [r0]
-	add	r2, r2, r0
-	ldr	r0, [r2, #L2X0_R_PHY_BASE]	@ get physical base of l2x0
-	ldr	r1, [r2, #L2X0_R_AUX_CTRL]	@ get aux_ctrl value
-	str	r1, [r0, #L2X0_AUX_CTRL]	@ restore aux_ctrl
-	mov	r1, #0x1
-	str	r1, [r0, #L2X0_CTRL]		@ re-enable L2
-	.endm
-
-l2x0_saved_regs_offset:
-	.word	l2x0_saved_regs - .
-
-#else
-	.macro	pl310_resume
-	.endm
-#endif
-
-ENTRY(v7_cpu_resume)
-	bl	v7_invalidate_l1
-	pl310_resume
-	b	cpu_resume
-ENDPROC(v7_cpu_resume)
-#endif
diff --git a/arch/arm/mach-imx/suspend-imx6.S b/arch/arm/mach-imx/suspend-imx6.S
index 81b9d1d..20048ff 100644
--- a/arch/arm/mach-imx/suspend-imx6.S
+++ b/arch/arm/mach-imx/suspend-imx6.S
@@ -10,6 +10,7 @@ 
  */
 
 #include <linux/linkage.h>
+#include <asm/asm-offsets.h>
 #include <asm/hardware/cache-l2x0.h>
 #include "hardware.h"
 
@@ -326,3 +327,35 @@  resume:
 
 	mov	pc, lr
 ENDPROC(imx6_suspend)
+
+/*
+ * The following code must assume it is running from physical address
+ * where absolute virtual addresses to the data section have to be
+ * turned into relative ones.
+ */
+
+#ifdef CONFIG_CACHE_L2X0
+	.macro	pl310_resume
+	adr	r0, l2x0_saved_regs_offset
+	ldr	r2, [r0]
+	add	r2, r2, r0
+	ldr	r0, [r2, #L2X0_R_PHY_BASE]	@ get physical base of l2x0
+	ldr	r1, [r2, #L2X0_R_AUX_CTRL]	@ get aux_ctrl value
+	str	r1, [r0, #L2X0_AUX_CTRL]	@ restore aux_ctrl
+	mov	r1, #0x1
+	str	r1, [r0, #L2X0_CTRL]		@ re-enable L2
+	.endm
+
+l2x0_saved_regs_offset:
+	.word	l2x0_saved_regs - .
+
+#else
+	.macro	pl310_resume
+	.endm
+#endif
+
+ENTRY(v7_cpu_resume)
+	bl	v7_invalidate_l1
+	pl310_resume
+	b	cpu_resume
+ENDPROC(v7_cpu_resume)