Skip to contentSkip to conversation

ARM: mx25: Add basic suspend/resume support

PATCH New Fabio Estevam 2 participants 2 messages Jul 3, 2014

Subsystems (3)
lore
Share & tools
lore

Fabio Estevam

author reviewer
#0 lore raw

PATCH v2 1/1 ARM: mx25: Add basic suspend/resume support

From: Fabio Estevam <[email protected]>

Tested basic suspend/resume on a mx25pdk:

root at freescale /$ echo mem > /sys/power/state
PM: Syncing filesystems ... done.
Freezing user space processes ... (elapsed 0.001 seconds) done. Freezing remaining freezable tasks ... (elapsed 0.001 seconds) done. Suspending console(s) (use no_console_suspend to debug)

(Press the keypad)

PM: suspend of devices complete after 5.637 msecs
PM: late suspend of devices complete after 1.649 msecs
PM: noirq suspend of devices complete after 1.874 msecs
PM: noirq resume of devices complete after 1.643 msecs
PM: early resume of devices complete after 1.923 msecs
PM: resume of devices complete after 62.884 msecs
Restarting tasks ... done.
fec 50038000.ethernet eth0: Link is Down
fec 50038000.ethernet eth0: Link is Up - 100Mbps/Full - flow control rx/tx root at freescale /$

---
Change since v1:
- Fix blank lines
- Do not create a new file for storing the prototype

 arch/arm/mach-imx/Makefile   |  2 +-
 arch/arm/mach-imx/imx25-dt.c |  1 +
 arch/arm/mach-imx/mx25.h     |  2 ++
 arch/arm/mach-imx/pm-imx25.c | 41 +++++++++++++++++++++++++++++++++++++++++
 4 files changed, 45 insertions(+), 1 deletion(-)
 create mode 100644 arch/arm/mach-imx/pm-imx25.c
arch/arm/mach-imx/Makefile +1 -1
index a364e20..ddc28d4 100644
@@ -3,7 +3,7 @@ obj-y := time.o cpu.o system.o irq-common.o
 obj-$(CONFIG_SOC_IMX1) += clk-imx1.o mm-imx1.o
 obj-$(CONFIG_SOC_IMX21) += clk-imx21.o mm-imx21.o
 
-obj-$(CONFIG_SOC_IMX25) += clk-imx25.o mm-imx25.o ehci-imx25.o cpu-imx25.o
+obj-$(CONFIG_SOC_IMX25) += clk-imx25.o mm-imx25.o ehci-imx25.o cpu-imx25.o pm-imx25.o
 
 obj-$(CONFIG_SOC_IMX27) += cpu-imx27.o pm-imx27.o
 obj-$(CONFIG_SOC_IMX27) += clk-imx27.o mm-imx27.o ehci-imx27.o
arch/arm/mach-imx/imx25-dt.c +1 -0
index cf8032b..2872ef7 100644
@@ -33,6 +33,7 @@ DT_MACHINE_START(IMX25_DT, "Freescale i.MX25 (Device Tree Support)")
 	.map_io		= mx25_map_io,
 	.init_early	= imx25_init_early,
 	.init_irq	= mx25_init_irq,
+	.init_late      = imx25_pm_init,
 	.init_machine	= imx25_dt_init,
 	.dt_compat	= imx25_dt_board_compat,
 	.restart	= mxc_restart,
arch/arm/mach-imx/mx25.h +2 -0
index ec46640..0bb5894 100644
@@ -114,4 +114,6 @@
 extern int mx25_revision(void);
 #endif
 
+void imx25_pm_init(void);
+
 #endif /* ifndef __MACH_MX25_H__ */
arch/arm/mach-imx/pm-imx25.c new file +41 -0

41 lines not on this page · raw message

Signature · 1 line
1.8.3.2
#1 lore raw

PATCH v2 1/1 ARM: mx25: Add basic suspend/resume support

Quoted 66 lines · Fabio Estevam

From: Fabio Estevam <[email protected]>

Tested basic suspend/resume on a mx25pdk:

root at freescale /$ echo mem > /sys/power/state
PM: Syncing filesystems ... done.
Freezing user space processes ... (elapsed 0.001 seconds) done. Freezing remaining freezable tasks ... (elapsed 0.001 seconds) done. Suspending console(s) (use no_console_suspend to debug)

(Press the keypad)

PM: suspend of devices complete after 5.637 msecs
PM: late suspend of devices complete after 1.649 msecs
PM: noirq suspend of devices complete after 1.874 msecs
PM: noirq resume of devices complete after 1.643 msecs
PM: early resume of devices complete after 1.923 msecs
PM: resume of devices complete after 62.884 msecs
Restarting tasks ... done.
fec 50038000.ethernet eth0: Link is Down
fec 50038000.ethernet eth0: Link is Up - 100Mbps/Full - flow control rx/tx root at freescale /$

