From 0eac6ce78b9c9d28a509858fdb408feadf467c7e Mon Sep 17 00:00:00 2001 From: Bjarne von Horn Date: Thu, 30 Nov 2023 09:52:08 +0100 Subject: [PATCH] add suspend/resume support for igc --- devices/igc/igc_main-6.4-ethercat.c | 29 ++++++++++++++++++----------- devices/igc/igc_main-6.6-ethercat.c | 29 ++++++++++++++++++----------- 2 files changed, 36 insertions(+), 22 deletions(-) diff --git a/devices/igc/igc_main-6.4-ethercat.c b/devices/igc/igc_main-6.4-ethercat.c index 7133cec5..7c6b5dc8 100644 --- a/devices/igc/igc_main-6.4-ethercat.c +++ b/devices/igc/igc_main-6.4-ethercat.c @@ -7024,11 +7024,15 @@ static int __igc_shutdown(struct pci_dev *pdev, bool *enable_wake, u32 ctrl, rctl, status; bool wake; - rtnl_lock(); - netif_device_detach(netdev); + if (adapter->ecdev) { + ecdev_close(adapter->ecdev); + } else { + rtnl_lock(); + netif_device_detach(netdev); - if (netif_running(netdev)) - __igc_close(netdev, true); + if (netif_running(netdev)) + __igc_close(netdev, true); + } igc_ptp_suspend(adapter); @@ -7161,14 +7165,17 @@ static int __maybe_unused igc_resume(struct device *dev) wr32(IGC_WUS, ~0); - rtnl_lock(); - if (!err && netif_running(netdev)) - err = __igc_open(netdev, true); - - if (!err) - netif_device_attach(netdev); - rtnl_unlock(); + if (adapter->ecdev) { + ecdev_open(adapter->ecdev); + } else { + rtnl_lock(); + if (!err && netif_running(netdev)) + err = __igc_open(netdev, true); + if (!err) + netif_device_attach(netdev); + rtnl_unlock(); + } return err; } diff --git a/devices/igc/igc_main-6.6-ethercat.c b/devices/igc/igc_main-6.6-ethercat.c index b8634382..7faa0df1 100644 --- a/devices/igc/igc_main-6.6-ethercat.c +++ b/devices/igc/igc_main-6.6-ethercat.c @@ -7164,11 +7164,15 @@ static int __igc_shutdown(struct pci_dev *pdev, bool *enable_wake, u32 ctrl, rctl, status; bool wake; - rtnl_lock(); - netif_device_detach(netdev); + if (adapter->ecdev) { + ecdev_close(adapter->ecdev); + } else { + rtnl_lock(); + netif_device_detach(netdev); - if (netif_running(netdev)) - __igc_close(netdev, true); + if (netif_running(netdev)) + __igc_close(netdev, true); + } igc_ptp_suspend(adapter); @@ -7301,14 +7305,17 @@ static int __maybe_unused igc_resume(struct device *dev) wr32(IGC_WUS, ~0); - rtnl_lock(); - if (!err && netif_running(netdev)) - err = __igc_open(netdev, true); - - if (!err) - netif_device_attach(netdev); - rtnl_unlock(); + if (adapter->ecdev) { + ecdev_open(adapter->ecdev); + } else { + rtnl_lock(); + if (!err && netif_running(netdev)) + err = __igc_open(netdev, true); + if (!err) + netif_device_attach(netdev); + rtnl_unlock(); + } return err; }