Patch "ath10k: fix core PCI suspend when WoWLAN is supported but disabled" has been added to the 4.14-stable tree
Subsystems (2)
This is a note to let you know that I've just added the patch titled
ath10k: fix core PCI suspend when WoWLAN is supported but disabled
to the 4.14-stable tree which can be found at:
http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary
The filename of the patch is:
ath10k-fix-core-pci-suspend-when-wowlan-is-supported-but-disabled.patch
and it can be found in the queue-4.14 subdirectory.
If you, or anyone else, feels it should not be added to the stable tree, please let <[email protected]> know about it.
Quoted 1 line
From foo@baz Mon Dec 18 13:29:00 CET 2017
From: Brian Norris <[email protected]>
Date: Wed, 4 Oct 2017 12:22:55 +0300
Subject: ath10k: fix core PCI suspend when WoWLAN is supported but disabled
From: Brian Norris <[email protected]>
[ Upstream commit 96378bd2c6cda5f04d0f6da2cd35d4670a982c38 ]
For devices where the FW supports WoWLAN but user-space has not configured it, we don't do any PCI-specific suspend/resume operations, because mac80211 doesn't call drv_suspend() when !wowlan. This has particularly bad effects for some platforms, because we don't stop the power-save timer, and if this timer goes off after the PCI controller has suspended the link, Bad Things will happen.
Commit 32faa3f0ee50 ("ath10k: add the PCI PM core suspend/resume ops") got some of this right, in that it understood there was a problem on non-WoWLAN firmware. But it forgot the $subject case.
Fix this by moving all the PCI driver suspend/resume logic exclusively into the driver PM hooks. This shouldn't affect WoWLAN support much (this just gets executed later on).
I would just as well kill the entirety of ath10k_hif_suspend(), as it's not even implemented on the USB or SDIO drivers. I expect that we don't need the callback, except to return "supported" (i.e., 0) or "not supported" (i.e., -EOPNOTSUPP).
--- drivers/net/wireless/ath/ath10k/pci.c | 24 ++++++++++++++---------- 1 file changed, 14 insertions(+), 10 deletions(-)
drivers/net/wireless/ath/ath10k/pci.c +14 -10
@@ -2581,6 +2581,12 @@ void ath10k_pci_hif_power_down(struct atstatic int ath10k_pci_hif_suspend (struct ath10k *ar) { +/* Nothing to do; the important stuff is in the driver suspend. */ +return 0 ; +} + +static int ath10k_pci_suspend (struct ath10k *ar) +{/* The grace timer can still be counting down and ar->ps_awake be true. * It is known that the device may be asleep after resuming regardless * of the SoC powersave state before suspending. Hence make sure the
@@ -2593,6 +2599,12 @@ static int ath10k_pci_hif_suspend(structstatic int ath10k_pci_hif_resume (struct ath10k *ar) { +/* Nothing to do; the important stuff is in the driver resume. */ +return 0 ; +} + +static int ath10k_pci_resume (struct ath10k *ar) +{struct ath10k_pci *ar_pci =ath10k_pci_priv (ar);struct pci_dev *pdev = ar_pci->pdev;u32 val;
@@ -3401,11 +3413,7 @@ static __maybe_unused int ath10k_pci_pm_struct ath10k *ar =dev_get_drvdata (dev);int ret; -if (test_bit (ATH10K_FW_FEATURE_WOWLAN_SUPPORT , - ar->running_fw->fw_file.fw_features)) -return 0 ; - - ret =ath10k_hif_suspend (ar); + ret =ath10k_pci_suspend (ar);if (ret)ath10k_warn (ar,"failed to suspend hif: %d\n" , ret);
@@ -3417,11 +3425,7 @@ static __maybe_unused int ath10k_pci_pm_struct ath10k *ar =dev_get_drvdata (dev);int ret; -if (test_bit (ATH10K_FW_FEATURE_WOWLAN_SUPPORT , - ar->running_fw->fw_file.fw_features)) -return 0 ; - - ret =ath10k_hif_resume (ar); + ret =ath10k_pci_resume (ar);if (ret)ath10k_warn (ar,"failed to resume hif: %d\n" , ret);
Patches currently in stable-queue which might be from [email protected] are
queue-4.14/ath10k-fix-core-pci-suspend-when-wowlan-is-supported-but-disabled.patch queue-4.14/ath10k-fix-build-errors-with-config_pm.patch