From: Chen Yu <yu.c.chen-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org>
To: linux-acpi-u79uwXL29TY76Z2rM5mHXA@public.gmane.org,
"Rafael J. Wysocki"
<rafael-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org>,
Matt Fleming
<matt-mF/unelCI9GS6iBeEJttW/XRex20P6io@public.gmane.org>
Cc: linux-pm-u79uwXL29TY76Z2rM5mHXA@public.gmane.org,
linux-efi-u79uwXL29TY76Z2rM5mHXA@public.gmane.org,
linux-kernel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org,
x86-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org,
Thomas Gleixner <tglx-hfZtesqFncYOwBW4kG4KsQ@public.gmane.org>,
Ingo Molnar <mingo-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>,
"H. Peter Anvin" <hpa-YMNOUZJC4hwAvxtiuMwx3w@public.gmane.org>,
Len Brown <lenb-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org>,
Chen Yu <yu.c.chen-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org>
Subject: [PATCH][v5] ACPI / PM: Introduce efi poweroff for HW-full platforms without _S5
Date: Sun, 20 Mar 2016 22:31:08 +0800 [thread overview]
Message-ID: <1458484268-18311-1-git-send-email-yu.c.chen@intel.com> (raw)
The problem is Linux registers pm_power_off = efi_power_off
only if we are in hardware reduced mode. Actually, what we also
want is to do this when ACPI S5 is simply not supported on
non-legacy platforms. Since there will be HW-full mode where
the DSDT fails to supply an _S5 object(without SLP_TYP), we
should let such kind of platform to leverage efi runtime service
to poweroff.
This patch uses efi power off as first choice when S5 is
unavailable, even if there is a customized poweroff(driver provided, eg).
Meanwhile, the legacy platforms will not be affected because there is no
path for them to overwrite the pm_power_off to efi power off.
Suggested-by: Len Brown <len.brown-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org>
Signed-off-by: Chen Yu <yu.c.chen-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org>
---
v5:
- Revert to version 2, enforce EFI poweroff for such kind
of platforms.
v4:
- Since in v3 efi_poweroff_required() is not guaranteed to run
after all of the other code that may register alternative
power off handling, add the pm_power_off_default that would
be used by pm_power_off if nothing else is available.
v3:
- Only assign pm_power_off to efi_power_off when there are no
other pm_power_off registered at that time, in case other
commponents would like to customize their own implementation.
---
v2:
- Convert the acpi_no_s5 to a global bool variable in sleep.c and
add a declaration to include/linux/acpi.h.
---
arch/x86/platform/efi/quirks.c | 2 +-
drivers/acpi/sleep.c | 7 +++++++
include/linux/acpi.h | 1 +
3 files changed, 9 insertions(+), 1 deletion(-)
diff --git a/arch/x86/platform/efi/quirks.c b/arch/x86/platform/efi/quirks.c
index ed30e79..7e5ec62 100644
--- a/arch/x86/platform/efi/quirks.c
+++ b/arch/x86/platform/efi/quirks.c
@@ -340,5 +340,5 @@ bool efi_reboot_required(void)
bool efi_poweroff_required(void)
{
- return !!acpi_gbl_reduced_hardware;
+ return acpi_gbl_reduced_hardware || acpi_no_s5;
}
diff --git a/drivers/acpi/sleep.c b/drivers/acpi/sleep.c
index 9cb9752..a33859c 100644
--- a/drivers/acpi/sleep.c
+++ b/drivers/acpi/sleep.c
@@ -25,6 +25,11 @@
#include "internal.h"
#include "sleep.h"
+/*
+ * Some HW-full platforms do not have _S5, so they may need
+ * to leverage efi power off for a shutdown.
+ */
+bool acpi_no_s5;
static u8 sleep_states[ACPI_S_STATE_COUNT];
static void acpi_sleep_tts_switch(u32 acpi_state)
@@ -846,6 +851,8 @@ int __init acpi_sleep_init(void)
sleep_states[ACPI_STATE_S5] = 1;
pm_power_off_prepare = acpi_power_off_prepare;
pm_power_off = acpi_power_off;
+ } else {
+ acpi_no_s5 = true;
}
supported[0] = 0;
diff --git a/include/linux/acpi.h b/include/linux/acpi.h
index 06ed7e5..4d2e67f 100644
--- a/include/linux/acpi.h
+++ b/include/linux/acpi.h
@@ -278,6 +278,7 @@ void acpi_irq_stats_init(void);
extern u32 acpi_irq_handled;
extern u32 acpi_irq_not_handled;
extern unsigned int acpi_sci_irq;
+extern bool acpi_no_s5;
#define INVALID_ACPI_IRQ ((unsigned)-1)
static inline bool acpi_sci_irq_valid(void)
{
--
1.8.4.2
WARNING: multiple messages have this Message-ID (diff)
From: Chen Yu <yu.c.chen@intel.com>
To: linux-acpi@vger.kernel.org,
"Rafael J. Wysocki" <rafael@kernel.org>,
Matt Fleming <matt@codeblueprint.co.uk>
Cc: linux-pm@vger.kernel.org, linux-efi@vger.kernel.org,
linux-kernel@vger.kernel.org, x86@kernel.org,
Thomas Gleixner <tglx@linutronix.de>,
Ingo Molnar <mingo@redhat.com>, "H. Peter Anvin" <hpa@zytor.com>,
Len Brown <lenb@kernel.org>, Chen Yu <yu.c.chen@intel.com>
Subject: [PATCH][v5] ACPI / PM: Introduce efi poweroff for HW-full platforms without _S5
Date: Sun, 20 Mar 2016 22:31:08 +0800 [thread overview]
Message-ID: <1458484268-18311-1-git-send-email-yu.c.chen@intel.com> (raw)
The problem is Linux registers pm_power_off = efi_power_off
only if we are in hardware reduced mode. Actually, what we also
want is to do this when ACPI S5 is simply not supported on
non-legacy platforms. Since there will be HW-full mode where
the DSDT fails to supply an _S5 object(without SLP_TYP), we
should let such kind of platform to leverage efi runtime service
to poweroff.
This patch uses efi power off as first choice when S5 is
unavailable, even if there is a customized poweroff(driver provided, eg).
Meanwhile, the legacy platforms will not be affected because there is no
path for them to overwrite the pm_power_off to efi power off.
Suggested-by: Len Brown <len.brown@intel.com>
Signed-off-by: Chen Yu <yu.c.chen@intel.com>
---
v5:
- Revert to version 2, enforce EFI poweroff for such kind
of platforms.
v4:
- Since in v3 efi_poweroff_required() is not guaranteed to run
after all of the other code that may register alternative
power off handling, add the pm_power_off_default that would
be used by pm_power_off if nothing else is available.
v3:
- Only assign pm_power_off to efi_power_off when there are no
other pm_power_off registered at that time, in case other
commponents would like to customize their own implementation.
---
v2:
- Convert the acpi_no_s5 to a global bool variable in sleep.c and
add a declaration to include/linux/acpi.h.
---
arch/x86/platform/efi/quirks.c | 2 +-
drivers/acpi/sleep.c | 7 +++++++
include/linux/acpi.h | 1 +
3 files changed, 9 insertions(+), 1 deletion(-)
diff --git a/arch/x86/platform/efi/quirks.c b/arch/x86/platform/efi/quirks.c
index ed30e79..7e5ec62 100644
--- a/arch/x86/platform/efi/quirks.c
+++ b/arch/x86/platform/efi/quirks.c
@@ -340,5 +340,5 @@ bool efi_reboot_required(void)
bool efi_poweroff_required(void)
{
- return !!acpi_gbl_reduced_hardware;
+ return acpi_gbl_reduced_hardware || acpi_no_s5;
}
diff --git a/drivers/acpi/sleep.c b/drivers/acpi/sleep.c
index 9cb9752..a33859c 100644
--- a/drivers/acpi/sleep.c
+++ b/drivers/acpi/sleep.c
@@ -25,6 +25,11 @@
#include "internal.h"
#include "sleep.h"
+/*
+ * Some HW-full platforms do not have _S5, so they may need
+ * to leverage efi power off for a shutdown.
+ */
+bool acpi_no_s5;
static u8 sleep_states[ACPI_S_STATE_COUNT];
static void acpi_sleep_tts_switch(u32 acpi_state)
@@ -846,6 +851,8 @@ int __init acpi_sleep_init(void)
sleep_states[ACPI_STATE_S5] = 1;
pm_power_off_prepare = acpi_power_off_prepare;
pm_power_off = acpi_power_off;
+ } else {
+ acpi_no_s5 = true;
}
supported[0] = 0;
diff --git a/include/linux/acpi.h b/include/linux/acpi.h
index 06ed7e5..4d2e67f 100644
--- a/include/linux/acpi.h
+++ b/include/linux/acpi.h
@@ -278,6 +278,7 @@ void acpi_irq_stats_init(void);
extern u32 acpi_irq_handled;
extern u32 acpi_irq_not_handled;
extern unsigned int acpi_sci_irq;
+extern bool acpi_no_s5;
#define INVALID_ACPI_IRQ ((unsigned)-1)
static inline bool acpi_sci_irq_valid(void)
{
--
1.8.4.2
next reply other threads:[~2016-03-20 14:31 UTC|newest]
Thread overview: 6+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-03-20 14:31 Chen Yu [this message]
2016-03-20 14:31 ` [PATCH][v5] ACPI / PM: Introduce efi poweroff for HW-full platforms without _S5 Chen Yu
[not found] ` <1458484268-18311-1-git-send-email-yu.c.chen-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org>
2016-03-21 12:43 ` Rafael J. Wysocki
2016-03-21 12:43 ` Rafael J. Wysocki
[not found] ` <CAJZ5v0j1TpjQ8nD3gr7NYA_dpcghDidsvSoAOuobLMw6-3waCg-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2016-03-21 14:05 ` Matt Fleming
2016-03-21 14:05 ` Matt Fleming
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=1458484268-18311-1-git-send-email-yu.c.chen@intel.com \
--to=yu.c.chen-ral2jqcrhueavxtiumwx3w@public.gmane.org \
--cc=hpa-YMNOUZJC4hwAvxtiuMwx3w@public.gmane.org \
--cc=lenb-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org \
--cc=linux-acpi-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \
--cc=linux-efi-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \
--cc=linux-kernel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \
--cc=linux-pm-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \
--cc=matt-mF/unelCI9GS6iBeEJttW/XRex20P6io@public.gmane.org \
--cc=mingo-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org \
--cc=rafael-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org \
--cc=tglx-hfZtesqFncYOwBW4kG4KsQ@public.gmane.org \
--cc=x86-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org \
/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.