lkml.org 
[lkml]   [2017]   [Dec]   [7]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH AUTOSEL for 4.14 133/135] ath10k: fix core PCI suspend when WoWLAN is supported but disabled
    Date
    From: Brian Norris <briannorris@chromium.org>

    [ 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).

    Fixes: 32faa3f0ee50 ("ath10k: add the PCI PM core suspend/resume ops")
    Fixes: 77258d409ce4 ("ath10k: enable pci soc powersaving")
    Signed-off-by: Brian Norris <briannorris@chromium.org>
    Cc: Ryan Hsu <ryanhsu@qti.qualcomm.com>
    Cc: Kalle Valo <kvalo@qca.qualcomm.com>
    Cc: Michal Kazior <michal.kazior@tieto.com>
    Signed-off-by: Kalle Valo <kvalo@qca.qualcomm.com>
    Signed-off-by: Sasha Levin <alexander.levin@verizon.com>
    ---
    drivers/net/wireless/ath/ath10k/pci.c | 24 ++++++++++++++----------
    1 file changed, 14 insertions(+), 10 deletions(-)

    diff --git a/drivers/net/wireless/ath/ath10k/pci.c b/drivers/net/wireless/ath/ath10k/pci.c
    index 195dafb98131..b18a9b690df4 100644
    --- a/drivers/net/wireless/ath/ath10k/pci.c
    +++ b/drivers/net/wireless/ath/ath10k/pci.c
    @@ -2581,6 +2581,12 @@ void ath10k_pci_hif_power_down(struct ath10k *ar)

    static 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(struct ath10k *ar)

    static 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_suspend(struct device *dev)
    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_resume(struct device *dev)
    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);

    --
    2.11.0
    \
     
     \ /
      Last update: 2017-12-07 18:44    [W:5.800 / U:0.204 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site