]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
mt76: mt7921: fix suspend/resume sequence
authorSean Wang <sean.wang@mediatek.com>
Fri, 19 Feb 2021 17:28:44 +0000 (18:28 +0100)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Fri, 14 May 2021 08:52:51 +0000 (10:52 +0200)
[ Upstream commit 5e30931494b4940ba74fa5796ca0b6d7e4c84e88 ]

Any pcie access should happen in pci D0 state and we should give ownership
back to the device at the end of the suspend procedure.

Fixes: 1d8efc741df80 ("mt76: mt7921: introduce Runtime PM support")
Signed-off-by: Sean Wang <sean.wang@mediatek.com>
Signed-off-by: Lorenzo Bianconi <lorenzo@kernel.org>
Signed-off-by: Felix Fietkau <nbd@nbd.name>
Signed-off-by: Sasha Levin <sashal@kernel.org>
drivers/net/wireless/mediatek/mt76/mt7921/pci.c

index 5570b4a5053145c64a4208ab2a628fe6dbcef722..c747022f764201f5cd23a12c5d3a66bbedc57a6c 100644 (file)
@@ -209,12 +209,12 @@ static int mt7921_pci_suspend(struct pci_dev *pdev, pm_message_t state)
        /* disable interrupt */
        mt76_wr(dev, MT_WFDMA0_HOST_INT_ENA, 0);
 
-       pci_save_state(pdev);
-       err = pci_set_power_state(pdev, pci_choose_state(pdev, state));
+       err = mt7921_mcu_fw_pmctrl(dev);
        if (err)
                goto restore;
 
-       err = mt7921_mcu_drv_pmctrl(dev);
+       pci_save_state(pdev);
+       err = pci_set_power_state(pdev, pci_choose_state(pdev, state));
        if (err)
                goto restore;
 
@@ -237,16 +237,16 @@ static int mt7921_pci_resume(struct pci_dev *pdev)
        struct mt7921_dev *dev = container_of(mdev, struct mt7921_dev, mt76);
        int i, err;
 
-       err = mt7921_mcu_fw_pmctrl(dev);
-       if (err < 0)
-               return err;
-
        err = pci_set_power_state(pdev, PCI_D0);
        if (err)
                return err;
 
        pci_restore_state(pdev);
 
+       err = mt7921_mcu_drv_pmctrl(dev);
+       if (err < 0)
+               return err;
+
        /* enable interrupt */
        mt7921_l1_wr(dev, MT_PCIE_MAC_INT_ENABLE, 0xff);
        mt7921_irq_enable(dev, MT_INT_RX_DONE_ALL | MT_INT_TX_DONE_ALL |