---
Change since v1:
- Fix blank lines
- Do not create a new file for storing the prototype

 arch/arm/mach-imx/Makefile   |  2 +-
 arch/arm/mach-imx/imx25-dt.c |  1 +
 arch/arm/mach-imx/mx25.h     |  2 ++
 arch/arm/mach-imx/pm-imx25.c | 41 +++++++++++++++++++++++++++++++++++++++++
 4 files changed, 45 insertions(+), 1 deletion(-)
 create mode 100644 arch/arm/mach-imx/pm-imx25.c
arch/arm/mach-imx/Makefile +1 -1
index a364e20..ddc28d4 100644
@@ -3,7 +3,7 @@ obj-y := time.o cpu.o system.o irq-common.o
 obj-$(CONFIG_SOC_IMX1) += clk-imx1.o mm-imx1.o
 obj-$(CONFIG_SOC_IMX21) += clk-imx21.o mm-imx21.o
 
-obj-$(CONFIG_SOC_IMX25) += clk-imx25.o mm-imx25.o ehci-imx25.o cpu-imx25.o
+obj-$(CONFIG_SOC_IMX25) += clk-imx25.o mm-imx25.o ehci-imx25.o cpu-imx25.o pm-imx25.o
 
 obj-$(CONFIG_SOC_IMX27) += cpu-imx27.o pm-imx27.o
 obj-$(CONFIG_SOC_IMX27) += clk-imx27.o mm-imx27.o ehci-imx27.o
arch/arm/mach-imx/imx25-dt.c +1 -0
index cf8032b..2872ef7 100644
@@ -33,6 +33,7 @@ DT_MACHINE_START(IMX25_DT, "Freescale i.MX25 (Device Tree Support)")
 	.map_io		= mx25_map_io,
 	.init_early	= imx25_init_early,
 	.init_irq	= mx25_init_irq,
+	.init_late      = imx25_pm_init,
 	.init_machine	= imx25_dt_init,
 	.dt_compat	= imx25_dt_board_compat,
 	.restart	= mxc_restart,
arch/arm/mach-imx/mx25.h +0 -0
index ec46640..0bb5894 100644

arch/arm/mach-imx/mx25.h line 118

Quoted 5 lines
arch/arm/mach-imx/mx25.h +2 -0
@@ -114,4 +114,6 @@
 extern int mx25_revision(void);
 #endif
 
+void imx25_pm_init(void);
+

Shouldn't this be put into #ifndef __ASSEMBLY__ together with mx25_revision()? Or can we simply put it into common.h?

Quoted 11 lines
arch/arm/mach-imx/mx25.h +0 -0
 #endif /* ifndef __MACH_MX25_H__ */
arch/arm/mach-imx/pm-imx25.c new file +4 -0
new file mode 100644
index 0000000..560baba
@@ -0,0 +1,41 @@
+/*
+ * Copyright 2014 Freescale Semiconductor, Inc.
+ *
+ * This program is free software; you can redistribute it and/or modify

arch/arm/mach-imx/pm-imx25.c line 14

Quoted 10 lines
arch/arm/mach-imx/pm-imx25.c new file +10 -0
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation.
+ */
+
+#include <linux/kernel.h>
+#include <linux/suspend.h>
+#include <linux/io.h>
+
+#ifdef CONFIG_PM
+static int mx25_suspend_enter(suspend_state_t state)

imx25_suspend_enter

Quoted 9 lines
arch/arm/mach-imx/pm-imx25.c new file +9 -0
+{
+	switch (state) {
+	case PM_SUSPEND_MEM:
+		cpu_do_idle();
+		break;
+	default:
+		return -EINVAL;
+	}
+

arch/arm/mach-imx/pm-imx25.c line 33

Quoted 10 lines
arch/arm/mach-imx/pm-imx25.c new file +10 -0
+	return 0;
+}
+#else
+static inline int mx25_suspend_enter(suspend_state_t state)
+{
+	return 0;
+}
+#endif
+
+static const struct platform_suspend_ops mx25_suspend_ops = {

imx25_suspend_ops

Shawn

Quoted 11 lines
arch/arm/mach-imx/pm-imx25.c new file +8 -0
+	.enter = mx25_suspend_enter,
+	.valid = suspend_valid_only_mem,
+};
+
+void __init imx25_pm_init(void)
+{
+	suspend_set_ops(&mx25_suspend_ops);
+}
Signature · 1 line
1.8.3.2