From patchwork Thu May 5 01:58:08 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Zhang, Rui" X-Patchwork-Id: 570897 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 9FE1FC4332F for ; Thu, 5 May 2022 01:58:23 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S236691AbiEECB6 (ORCPT ); Wed, 4 May 2022 22:01:58 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:38192 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S236547AbiEECB4 (ORCPT ); Wed, 4 May 2022 22:01:56 -0400 Received: from mga01.intel.com (mga01.intel.com [192.55.52.88]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id CE709496BA; Wed, 4 May 2022 18:58:18 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1651715898; x=1683251898; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=D3ZZxLXW0g++7yQ4TCcNc5rHJLllJ4ihW+EZESk4M/k=; b=IghTVzWkpKU/e+63p3N1STkgvuJkh5mHrV4daiOf6mULUsrm5zktQrBt LlDKsQf412fM9MrohkOgNrvTar/rjDGWIpt14DP8rfR8m+RumQnPwwpm6 blwGC1955HoUOhDF9QqloFGTv/YXXcKhJQgiJDrrQgvz0ACeZ37lTTAwd rmH3y7gRRASlH+nrKWLpkdA5aqja4nt2as6n+lmbtXM5zjLSrSzdvDTlK q9D5qd4jylIVt4PhphnoVdPLidkffKjtO7vvYgV3UrjUCGu9onrhiJLsL GibUX/CWpSrdM71LfNhyqOcUkf5KF/Lsvkp9O+RzvpCSGEyIjXdIOZKcn Q==; X-IronPort-AV: E=McAfee;i="6400,9594,10337"; a="293153440" X-IronPort-AV: E=Sophos;i="5.91,199,1647327600"; d="scan'208";a="293153440" Received: from orsmga006.jf.intel.com ([10.7.209.51]) by fmsmga101.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 04 May 2022 18:58:18 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.91,199,1647327600"; d="scan'208";a="537105979" Received: from rzhang1-dev.sh.intel.com ([10.239.48.43]) by orsmga006.jf.intel.com with ESMTP; 04 May 2022 18:58:15 -0700 From: Zhang Rui To: rjw@rjwysocki.net, kvalo@kernel.org, alexandre.belloni@bootlin.com Cc: linux-pm@vger.kernel.org, linux-acpi@vger.kernel.org, linux-rtc@vger.kernel.org, linux-wireless@vger.kernel.org, daniel.lezcano@linaro.org, merez@codeaurora.org, mat.jonczyk@o2.pl, sumeet.r.pawnikar@intel.com, len.brown@intel.com Subject: [PATCH 1/7] PM: wakeup: expose pm_wakeup_pending to modules Date: Thu, 5 May 2022 09:58:08 +0800 Message-Id: <20220505015814.3727692-2-rui.zhang@intel.com> X-Mailer: git-send-email 2.27.0 In-Reply-To: <20220505015814.3727692-1-rui.zhang@intel.com> References: <20220505015814.3727692-1-rui.zhang@intel.com> MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: linux-pm@vger.kernel.org intel_pch_thermal driver needs a long delay to cool itself (60 seconds in maximum) during suspend. When a wakeup event occures during the delay, it is better for the intel_pch_thermal driver to detect this and quit cooling because the suspend is likely to abort anyway. Thus expose pm_wakeup_pending to modules so that intel_pch_thermal driver can be aware of the wakeup events. Signed-off-by: Zhang Rui Tested-by: Sumeet Pawnikar --- drivers/base/power/wakeup.c | 1 + 1 file changed, 1 insertion(+) diff --git a/drivers/base/power/wakeup.c b/drivers/base/power/wakeup.c index a57d469676ca..11a4ffe91367 100644 --- a/drivers/base/power/wakeup.c +++ b/drivers/base/power/wakeup.c @@ -930,6 +930,7 @@ bool pm_wakeup_pending(void) return ret || atomic_read(&pm_abort_suspend) > 0; } +EXPORT_SYMBOL_GPL(pm_wakeup_pending); void pm_system_wakeup(void) { From patchwork Thu May 5 01:58:09 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Zhang, Rui" X-Patchwork-Id: 570106 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id A8471C4321E for ; Thu, 5 May 2022 01:58:24 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S236547AbiEECCA (ORCPT ); Wed, 4 May 2022 22:02:00 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:38204 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S236720AbiEECB7 (ORCPT ); Wed, 4 May 2022 22:01:59 -0400 Received: from mga01.intel.com (mga01.intel.com [192.55.52.88]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id EA5CF473BD; Wed, 4 May 2022 18:58:21 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1651715901; x=1683251901; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=VDPDVStC+kmpJjWbHPX1nYEBC4CzD4iAHbBoI2lYF40=; b=S7CSAI395cnCMlK6SZK3GuAHKJvQFM+MSCxkj9RLf898IJqbBe1eeV45 RnNO2bMjpz4Olm9kDxXP/pQ4FNN8WEi5nG5e7ykDJVv0f7laHSb1ReA2k lChA1W7vElfu7/Y0jb5dORr6YOtkHHYU17BzM2BBCVEKhJjEdn8SmtxLP fs0gZtJM3ahQFiryC5071AM3ETFdSjG4v1ygk60NSVcn8nxFRTWCM/Vlp 3FQkJC/F7LhYkSece2uvAT7htPkapbknv3oXbO/02eA/Ul8aBOd4wBf0i uqGj/gc9k4emOdujoivTEBWt/NEazxWk3U4SXTABxULXqYDNP++1GSGv/ A==; X-IronPort-AV: E=McAfee;i="6400,9594,10337"; a="293153451" X-IronPort-AV: E=Sophos;i="5.91,199,1647327600"; d="scan'208";a="293153451" Received: from orsmga006.jf.intel.com ([10.7.209.51]) by fmsmga101.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 04 May 2022 18:58:21 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.91,199,1647327600"; d="scan'208";a="537105986" Received: from rzhang1-dev.sh.intel.com ([10.239.48.43]) by orsmga006.jf.intel.com with ESMTP; 04 May 2022 18:58:18 -0700 From: Zhang Rui To: rjw@rjwysocki.net, kvalo@kernel.org, alexandre.belloni@bootlin.com Cc: linux-pm@vger.kernel.org, linux-acpi@vger.kernel.org, linux-rtc@vger.kernel.org, linux-wireless@vger.kernel.org, daniel.lezcano@linaro.org, merez@codeaurora.org, mat.jonczyk@o2.pl, sumeet.r.pawnikar@intel.com, len.brown@intel.com Subject: [PATCH 2/7] thermal: intel: pch: enhance overheat handling Date: Thu, 5 May 2022 09:58:09 +0800 Message-Id: <20220505015814.3727692-3-rui.zhang@intel.com> X-Mailer: git-send-email 2.27.0 In-Reply-To: <20220505015814.3727692-1-rui.zhang@intel.com> References: <20220505015814.3727692-1-rui.zhang@intel.com> MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: linux-pm@vger.kernel.org Commit ef63b043ac86 ("thermal: intel: pch: fix S0ix failure due to PCH temperature above threshold") introduces delay loop mechanism that allows PCH temperature to go down below threshold during suspend so it won't block S0ix. And the default overall delay timeout is 1 second. However, in practice, we found that the time it takes to cool the PCH down below threshold highly depends on the initial PCH temperature when the delay starts, as well as the ambient temperature. And in some cases, the 1 second delay is not sufficient. As a result, the system stays in a shallower power state like PCx instead of S0ix, and drains the battery power, without user' notice. To make sure S0ix is not blocked by the PCH overheating, we 1. expand the default overall timeout to 60 seconds. 2. make sure the temperature is below threshold rather than equal to it. 3. move the delay to .suspend_noirq phase instead, in order to a) do cooling delay with a more quiescent system b) be aware of wakeup events during the long delay, because some wakeup events (ACPI Power button Press, USB mouse, etc) become valid only in .suspend_noirq phase and later. This may introduce longer suspend time, but only in the cases when the system overheats and Linux used to enter a shallower S2idle state, say, PCx instead of S0ix. Signed-off-by: Zhang Rui Tested-by: Sumeet Pawnikar --- drivers/thermal/intel/intel_pch_thermal.c | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) diff --git a/drivers/thermal/intel/intel_pch_thermal.c b/drivers/thermal/intel/intel_pch_thermal.c index 527c91f5960b..b7b32e2f5ae2 100644 --- a/drivers/thermal/intel/intel_pch_thermal.c +++ b/drivers/thermal/intel/intel_pch_thermal.c @@ -70,8 +70,8 @@ static unsigned int delay_timeout = 100; module_param(delay_timeout, int, 0644); MODULE_PARM_DESC(delay_timeout, "amount of time delay for each iteration."); -/* Number of iterations for cooling delay, 10 counts by default for now */ -static unsigned int delay_cnt = 10; +/* Number of iterations for cooling delay, 600 counts by default for now */ +static unsigned int delay_cnt = 600; module_param(delay_cnt, int, 0644); MODULE_PARM_DESC(delay_cnt, "total number of iterations for time delay."); @@ -193,10 +193,11 @@ static int pch_wpt_get_temp(struct pch_thermal_device *ptd, int *temp) return 0; } +/* Cool the PCH when it's overheat in .suspend_noirq phase */ static int pch_wpt_suspend(struct pch_thermal_device *ptd) { u8 tsel; - u8 pch_delay_cnt = 1; + int pch_delay_cnt = 1; u16 pch_thr_temp, pch_cur_temp; /* Shutdown the thermal sensor if it is not enabled by BIOS */ @@ -233,7 +234,10 @@ static int pch_wpt_suspend(struct pch_thermal_device *ptd) * which helps to indentify the reason why S0ix entry was rejected. */ while (pch_delay_cnt <= delay_cnt) { - if (pch_cur_temp <= pch_thr_temp) + if (pch_cur_temp < pch_thr_temp) + break; + + if (pm_wakeup_pending()) break; dev_warn(&ptd->pdev->dev, @@ -245,7 +249,7 @@ static int pch_wpt_suspend(struct pch_thermal_device *ptd) pch_delay_cnt++; } - if (pch_cur_temp > pch_thr_temp) + if (pch_cur_temp >= pch_thr_temp) dev_warn(&ptd->pdev->dev, "CPU-PCH is hot [%dC] even after delay, continue to suspend. S0ix might fail\n", pch_cur_temp); @@ -455,7 +459,7 @@ static void intel_pch_thermal_remove(struct pci_dev *pdev) pci_disable_device(pdev); } -static int intel_pch_thermal_suspend(struct device *device) +static int intel_pch_thermal_suspend_noirq(struct device *device) { struct pch_thermal_device *ptd = dev_get_drvdata(device); @@ -495,7 +499,7 @@ static const struct pci_device_id intel_pch_thermal_id[] = { MODULE_DEVICE_TABLE(pci, intel_pch_thermal_id); static const struct dev_pm_ops intel_pch_pm_ops = { - .suspend = intel_pch_thermal_suspend, + .suspend_noirq = intel_pch_thermal_suspend_noirq, .resume = intel_pch_thermal_resume, }; From patchwork Thu May 5 01:58:10 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Zhang, Rui" X-Patchwork-Id: 570896 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id E3144C433FE for ; Thu, 5 May 2022 01:58:29 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S236848AbiEECCF (ORCPT ); Wed, 4 May 2022 22:02:05 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:38252 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S236830AbiEECCD (ORCPT ); Wed, 4 May 2022 22:02:03 -0400 Received: from mga01.intel.com (mga01.intel.com [192.55.52.88]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 864924C788; Wed, 4 May 2022 18:58:25 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1651715905; x=1683251905; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=WMMQI6LaG8XnQdWUmuMOfgF6HNdtWI8KYOOxX5jpl9E=; b=dfW6c0HPJeDYtd2hBUO+cJ8lUtyNQsTCEF8DI29+7Z1BXpdPiMArB1WU MiGJGpex74DvZ/EuB52mq9n3N5hUm0pYrBJz3myMspxFG6bwrFB1Iy8ic kKqlO5ItGQuB21qcidqSJKdZ4TU4K46zufie3lP1VXXxXb5BEffTxGy2Q d3O3IU6dMKuItJ8DYgSRl0aoK5Z29iIciamID5O2IoqpfzXYuei9pQDlG uDtQz14cuq7YEwh8UEdlajorYekWn5nrocjNHkKWuoqK6xw9yxEs8WqL7 d2O4RmfrSl6+2J7I726qCI4XEw7ATylTctGP+A5FB/IFyky5jM0TGIpqT A==; X-IronPort-AV: E=McAfee;i="6400,9594,10337"; a="293153468" X-IronPort-AV: E=Sophos;i="5.91,199,1647327600"; d="scan'208";a="293153468" Received: from orsmga006.jf.intel.com ([10.7.209.51]) by fmsmga101.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 04 May 2022 18:58:24 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.91,199,1647327600"; d="scan'208";a="537105992" Received: from rzhang1-dev.sh.intel.com ([10.239.48.43]) by orsmga006.jf.intel.com with ESMTP; 04 May 2022 18:58:21 -0700 From: Zhang Rui To: rjw@rjwysocki.net, kvalo@kernel.org, alexandre.belloni@bootlin.com Cc: linux-pm@vger.kernel.org, linux-acpi@vger.kernel.org, linux-rtc@vger.kernel.org, linux-wireless@vger.kernel.org, daniel.lezcano@linaro.org, merez@codeaurora.org, mat.jonczyk@o2.pl, sumeet.r.pawnikar@intel.com, len.brown@intel.com Subject: [PATCH 3/7] thermal: intel: pch: improve the cooling delay log Date: Thu, 5 May 2022 09:58:10 +0800 Message-Id: <20220505015814.3727692-4-rui.zhang@intel.com> X-Mailer: git-send-email 2.27.0 In-Reply-To: <20220505015814.3727692-1-rui.zhang@intel.com> References: <20220505015814.3727692-1-rui.zhang@intel.com> MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: linux-pm@vger.kernel.org Previously, during suspend, intel_pch_thermal driver logs for every cooling iteration, about the current PCH temperature and number of cooling iterations that have been tried, like below [ 100.955526] intel_pch_thermal 0000:00:14.2: CPU-PCH current temp [53C] higher than the threshold temp [50C], sleep 1 times for 100 ms duration [ 101.064156] intel_pch_thermal 0000:00:14.2: CPU-PCH current temp [53C] higher than the threshold temp [50C], sleep 2 times for 100 ms duration After changing the default delay_cnt to 600, in practice, it is common to see tens of the above messages if the system is suspended when PCH overheats. Thus, change this log message from dev_warn to dev_dbg because it is only useful when we want to check the temperature trend. At the same time, there is always a one-line message given by the driver with the patch applied, with below four possibilities. 1. PCH is cool, no cooling delay needed [ 1791.902853] intel_pch_thermal 0000:00:12.0: CPU-PCH is cool [48C] 2. PCH overheats and becomes cool after the cooling delays [ 1475.511617] intel_pch_thermal 0000:00:12.0: CPU-PCH is cool [49C] after 30700 ms delay 3. PCH still overheats after the overall cooling timeout [ 2250.157487] intel_pch_thermal 0000:00:12.0: CPU-PCH is hot [60C] after 60000 ms delay. S0ix might fail 4. PCH aborts cooling because of wakeup event detected during the delay [ 1933.639509] intel_pch_thermal 0000:00:12.0: Wakeup event detected, abort cooling Signed-off-by: Zhang Rui Tested-by: Sumeet Pawnikar --- drivers/thermal/intel/intel_pch_thermal.c | 31 +++++++++++++++-------- 1 file changed, 20 insertions(+), 11 deletions(-) diff --git a/drivers/thermal/intel/intel_pch_thermal.c b/drivers/thermal/intel/intel_pch_thermal.c index b7b32e2f5ae2..c1fa2b29b153 100644 --- a/drivers/thermal/intel/intel_pch_thermal.c +++ b/drivers/thermal/intel/intel_pch_thermal.c @@ -197,7 +197,7 @@ static int pch_wpt_get_temp(struct pch_thermal_device *ptd, int *temp) static int pch_wpt_suspend(struct pch_thermal_device *ptd) { u8 tsel; - int pch_delay_cnt = 1; + int pch_delay_cnt = 0; u16 pch_thr_temp, pch_cur_temp; /* Shutdown the thermal sensor if it is not enabled by BIOS */ @@ -233,29 +233,38 @@ static int pch_wpt_suspend(struct pch_thermal_device *ptd) * temperature stays above threshold, notify the warning message * which helps to indentify the reason why S0ix entry was rejected. */ - while (pch_delay_cnt <= delay_cnt) { + while (pch_delay_cnt < delay_cnt) { if (pch_cur_temp < pch_thr_temp) break; - if (pm_wakeup_pending()) - break; + if (pm_wakeup_pending()) { + dev_warn(&ptd->pdev->dev, "Wakeup event detected, abort cooling\n"); + return 0; + } - dev_warn(&ptd->pdev->dev, + pch_delay_cnt++; + dev_dbg(&ptd->pdev->dev, "CPU-PCH current temp [%dC] higher than the threshold temp [%dC], sleep %d times for %d ms duration\n", pch_cur_temp, pch_thr_temp, pch_delay_cnt, delay_timeout); msleep(delay_timeout); /* Read the PCH current temperature for next cycle. */ pch_cur_temp = GET_PCH_TEMP(WPT_TEMP_TSR & readw(ptd->hw_base + WPT_TEMP)); - pch_delay_cnt++; } if (pch_cur_temp >= pch_thr_temp) dev_warn(&ptd->pdev->dev, - "CPU-PCH is hot [%dC] even after delay, continue to suspend. S0ix might fail\n", - pch_cur_temp); - else - dev_info(&ptd->pdev->dev, - "CPU-PCH is cool [%dC], continue to suspend\n", pch_cur_temp); + "CPU-PCH is hot [%dC] after %d ms delay. S0ix might fail\n", + pch_cur_temp, pch_delay_cnt * delay_timeout); + else { + if (pch_delay_cnt) + dev_info(&ptd->pdev->dev, + "CPU-PCH is cool [%dC] after %d ms delay\n", + pch_cur_temp, pch_delay_cnt * delay_timeout); + else + dev_info(&ptd->pdev->dev, + "CPU-PCH is cool [%dC]\n", + pch_cur_temp); + } return 0; } From patchwork Thu May 5 01:58:11 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Zhang, Rui" X-Patchwork-Id: 570105 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 65EF8C43217 for ; Thu, 5 May 2022 01:58:32 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S236927AbiEECCG (ORCPT ); Wed, 4 May 2022 22:02:06 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:38284 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S236720AbiEECCF (ORCPT ); Wed, 4 May 2022 22:02:05 -0400 Received: from mga01.intel.com (mga01.intel.com [192.55.52.88]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 2BADB473BD; Wed, 4 May 2022 18:58:28 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1651715908; x=1683251908; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=7tqwlSchStXbCHGSxqQd/Vgz7WRZ8Bl2Gc0YOUqfvzI=; b=GY3F26P6rm6HbGCcqFCL7OeP2IvNGau+SakvCASh51/fm1XzhAuRuFDx sFdqx1AMHJP6FxshoNaOePUtTcQd53qT17IQA/JSIgLlrcSOne4jrB8uK dsC3tZeH+UwbF3Jj0qd9ze/NMspC+5hwfK3xJVshu4jJNxnplqAhoVO3F 3n3UpNxvcOVIe5pIQ/OrTekCVs6SIuDQb7k2Dzs9nownKZ6LN7Ozo6qKL TKvPbPO6uf6sIAE2QWzkVIQXz7jE5wHl6OK5RUx6cDLJtWiEu+B7Fo9Gg pUYjD3D+7r3bl0vF9PgWjAF2/yPAZLlFGZR2W/i8YGjI4VHes8ZEjroj1 w==; X-IronPort-AV: E=McAfee;i="6400,9594,10337"; a="293153477" X-IronPort-AV: E=Sophos;i="5.91,199,1647327600"; d="scan'208";a="293153477" Received: from orsmga006.jf.intel.com ([10.7.209.51]) by fmsmga101.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 04 May 2022 18:58:27 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.91,199,1647327600"; d="scan'208";a="537106007" Received: from rzhang1-dev.sh.intel.com ([10.239.48.43]) by orsmga006.jf.intel.com with ESMTP; 04 May 2022 18:58:24 -0700 From: Zhang Rui To: rjw@rjwysocki.net, kvalo@kernel.org, alexandre.belloni@bootlin.com Cc: linux-pm@vger.kernel.org, linux-acpi@vger.kernel.org, linux-rtc@vger.kernel.org, linux-wireless@vger.kernel.org, daniel.lezcano@linaro.org, merez@codeaurora.org, mat.jonczyk@o2.pl, sumeet.r.pawnikar@intel.com, len.brown@intel.com Subject: [PATCH 4/7] ACPI: video: improve PM notifer callback Date: Thu, 5 May 2022 09:58:11 +0800 Message-Id: <20220505015814.3727692-5-rui.zhang@intel.com> X-Mailer: git-send-email 2.27.0 In-Reply-To: <20220505015814.3727692-1-rui.zhang@intel.com> References: <20220505015814.3727692-1-rui.zhang@intel.com> MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: linux-pm@vger.kernel.org PM notifier callbacks should check for supported events rather than filter out the unsupported events. So that it won't break when a new event is introduced. No functional change in this patch. Signed-off-by: Zhang Rui Tested-by: Sumeet Pawnikar --- drivers/acpi/acpi_video.c | 31 +++++++++++++++---------------- 1 file changed, 15 insertions(+), 16 deletions(-) diff --git a/drivers/acpi/acpi_video.c b/drivers/acpi/acpi_video.c index 990ff5b0aeb8..e07782b1fbb6 100644 --- a/drivers/acpi/acpi_video.c +++ b/drivers/acpi/acpi_video.c @@ -1707,24 +1707,23 @@ static int acpi_video_resume(struct notifier_block *nb, int i; switch (val) { - case PM_HIBERNATION_PREPARE: - case PM_SUSPEND_PREPARE: - case PM_RESTORE_PREPARE: - return NOTIFY_DONE; - } - - video = container_of(nb, struct acpi_video_bus, pm_nb); - - dev_info(&video->device->dev, "Restoring backlight state\n"); + case PM_POST_HIBERNATION: + case PM_POST_SUSPEND: + case PM_POST_RESTORE: + video = container_of(nb, struct acpi_video_bus, pm_nb); + + dev_info(&video->device->dev, "Restoring backlight state\n"); + + for (i = 0; i < video->attached_count; i++) { + video_device = video->attached_array[i].bind_info; + if (video_device && video_device->brightness) + acpi_video_device_lcd_set_level(video_device, + video_device->brightness->curr); + } - for (i = 0; i < video->attached_count; i++) { - video_device = video->attached_array[i].bind_info; - if (video_device && video_device->brightness) - acpi_video_device_lcd_set_level(video_device, - video_device->brightness->curr); + return NOTIFY_OK; } - - return NOTIFY_OK; + return NOTIFY_DONE; } static acpi_status From patchwork Thu May 5 01:58:12 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Zhang, Rui" X-Patchwork-Id: 570104 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 694ADC43219 for ; Thu, 5 May 2022 01:58:45 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S237126AbiEECCS (ORCPT ); Wed, 4 May 2022 22:02:18 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:38336 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S236972AbiEECCI (ORCPT ); Wed, 4 May 2022 22:02:08 -0400 Received: from mga01.intel.com (mga01.intel.com [192.55.52.88]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id F0A7A4ECD5; Wed, 4 May 2022 18:58:30 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1651715911; x=1683251911; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=5C/etphdoBTSvNC1EwNHN7GPLjVZkwPRthfMpXUb+xQ=; b=cLuIPwoHkWx2m2TT0hBfYdjynRIJJOJmdjnKiPpJAP5uvPyf2ygg6+b7 b1LPUV2Kc2xAeJkK/KkXspgqR0F8o+/MKlTtj7OIVqId9UEw90DHUO7/I HU6wEwm77ZJIUSxubj138oCiSpKZeXxgRTpaSpue5xXZVEfT0ycEme507 AtBdTaDvBB7n9Nx0nG+ZOGxI/4YKgkzv/wW7InOnKCXC7KCdlXKR7l20G 5ujM/4AYUORVB3zPyicXkjyoKQE9EeZcF75n4I6Jyk2OlNqL1nwWpZI/1 Hl3d2FwRaHIEGkV6WsXNs/0v0w0OD/tnJG6h8Q61Ct0Xlrj0R6BFnEU66 w==; X-IronPort-AV: E=McAfee;i="6400,9594,10337"; a="293153484" X-IronPort-AV: E=Sophos;i="5.91,199,1647327600"; d="scan'208";a="293153484" Received: from orsmga006.jf.intel.com ([10.7.209.51]) by fmsmga101.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 04 May 2022 18:58:30 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.91,199,1647327600"; d="scan'208";a="537106016" Received: from rzhang1-dev.sh.intel.com ([10.239.48.43]) by orsmga006.jf.intel.com with ESMTP; 04 May 2022 18:58:27 -0700 From: Zhang Rui To: rjw@rjwysocki.net, kvalo@kernel.org, alexandre.belloni@bootlin.com Cc: linux-pm@vger.kernel.org, linux-acpi@vger.kernel.org, linux-rtc@vger.kernel.org, linux-wireless@vger.kernel.org, daniel.lezcano@linaro.org, merez@codeaurora.org, mat.jonczyk@o2.pl, sumeet.r.pawnikar@intel.com, len.brown@intel.com Subject: [PATCH 5/7] wil6210: remove debug message for unsupported PM event Date: Thu, 5 May 2022 09:58:12 +0800 Message-Id: <20220505015814.3727692-6-rui.zhang@intel.com> X-Mailer: git-send-email 2.27.0 In-Reply-To: <20220505015814.3727692-1-rui.zhang@intel.com> References: <20220505015814.3727692-1-rui.zhang@intel.com> MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: linux-pm@vger.kernel.org Remove the useless debug message for unsupported PM event because it is noop in current code, and it gives a warning when a new event is introduced, which it doesn't care. Signed-off-by: Zhang Rui Tested-by: Sumeet Pawnikar --- drivers/net/wireless/ath/wil6210/pcie_bus.c | 1 - 1 file changed, 1 deletion(-) diff --git a/drivers/net/wireless/ath/wil6210/pcie_bus.c b/drivers/net/wireless/ath/wil6210/pcie_bus.c index ce40d94909ad..1d6c4e926004 100644 --- a/drivers/net/wireless/ath/wil6210/pcie_bus.c +++ b/drivers/net/wireless/ath/wil6210/pcie_bus.c @@ -600,7 +600,6 @@ static int wil6210_pm_notify(struct notifier_block *notify_block, evt); break; default: - wil_dbg_pm(wil, "unhandled notify mode %ld\n", mode); break; } From patchwork Thu May 5 01:58:13 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Zhang, Rui" X-Patchwork-Id: 570894 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 1BA2AC4167E for ; Thu, 5 May 2022 01:58:47 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S237012AbiEECCW (ORCPT ); Wed, 4 May 2022 22:02:22 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:38538 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S237022AbiEECCS (ORCPT ); Wed, 4 May 2022 22:02:18 -0400 Received: from mga01.intel.com (mga01.intel.com [192.55.52.88]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id E04B1517D7; Wed, 4 May 2022 18:58:33 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1651715913; x=1683251913; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=4y+SqlpkERJz24KIBdtwYj/W11USKE8UV94SQY//KAI=; b=O9PMPZAKmqpVI4n5s2+vg6bRtUe4ZqDf7yCNr88Zz6MoXx8XjiN2texa pIrX/H/zd9N9LEl8e0oSl3sK4i4BU5Dfd/sms6hv0kJtQD3LSE3hjL7pc oq409nS2WD+U1lMvtFbVHBemhrCwAdQtzzdR1whvzg3v7QB0o/MCbrHXx qhPKUbIDuLi9gSIpquxpz8toNKzp6R9q/U6R4iECwL7ZyH0fOX7WKdEnd 0Q2SnO/vpZf4p3Xt8AYvlSwrrcwc+/Vz9uCYizhxZPGeJmCCVPkH14996 8/wHXJWbBNIeU+w52OJHYtqPj7EQe1yUNsD1k4uDGm00dKm76f9GOBMts A==; X-IronPort-AV: E=McAfee;i="6400,9594,10337"; a="293153497" X-IronPort-AV: E=Sophos;i="5.91,199,1647327600"; d="scan'208";a="293153497" Received: from orsmga006.jf.intel.com ([10.7.209.51]) by fmsmga101.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 04 May 2022 18:58:33 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.91,199,1647327600"; d="scan'208";a="537106028" Received: from rzhang1-dev.sh.intel.com ([10.239.48.43]) by orsmga006.jf.intel.com with ESMTP; 04 May 2022 18:58:30 -0700 From: Zhang Rui To: rjw@rjwysocki.net, kvalo@kernel.org, alexandre.belloni@bootlin.com Cc: linux-pm@vger.kernel.org, linux-acpi@vger.kernel.org, linux-rtc@vger.kernel.org, linux-wireless@vger.kernel.org, daniel.lezcano@linaro.org, merez@codeaurora.org, mat.jonczyk@o2.pl, sumeet.r.pawnikar@intel.com, len.brown@intel.com Subject: [PATCH 6/7] PM: suspend: introduce PM_SUSPEND_LATE event Date: Thu, 5 May 2022 09:58:13 +0800 Message-Id: <20220505015814.3727692-7-rui.zhang@intel.com> X-Mailer: git-send-email 2.27.0 In-Reply-To: <20220505015814.3727692-1-rui.zhang@intel.com> References: <20220505015814.3727692-1-rui.zhang@intel.com> MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: linux-pm@vger.kernel.org In some cases, special handling is needed after the .suspend_noirq phase. Introduce a new suspend event PM_SUSPEND_LATE and call the notifier chain for this purpose. Signed-off-by: Zhang Rui Tested-by: Sumeet Pawnikar --- include/linux/suspend.h | 1 + kernel/power/suspend.c | 2 ++ 2 files changed, 3 insertions(+) diff --git a/include/linux/suspend.h b/include/linux/suspend.h index 300273ff40cc..01ec171e8f60 100644 --- a/include/linux/suspend.h +++ b/include/linux/suspend.h @@ -477,6 +477,7 @@ static inline int is_hibernate_resume_dev(dev_t dev) { return 0; } #define PM_POST_SUSPEND 0x0004 /* Suspend finished */ #define PM_RESTORE_PREPARE 0x0005 /* Going to restore a saved image */ #define PM_POST_RESTORE 0x0006 /* Restore failed */ +#define PM_SUSPEND_LATE 0x0007 /* Late suspend phase */ extern struct mutex system_transition_mutex; diff --git a/kernel/power/suspend.c b/kernel/power/suspend.c index 6fcdee7e87a5..3c662acc908f 100644 --- a/kernel/power/suspend.c +++ b/kernel/power/suspend.c @@ -415,6 +415,8 @@ static int suspend_enter(suspend_state_t state, bool *wakeup) if (suspend_test(TEST_PLATFORM)) goto Platform_wake; + pm_notifier_call_chain(PM_SUSPEND_LATE); + if (state == PM_SUSPEND_TO_IDLE) { s2idle_loop(); goto Platform_wake; From patchwork Thu May 5 01:58:14 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Zhang, Rui" X-Patchwork-Id: 570895 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 39FE8C43217 for ; Thu, 5 May 2022 01:58:45 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S236972AbiEECCU (ORCPT ); Wed, 4 May 2022 22:02:20 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:38524 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S236879AbiEECCS (ORCPT ); Wed, 4 May 2022 22:02:18 -0400 Received: from mga01.intel.com (mga01.intel.com [192.55.52.88]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 3C14251E4F; Wed, 4 May 2022 18:58:37 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1651715917; x=1683251917; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=5JGo0CUXEeDd0hKD63fYj2DEOqA2I95e7owhFGJ3cD0=; b=T2vi7lviGPNuzJvBAs+HON3xp/9sCWSnLTDimeia0D56KrotSEV/osNb cSmPXn9jx54NpSw9Z/xa0wZlefRSSsxmLNzQc0cuJSHUPIf84XCQk2wlW Y1W+ITpjRceo7oJbyYnxUWma9Ux7IsMXEg+kCqK3xVOngKBlexFeHSnPd WYLEo3dv4ud/1r5DW6is32jnywbQKSZCsU+pnxbwO/yF+6euoSCfdissl aLRU9OLGvSG0cD44ahEv0bqg5VVUYI7uDI5EQXqwNfERfHGCzABWIaN4c AAavDzmW/fEr0Vznirer6G/oq7LbWPn3WRYZuAHazalNtvkaBMfBgAQ7l Q==; X-IronPort-AV: E=McAfee;i="6400,9594,10337"; a="293153507" X-IronPort-AV: E=Sophos;i="5.91,199,1647327600"; d="scan'208";a="293153507" Received: from orsmga006.jf.intel.com ([10.7.209.51]) by fmsmga101.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 04 May 2022 18:58:36 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.91,199,1647327600"; d="scan'208";a="537106061" Received: from rzhang1-dev.sh.intel.com ([10.239.48.43]) by orsmga006.jf.intel.com with ESMTP; 04 May 2022 18:58:33 -0700 From: Zhang Rui To: rjw@rjwysocki.net, kvalo@kernel.org, alexandre.belloni@bootlin.com Cc: linux-pm@vger.kernel.org, linux-acpi@vger.kernel.org, linux-rtc@vger.kernel.org, linux-wireless@vger.kernel.org, daniel.lezcano@linaro.org, merez@codeaurora.org, mat.jonczyk@o2.pl, sumeet.r.pawnikar@intel.com, len.brown@intel.com Subject: [PATCH 7/7] rtc: cmos: Add suspend/resume endurance testing hook Date: Thu, 5 May 2022 09:58:14 +0800 Message-Id: <20220505015814.3727692-8-rui.zhang@intel.com> X-Mailer: git-send-email 2.27.0 In-Reply-To: <20220505015814.3727692-1-rui.zhang@intel.com> References: <20220505015814.3727692-1-rui.zhang@intel.com> MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: linux-pm@vger.kernel.org Automated suspend/resume testing uses the RTC for wakeup. A short rtcwake period is desirable, so that more suspend/resume cycles can be completed, while the machine is available for testing. But if too short a wake interval is specified, the event can occur, while still suspending, and then no event wakes the suspended system until the user notices that testing has stalled, and manually intervenes. Here we add a hook to the rtc-cmos driver to a) remove the alarm timer in the beginning of suspend, if there is any b) arm the wakeup in PM notifier callback, which is in the very late stage before the system really suspends The remaining part of suspend is usually measured under 10 ms, and so arming the timer at this point could be as fast as the minimum time of 1-second. But there is a 2nd race. The RTC has 1-second granularity, and unless you are timing the timer with a higher resolution timer, there is no telling if the current time + 1 will occur immediately, or a full second in the future. And so 2-seconds is the safest minimum: Run 1,000 s2idle cycles with (max of) 2 second wakeup period: # echo 2 > /sys/module/rtc_cmos/parameters/rtc_wake_override_sec # sleepgraph.py -m freeze -multi 1000 0 -skiphtml -gzip Clear the timer override, to not interfere with subsequent real use of the machine's suspend/resume feature: # echo 0 > /sys/module/rtc_cmos/parameters/rtc_wake_override_sec Originally-by: Len Brown Signed-off-by: Zhang Rui Tested-by: Sumeet Pawnikar --- drivers/rtc/interface.c | 1 + drivers/rtc/rtc-cmos.c | 45 +++++++++++++++++++++++++++++++++++++++++ 2 files changed, 46 insertions(+) diff --git a/drivers/rtc/interface.c b/drivers/rtc/interface.c index 9edd662c69ac..fb93aa2dc99c 100644 --- a/drivers/rtc/interface.c +++ b/drivers/rtc/interface.c @@ -1020,6 +1020,7 @@ void rtc_timer_cancel(struct rtc_device *rtc, struct rtc_timer *timer) rtc_timer_remove(rtc, timer); mutex_unlock(&rtc->ops_lock); } +EXPORT_SYMBOL_GPL(rtc_timer_cancel); /** * rtc_read_offset - Read the amount of rtc offset in parts per billion diff --git a/drivers/rtc/rtc-cmos.c b/drivers/rtc/rtc-cmos.c index 7c006c2b125f..9590c40fa9d8 100644 --- a/drivers/rtc/rtc-cmos.c +++ b/drivers/rtc/rtc-cmos.c @@ -32,6 +32,7 @@ #include #include #include +#include #include #include #include @@ -70,6 +71,9 @@ static inline int cmos_use_acpi_alarm(void) } #endif +static int rtc_wake_override_sec; +module_param(rtc_wake_override_sec, int, 0644); + struct cmos_rtc { struct rtc_device *rtc; struct device *dev; @@ -89,6 +93,7 @@ struct cmos_rtc { u8 century; struct rtc_wkalrm saved_wkalrm; + struct notifier_block pm_nb; }; /* both platform and pnp busses use negative numbers for invalid irqs */ @@ -744,6 +749,42 @@ static irqreturn_t cmos_interrupt(int irq, void *p) return IRQ_NONE; } +static int cmos_pm_notify(struct notifier_block *nb, unsigned long mode, void *_unused) +{ + struct cmos_rtc *cmos = container_of(nb, struct cmos_rtc, pm_nb); + struct rtc_device *rtc = cmos->rtc; + unsigned long now; + struct rtc_wkalrm alm; + + if (rtc_wake_override_sec == 0) + return NOTIFY_OK; + + switch (mode) { + case PM_SUSPEND_PREPARE: + /* + * Cancel the timer to make sure it won't fire + * before rtc is rearmed later. + */ + rtc_timer_cancel(rtc, &rtc->aie_timer); + break; + case PM_SUSPEND_LATE: + if (rtc_read_time(rtc, &alm.time)) + return NOTIFY_BAD; + + now = rtc_tm_to_time64(&alm.time); + memset(&alm, 0, sizeof(alm)); + rtc_time64_to_tm(now + rtc_wake_override_sec, &alm.time); + alm.enabled = true; + if (rtc_set_alarm(rtc, &alm)) + return NOTIFY_BAD; + if (cmos->wake_on) + cmos->wake_on(cmos->dev); + break; + } + + return NOTIFY_OK; +} + #ifdef CONFIG_PNP #define INITSECTION @@ -937,6 +978,9 @@ cmos_do_probe(struct device *dev, struct resource *ports, int rtc_irq) nvmem_cfg.size, use_hpet_alarm() ? ", hpet irqs" : ""); + cmos_rtc.pm_nb.notifier_call = cmos_pm_notify; + register_pm_notifier(&cmos_rtc.pm_nb); + return 0; cleanup2: @@ -965,6 +1009,7 @@ static void cmos_do_remove(struct device *dev) struct cmos_rtc *cmos = dev_get_drvdata(dev); struct resource *ports; + unregister_pm_notifier(&cmos_rtc.pm_nb); cmos_do_shutdown(cmos->irq); if (is_valid_irq(cmos->irq)) {