]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
net: stmmac: loongson: convert to suspend()/resume() methods
authorRussell King (Oracle) <rmk+kernel@armlinux.org.uk>
Mon, 11 Aug 2025 18:51:04 +0000 (19:51 +0100)
committerJakub Kicinski <kuba@kernel.org>
Wed, 13 Aug 2025 01:04:53 +0000 (18:04 -0700)
Convert loongson to use the new suspend() and resume() methods rather
than implementing these in custom wrappers around the main driver's
suspend/resume methods. This allows this driver to use the stmmac
simple PM ops structure.

Signed-off-by: Russell King (Oracle) <rmk+kernel@armlinux.org.uk>
Link: https://patch.msgid.link/E1ulXbs-008gqy-16@rmk-PC.armlinux.org.uk
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
drivers/net/ethernet/stmicro/stmmac/dwmac-loongson.c

index e1591e6217d4b4802a22ca1c9020cb0402aada91..5769165ee5ba7336b4b2adfc9d1293efd7df55cd 100644 (file)
@@ -521,6 +521,37 @@ static int loongson_dwmac_fix_reset(void *priv, void __iomem *ioaddr)
                                  10000, 2000000);
 }
 
+static int loongson_dwmac_suspend(struct device *dev, void *bsp_priv)
+{
+       struct pci_dev *pdev = to_pci_dev(dev);
+       int ret;
+
+       ret = pci_save_state(pdev);
+       if (ret)
+               return ret;
+
+       pci_disable_device(pdev);
+       pci_wake_from_d3(pdev, true);
+       return 0;
+}
+
+static int loongson_dwmac_resume(struct device *dev, void *bsp_priv)
+{
+       struct pci_dev *pdev = to_pci_dev(dev);
+       int ret;
+
+       pci_restore_state(pdev);
+       pci_set_power_state(pdev, PCI_D0);
+
+       ret = pci_enable_device(pdev);
+       if (ret)
+               return ret;
+
+       pci_set_master(pdev);
+
+       return 0;
+}
+
 static int loongson_dwmac_probe(struct pci_dev *pdev, const struct pci_device_id *id)
 {
        struct plat_stmmacenet_data *plat;
@@ -565,6 +596,8 @@ static int loongson_dwmac_probe(struct pci_dev *pdev, const struct pci_device_id
        plat->bsp_priv = ld;
        plat->setup = loongson_dwmac_setup;
        plat->fix_soc_reset = loongson_dwmac_fix_reset;
+       plat->suspend = loongson_dwmac_suspend;
+       plat->resume = loongson_dwmac_resume;
        ld->dev = &pdev->dev;
        ld->loongson_id = readl(res.addr + GMAC_VERSION) & 0xff;
 
@@ -621,44 +654,6 @@ static void loongson_dwmac_remove(struct pci_dev *pdev)
        pci_disable_device(pdev);
 }
 
-static int __maybe_unused loongson_dwmac_suspend(struct device *dev)
-{
-       struct pci_dev *pdev = to_pci_dev(dev);
-       int ret;
-
-       ret = stmmac_suspend(dev);
-       if (ret)
-               return ret;
-
-       ret = pci_save_state(pdev);
-       if (ret)
-               return ret;
-
-       pci_disable_device(pdev);
-       pci_wake_from_d3(pdev, true);
-       return 0;
-}
-
-static int __maybe_unused loongson_dwmac_resume(struct device *dev)
-{
-       struct pci_dev *pdev = to_pci_dev(dev);
-       int ret;
-
-       pci_restore_state(pdev);
-       pci_set_power_state(pdev, PCI_D0);
-
-       ret = pci_enable_device(pdev);
-       if (ret)
-               return ret;
-
-       pci_set_master(pdev);
-
-       return stmmac_resume(dev);
-}
-
-static SIMPLE_DEV_PM_OPS(loongson_dwmac_pm_ops, loongson_dwmac_suspend,
-                        loongson_dwmac_resume);
-
 static const struct pci_device_id loongson_dwmac_id_table[] = {
        { PCI_DEVICE_DATA(LOONGSON, GMAC1, &loongson_gmac_pci_info) },
        { PCI_DEVICE_DATA(LOONGSON, GMAC2, &loongson_gmac_pci_info) },
@@ -673,7 +668,7 @@ static struct pci_driver loongson_dwmac_driver = {
        .probe = loongson_dwmac_probe,
        .remove = loongson_dwmac_remove,
        .driver = {
-               .pm = &loongson_dwmac_pm_ops,
+               .pm = &stmmac_simple_pm_ops,
        },
 };