From: Marc Gonzalez <marc_gonzalez@sigmadesigns.com>
To: Sudeep Holla <sudeep.holla@arm.com>,
linux-pm <linux-pm@vger.kernel.org>,
Linux ARM <linux-arm-kernel@lists.infradead.org>
Cc: Mark Rutland <mark.rutland@arm.com>,
Thomas Petazzoni <thomas.petazzoni@free-electrons.com>,
Kevin Hilman <khilman@kernel.org>,
Thibaud Cornic <thibaud_cornic@sigmadesigns.com>,
Mason <slash.tmp@free.fr>, Sebastian Frias <sf84@laposte.net>,
Robin Murphy <robin.murphy@arm.com>
Subject: [RFC PATCH v2] ARM: tango: add Suspend-to-RAM support
Date: Thu, 30 Jun 2016 10:44:14 +0200 [thread overview]
Message-ID: <5774DBDE.1070605@sigmadesigns.com> (raw)
In-Reply-To: <577409E2.7020106@arm.com>
Ask firmware to put RAM in self-refresh mode and power system down.
echo mem > /sys/power/state
See Documentation/power/states.txt
Signed-off-by: Marc Gonzalez <marc_gonzalez@sigmadesigns.com>
---
This is a RFC because I have a few doubts:
1) return value when tango_suspend() fails and unexpectedly returns (I used -EIO)
Is there a better error to return?
2) conditionally building pm.c (using CONFIG_SUSPEND? CONFIG_PM_SLEEP? other?)
Is there a better config knob to use?
3) .valid is required, right?
AFAICS, the answer is "yes", .valid is indeed required:
("no valid callback implies that none are valid")
static bool valid_state(suspend_state_t state)
{
/*
* PM_SUSPEND_STANDBY and PM_SUSPEND_MEM states need low level
* support and need to be valid to the low level
* implementation, no valid callback implies that none are valid.
*/
return suspend_ops && suspend_ops->valid && suspend_ops->valid(state);
}
---
arch/arm/mach-tango/Makefile | 1 +
arch/arm/mach-tango/pm.c | 32 ++++++++++++++++++++++++++++++++
arch/arm/mach-tango/smc.h | 1 +
3 files changed, 34 insertions(+)
create mode 100644 arch/arm/mach-tango/pm.c
diff --git a/arch/arm/mach-tango/Makefile b/arch/arm/mach-tango/Makefile
index 7ca753aa9fb6..822b7ca803c6 100644
--- a/arch/arm/mach-tango/Makefile
+++ b/arch/arm/mach-tango/Makefile
@@ -3,3 +3,4 @@ AFLAGS_smc.o := -Wa,-march=armv7-a$(plus_sec)
obj-y += setup.o smc.o xenv.o
obj-$(CONFIG_SMP) += platsmp.o
+obj-$(CONFIG_SUSPEND) += pm.o
diff --git a/arch/arm/mach-tango/pm.c b/arch/arm/mach-tango/pm.c
new file mode 100644
index 000000000000..b05c6d6f99d0
--- /dev/null
+++ b/arch/arm/mach-tango/pm.c
@@ -0,0 +1,32 @@
+#include <linux/init.h>
+#include <linux/suspend.h>
+#include <asm/suspend.h>
+#include "smc.h"
+
+static int tango_pm_powerdown(unsigned long arg)
+{
+ tango_suspend(virt_to_phys(cpu_resume));
+
+ return -EIO; /* tango_suspend has failed */
+}
+
+static int tango_pm_enter(suspend_state_t state)
+{
+ if (state == PM_SUSPEND_MEM)
+ return cpu_suspend(0, tango_pm_powerdown);
+
+ return -EINVAL;
+}
+
+static const struct platform_suspend_ops tango_pm_ops = {
+ .enter = tango_pm_enter,
+ .valid = suspend_valid_only_mem,
+};
+
+static int __init tango_pm_init(void)
+{
+ suspend_set_ops(&tango_pm_ops);
+ return 0;
+}
+
+late_initcall(tango_pm_init);
diff --git a/arch/arm/mach-tango/smc.h b/arch/arm/mach-tango/smc.h
index 3d31f984f44c..57919539da1b 100644
--- a/arch/arm/mach-tango/smc.h
+++ b/arch/arm/mach-tango/smc.h
@@ -3,5 +3,6 @@ extern int tango_smc(unsigned int val, unsigned int service);
#define tango_set_l2_control(val) tango_smc(val, 0x102)
#define tango_start_aux_core(val) tango_smc(val, 0x104)
#define tango_set_aux_boot_addr(val) tango_smc(val, 0x105)
+#define tango_suspend(val) tango_smc(val, 0x120)
#define tango_aux_core_die(val) tango_smc(val, 0x121)
#define tango_aux_core_kill(val) tango_smc(val, 0x122)
--
2.9.0
WARNING: multiple messages have this Message-ID (diff)
From: marc_gonzalez@sigmadesigns.com (Marc Gonzalez)
To: linux-arm-kernel@lists.infradead.org
Subject: [RFC PATCH v2] ARM: tango: add Suspend-to-RAM support
Date: Thu, 30 Jun 2016 10:44:14 +0200 [thread overview]
Message-ID: <5774DBDE.1070605@sigmadesigns.com> (raw)
In-Reply-To: <577409E2.7020106@arm.com>
Ask firmware to put RAM in self-refresh mode and power system down.
echo mem > /sys/power/state
See Documentation/power/states.txt
Signed-off-by: Marc Gonzalez <marc_gonzalez@sigmadesigns.com>
---
This is a RFC because I have a few doubts:
1) return value when tango_suspend() fails and unexpectedly returns (I used -EIO)
Is there a better error to return?
2) conditionally building pm.c (using CONFIG_SUSPEND? CONFIG_PM_SLEEP? other?)
Is there a better config knob to use?
3) .valid is required, right?
AFAICS, the answer is "yes", .valid is indeed required:
("no valid callback implies that none are valid")
static bool valid_state(suspend_state_t state)
{
/*
* PM_SUSPEND_STANDBY and PM_SUSPEND_MEM states need low level
* support and need to be valid to the low level
* implementation, no valid callback implies that none are valid.
*/
return suspend_ops && suspend_ops->valid && suspend_ops->valid(state);
}
---
arch/arm/mach-tango/Makefile | 1 +
arch/arm/mach-tango/pm.c | 32 ++++++++++++++++++++++++++++++++
arch/arm/mach-tango/smc.h | 1 +
3 files changed, 34 insertions(+)
create mode 100644 arch/arm/mach-tango/pm.c
diff --git a/arch/arm/mach-tango/Makefile b/arch/arm/mach-tango/Makefile
index 7ca753aa9fb6..822b7ca803c6 100644
--- a/arch/arm/mach-tango/Makefile
+++ b/arch/arm/mach-tango/Makefile
@@ -3,3 +3,4 @@ AFLAGS_smc.o := -Wa,-march=armv7-a$(plus_sec)
obj-y += setup.o smc.o xenv.o
obj-$(CONFIG_SMP) += platsmp.o
+obj-$(CONFIG_SUSPEND) += pm.o
diff --git a/arch/arm/mach-tango/pm.c b/arch/arm/mach-tango/pm.c
new file mode 100644
index 000000000000..b05c6d6f99d0
--- /dev/null
+++ b/arch/arm/mach-tango/pm.c
@@ -0,0 +1,32 @@
+#include <linux/init.h>
+#include <linux/suspend.h>
+#include <asm/suspend.h>
+#include "smc.h"
+
+static int tango_pm_powerdown(unsigned long arg)
+{
+ tango_suspend(virt_to_phys(cpu_resume));
+
+ return -EIO; /* tango_suspend has failed */
+}
+
+static int tango_pm_enter(suspend_state_t state)
+{
+ if (state == PM_SUSPEND_MEM)
+ return cpu_suspend(0, tango_pm_powerdown);
+
+ return -EINVAL;
+}
+
+static const struct platform_suspend_ops tango_pm_ops = {
+ .enter = tango_pm_enter,
+ .valid = suspend_valid_only_mem,
+};
+
+static int __init tango_pm_init(void)
+{
+ suspend_set_ops(&tango_pm_ops);
+ return 0;
+}
+
+late_initcall(tango_pm_init);
diff --git a/arch/arm/mach-tango/smc.h b/arch/arm/mach-tango/smc.h
index 3d31f984f44c..57919539da1b 100644
--- a/arch/arm/mach-tango/smc.h
+++ b/arch/arm/mach-tango/smc.h
@@ -3,5 +3,6 @@ extern int tango_smc(unsigned int val, unsigned int service);
#define tango_set_l2_control(val) tango_smc(val, 0x102)
#define tango_start_aux_core(val) tango_smc(val, 0x104)
#define tango_set_aux_boot_addr(val) tango_smc(val, 0x105)
+#define tango_suspend(val) tango_smc(val, 0x120)
#define tango_aux_core_die(val) tango_smc(val, 0x121)
#define tango_aux_core_kill(val) tango_smc(val, 0x122)
--
2.9.0
next prev parent reply other threads:[~2016-06-30 8:44 UTC|newest]
Thread overview: 12+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-06-29 13:58 [RFC PATCH v1] ARM: tango: add Suspend-to-RAM support Marc Gonzalez
2016-06-29 13:58 ` Marc Gonzalez
2016-06-29 17:48 ` Sudeep Holla
2016-06-29 17:48 ` Sudeep Holla
2016-06-30 8:44 ` Marc Gonzalez [this message]
2016-06-30 8:44 ` [RFC PATCH v2] " Marc Gonzalez
2016-07-04 9:01 ` Marc Gonzalez
2016-07-04 9:01 ` Marc Gonzalez
2016-07-07 13:08 ` [PATCH v3] " Marc Gonzalez
2016-07-07 13:08 ` Marc Gonzalez
2016-07-07 14:01 ` Arnd Bergmann
2016-07-07 14:01 ` Arnd Bergmann
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=5774DBDE.1070605@sigmadesigns.com \
--to=marc_gonzalez@sigmadesigns.com \
--cc=khilman@kernel.org \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux-pm@vger.kernel.org \
--cc=mark.rutland@arm.com \
--cc=robin.murphy@arm.com \
--cc=sf84@laposte.net \
--cc=slash.tmp@free.fr \
--cc=sudeep.holla@arm.com \
--cc=thibaud_cornic@sigmadesigns.com \
--cc=thomas.petazzoni@free-electrons.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.