OSDN Git Service

mt76: mt7921: fix suspend/resume sequence
authorSean Wang <sean.wang@mediatek.com>
Fri, 19 Feb 2021 17:28:44 +0000 (18:28 +0100)
committerFelix Fietkau <nbd@nbd.name>
Sun, 11 Apr 2021 22:01:20 +0000 (00:01 +0200)
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>
drivers/net/wireless/mediatek/mt76/mt7921/pci.c

index 33ed952..7e040c3 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 |