From patchwork Wed Mar 2 13:29:17 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Chen Yu X-Patchwork-Id: 8480621 Return-Path: X-Original-To: patchwork-linux-acpi@patchwork.kernel.org Delivered-To: patchwork-parsemail@patchwork1.web.kernel.org Received: from mail.kernel.org (mail.kernel.org [198.145.29.136]) by patchwork1.web.kernel.org (Postfix) with ESMTP id 2CEBA9F372 for ; Wed, 2 Mar 2016 13:23:19 +0000 (UTC) Received: from mail.kernel.org (localhost [127.0.0.1]) by mail.kernel.org (Postfix) with ESMTP id 4BF0120382 for ; Wed, 2 Mar 2016 13:23:18 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id 4FCA120377 for ; Wed, 2 Mar 2016 13:23:17 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752225AbcCBNXP (ORCPT ); Wed, 2 Mar 2016 08:23:15 -0500 Received: from mga09.intel.com ([134.134.136.24]:25790 "EHLO mga09.intel.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751130AbcCBNXO (ORCPT ); Wed, 2 Mar 2016 08:23:14 -0500 Received: from fmsmga002.fm.intel.com ([10.253.24.26]) by orsmga102.jf.intel.com with ESMTP; 02 Mar 2016 05:23:14 -0800 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.22,528,1449561600"; d="scan'208";a="927925592" Received: from unknown (HELO localhost.localdomain.sh.intel.com) ([10.239.160.87]) by fmsmga002.fm.intel.com with ESMTP; 02 Mar 2016 05:23:11 -0800 From: Chen Yu To: linux-acpi@vger.kernel.org, linux-efi@vger.kernel.org Cc: linux-pm@vger.kernel.org, rjw@sisk.pl, lenb@kernel.org, matt.fleming@intel.com, tglx@linutronix.de, x86@kernel.org, rui.zhang@intel.com, lv.zheng@intel.com, Chen Yu Subject: [PATCH][RFC] ACPI / PM: Fix poweroff issue on HW-full platforms without _S5 Date: Wed, 2 Mar 2016 21:29:17 +0800 Message-Id: <1456925357-2899-1-git-send-email-yu.c.chen@intel.com> X-Mailer: git-send-email 1.8.4.2 Sender: linux-acpi-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-acpi@vger.kernel.org X-Spam-Status: No, score=-6.9 required=5.0 tests=BAYES_00, RCVD_IN_DNSWL_HI, RP_MATCHES_RCVD, UNPARSEABLE_RELAY autolearn=unavailable version=3.3.1 X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on mail.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP 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. That should handle both the HW reduced mode, and the HW-full mode where the DSDT fails to supply an _S5 object. This patch fixes this issue by introducing a new flag acpi_no_s5 which indicates the non-existence of _S5. The initial state of acpi_no_s5 is false and probed in acpi_sleep_init, then we'll later see the updated value in efi_poweroff_required, according to which we can set pm_power_off to efi_power_off in efi_shutdown_init. Suggested-by: Len Brown Signed-off-by: Chen Yu --- arch/x86/platform/efi/quirks.c | 3 ++- drivers/acpi/sleep.c | 2 ++ include/acpi/acpixf.h | 6 ++++++ 3 files changed, 10 insertions(+), 1 deletion(-) diff --git a/arch/x86/platform/efi/quirks.c b/arch/x86/platform/efi/quirks.c index 2d66db8..8ec43bc 100644 --- a/arch/x86/platform/efi/quirks.c +++ b/arch/x86/platform/efi/quirks.c @@ -295,5 +295,6 @@ 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..6f75e54 100644 --- a/drivers/acpi/sleep.c +++ b/drivers/acpi/sleep.c @@ -846,6 +846,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/acpi/acpixf.h b/include/acpi/acpixf.h index c96621e..2b4d7f7 100644 --- a/include/acpi/acpixf.h +++ b/include/acpi/acpixf.h @@ -252,6 +252,12 @@ ACPI_INIT_GLOBAL(u8, acpi_gbl_osi_data, 0); ACPI_INIT_GLOBAL(u8, acpi_gbl_reduced_hardware, FALSE); /* + * Some HW-full platforms do not have S5, so they may need + * to leverage efi power off for a shutdown. + */ +ACPI_INIT_GLOBAL(u8, acpi_no_s5, FALSE); + +/* * This mechanism is used to trace a specified AML method. The method is * traced each time it is executed. */