From: Geert Uytterhoeven <geert+renesas@glider.be>
To: Lorenzo Pieralisi <lorenzo.pieralisi@arm.com>,
Mark Rutland <mark.rutland@arm.com>,
Sudeep Holla <sudeep.holla@arm.com>,
Lina Iyer <lina.iyer@linaro.org>,
John Stultz <john.stultz@linaro.org>,
Thomas Gleixner <tglx@linutronix.de>,
"Rafael J . Wysocki" <rjw@rjwysocki.net>,
Len Brown <len.brown@intel.com>, Pavel Machek <pavel@ucw.cz>,
Rob Herring <robh+dt@kernel.org>
Cc: Magnus Damm <magnus.damm@gmail.com>,
devicetree@vger.kernel.org, linux-arm-kernel@lists.infradead.org,
linux-renesas-soc@vger.kernel.org, linux-pm@vger.kernel.org,
linux-kernel@vger.kernel.org,
Geert Uytterhoeven <geert+renesas@glider.be>
Subject: [PATCH/RFC 4/6] drivers: firmware: psci: Fix non-PMIC wake-up if SYSTEM_SUSPEND cuts power
Date: Mon, 20 Feb 2017 21:33:27 +0100 [thread overview]
Message-ID: <1487622809-25127-5-git-send-email-geert+renesas@glider.be> (raw)
In-Reply-To: <1487622809-25127-1-git-send-email-geert+renesas@glider.be>
Nothing in the PSCI specification requires the SoC to remain powered and
to support wake-up sources when suspended using SYSTEM_SUSPEND.
If the firmware implements the PSCI SYSTEM_SUSPEND operation by cutting
power to the SoC, the only possibly wake-up sources are thus the ones
connected to the PMIC.
Document and add support for an "arm,psci-system-suspend-is-power-down"
DT property, so Linux uses a different suspend method when other wake-up
sources (e.g. wake on LAN, UART or GPIO) are enabled.
Signed-off-by: Geert Uytterhoeven <geert+renesas@glider.be>
---
Documentation/devicetree/bindings/arm/psci.txt | 11 +++++++++++
drivers/firmware/psci.c | 13 ++++++++++---
2 files changed, 21 insertions(+), 3 deletions(-)
diff --git a/Documentation/devicetree/bindings/arm/psci.txt b/Documentation/devicetree/bindings/arm/psci.txt
index a2c4f1d524929bb7..16e390ecb7531028 100644
--- a/Documentation/devicetree/bindings/arm/psci.txt
+++ b/Documentation/devicetree/bindings/arm/psci.txt
@@ -68,6 +68,17 @@ state nodes, as per bindings in [1]) must specify the following properties:
Definition: power_state parameter to pass to the PSCI
suspend call.
+ - arm,psci-system-suspend-is-power-down
+ Nothing in the PSCI specification requires the SoC to remain
+ powered and to support wake-up sources when suspended using
+ SYSTEM_SUSPEND.
+ If your firmware implements the PSCI SYSTEM_SUSPEND operation
+ by cutting power to the SoC, the only possibly wake-up sources
+ are thus the ones connected to the PMIC. In such case you
+ should specify this property, so the operating system is aware
+ it should use a different suspend method when other wake-up
+ sources (e.g. wake on LAN, UART or GPIO) are enabled.
+
Example:
Case 1: PSCI v0.1 only.
diff --git a/drivers/firmware/psci.c b/drivers/firmware/psci.c
index 13b4d50bb3577384..0a74c23fd5fe043e 100644
--- a/drivers/firmware/psci.c
+++ b/drivers/firmware/psci.c
@@ -20,6 +20,7 @@
#include <linux/linkage.h>
#include <linux/of.h>
#include <linux/pm.h>
+#include <linux/pm_wakeup.h>
#include <linux/printk.h>
#include <linux/psci.h>
#include <linux/reboot.h>
@@ -86,6 +87,7 @@ static u32 psci_function_id[PSCI_FN_MAX];
static u32 psci_cpu_suspend_feature;
static bool psci_suspend_mem_supported;
+static bool psci_system_suspend_is_power_down;
static inline bool psci_has_ext_power_state(void)
{
@@ -440,12 +442,14 @@ static int psci_system_suspend_valid(suspend_state_t state)
static int psci_system_suspend_enter(suspend_state_t state)
{
switch (state) {
+ case PM_SUSPEND_MEM:
+ if (!psci_system_suspend_is_power_down ||
+ !wakeup_source_available())
+ return cpu_suspend(0, psci_system_suspend);
+ /* fall through */
case PM_SUSPEND_STANDBY:
cpu_do_idle();
break;
-
- case PM_SUSPEND_MEM:
- return cpu_suspend(0, psci_system_suspend);
}
return 0;
@@ -596,6 +600,9 @@ static int __init psci_0_2_init(struct device_node *np)
*/
err = psci_probe();
+ psci_system_suspend_is_power_down = of_property_read_bool(np,
+ "arm,psci-system-suspend-is-power-down");
+
out_put_node:
of_node_put(np);
return err;
--
2.7.4
next prev parent reply other threads:[~2017-02-20 20:34 UTC|newest]
Thread overview: 48+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-02-20 20:33 [PATCH/RFC 0/6] PSCI: Fix non-PMIC wake-up if SYSTEM_SUSPEND cuts power Geert Uytterhoeven
2017-02-20 20:33 ` [PATCH/RFC 1/6] alarmtimer: Postpone wake-up source registration until really available Geert Uytterhoeven
2017-02-20 20:33 ` [PATCH/RFC 2/6] PM / Wakeup: Add wakeup_source_available() Geert Uytterhoeven
2017-02-20 20:33 ` [PATCH/RFC 3/6] drivers: firmware: psci: Implement shallow suspend mode Geert Uytterhoeven
2017-02-21 10:42 ` Sudeep Holla
2017-02-21 16:23 ` Geert Uytterhoeven
2017-02-21 16:51 ` Sudeep Holla
2017-02-21 11:07 ` Pavel Machek
2017-02-21 11:14 ` Sudeep Holla
2017-02-21 16:32 ` Geert Uytterhoeven
2017-02-21 17:20 ` Mark Rutland
2017-02-21 18:06 ` Geert Uytterhoeven
2017-02-21 18:18 ` Mark Rutland
2017-02-21 18:23 ` Geert Uytterhoeven
2017-02-21 17:22 ` Sudeep Holla
2017-02-22 13:47 ` Geert Uytterhoeven
2017-02-22 14:35 ` Sudeep Holla
2017-02-20 20:33 ` Geert Uytterhoeven [this message]
2017-02-21 10:50 ` [PATCH/RFC 4/6] drivers: firmware: psci: Fix non-PMIC wake-up if SYSTEM_SUSPEND cuts power Sudeep Holla
2017-02-21 16:36 ` Geert Uytterhoeven
2017-02-21 16:49 ` Sudeep Holla
2017-02-21 11:07 ` Pavel Machek
2017-02-21 16:36 ` Geert Uytterhoeven
2017-02-21 17:54 ` Mark Rutland
2017-02-21 17:48 ` Mark Rutland
2017-02-22 14:05 ` Geert Uytterhoeven
2017-02-22 14:57 ` Rafael J. Wysocki
2017-02-20 20:33 ` [PATCH/RFC 5/6] arm64: dts: r8a7795: Fix non-PMIC wake-up sources Geert Uytterhoeven
2017-02-20 20:33 ` [PATCH/RFC 6/6] arm64: dts: r8a7796: " Geert Uytterhoeven
2017-02-21 10:38 ` [PATCH/RFC 0/6] PSCI: Fix non-PMIC wake-up if SYSTEM_SUSPEND cuts power Sudeep Holla
2017-02-21 16:21 ` Geert Uytterhoeven
2017-02-21 16:45 ` Sudeep Holla
2017-02-21 17:34 ` Geert Uytterhoeven
2017-02-21 17:51 ` Sudeep Holla
2017-02-21 18:27 ` Sudeep Holla
2017-02-21 18:45 ` Sudeep Holla
2017-02-22 1:14 ` Rafael J. Wysocki
2017-02-22 11:03 ` Sudeep Holla
2017-02-22 13:38 ` Geert Uytterhoeven
2017-02-22 14:32 ` Sudeep Holla
2017-02-22 14:50 ` Rafael J. Wysocki
2017-02-22 15:24 ` Sudeep Holla
2017-02-23 15:26 ` Geert Uytterhoeven
2017-02-23 15:34 ` Geert Uytterhoeven
2017-02-23 15:58 ` Sudeep Holla
2017-02-23 15:53 ` Sudeep Holla
2017-02-22 13:14 ` Geert Uytterhoeven
2017-02-22 14:31 ` Rafael J. Wysocki
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=1487622809-25127-5-git-send-email-geert+renesas@glider.be \
--to=geert+renesas@glider.be \
--cc=devicetree@vger.kernel.org \
--cc=john.stultz@linaro.org \
--cc=len.brown@intel.com \
--cc=lina.iyer@linaro.org \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-pm@vger.kernel.org \
--cc=linux-renesas-soc@vger.kernel.org \
--cc=lorenzo.pieralisi@arm.com \
--cc=magnus.damm@gmail.com \
--cc=mark.rutland@arm.com \
--cc=pavel@ucw.cz \
--cc=rjw@rjwysocki.net \
--cc=robh+dt@kernel.org \
--cc=sudeep.holla@arm.com \
--cc=tglx@linutronix.de \
/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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).