lkml.org 
[lkml]   [2022]   [Jan]   [24]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 5.16 0318/1039] mt76: mt7921: fix possible resume failure
    Date
    From: Sean Wang <sean.wang@mediatek.com>

    [ Upstream commit 5375001bb4ce22801bf3bb566cc3e67d2d3a5dc0 ]

    Fix the possible resume failure due to mt76_connac_mcu_set_hif_suspend
    timeout.

    That is because clearing the flag pm->suspended too early opened up a race
    window, where mt7921_poll_tx/rx scheduled a ps_work to put the device in
    doze mode, that is unexpected for the device is being resumed from the
    suspend state and would make the remaining MCU comamnds in resume handler
    failed to execute.

    Fixes: ffa1bf97425b ("mt76: mt7921: introduce PM support")
    Co-developed-by: YN Chen <YN.Chen@mediatek.com>
    Signed-off-by: YN Chen <YN.Chen@mediatek.com>
    Signed-off-by: Sean Wang <sean.wang@mediatek.com>
    Signed-off-by: Felix Fietkau <nbd@nbd.name>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    ---
    drivers/net/wireless/mediatek/mt76/mt7921/pci.c | 9 +++++++--
    1 file changed, 7 insertions(+), 2 deletions(-)

    diff --git a/drivers/net/wireless/mediatek/mt76/mt7921/pci.c b/drivers/net/wireless/mediatek/mt76/mt7921/pci.c
    index c29dde23d4ab1..40186e6cd865e 100644
    --- a/drivers/net/wireless/mediatek/mt76/mt7921/pci.c
    +++ b/drivers/net/wireless/mediatek/mt76/mt7921/pci.c
    @@ -313,7 +313,6 @@ static int mt7921_pci_resume(struct pci_dev *pdev)
    struct mt76_connac_pm *pm = &dev->pm;
    int i, err;

    - pm->suspended = false;
    err = pci_set_power_state(pdev, PCI_D0);
    if (err)
    return err;
    @@ -351,7 +350,13 @@ static int mt7921_pci_resume(struct pci_dev *pdev)
    if (!pm->ds_enable)
    mt76_connac_mcu_set_deep_sleep(&dev->mt76, false);

    - return mt76_connac_mcu_set_hif_suspend(mdev, false);
    + err = mt76_connac_mcu_set_hif_suspend(mdev, false);
    + if (err)
    + return err;
    +
    + pm->suspended = false;
    +
    + return err;
    }
    #endif /* CONFIG_PM */

    --
    2.34.1


    \
     
     \ /
      Last update: 2022-01-24 23:10    [W:4.042 / U:0.288 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site