Commit 52280f60 authored by David S. Miller's avatar David S. Miller

Merge branch '1GbE' of git://git.kernel.org/pub/scm/linux/kernel/git/tnguy/next-queue

Tony Nguyen says:

====================
1GbE Intel Wired LAN Driver Updates 2021-03-15

This series contains updates to e1000e only.

Chen Yu says:

The NIC is put in runtime suspend status when there is no cable connected.
As a result, it is safe to keep non-wakeup NIC in runtime suspended during
s2ram because the system does not rely on the NIC plug event nor WoL to
wake up the system. Besides that, unlike the s2idle, s2ram does not need to
manipulate S0ix settings during suspend.
====================
Acked-by: default avatarJakub Kicinski <kuba@kernel.org>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parents f105f26e 3335369b
...@@ -25,6 +25,7 @@ ...@@ -25,6 +25,7 @@
#include <linux/pm_runtime.h> #include <linux/pm_runtime.h>
#include <linux/aer.h> #include <linux/aer.h>
#include <linux/prefetch.h> #include <linux/prefetch.h>
#include <linux/suspend.h>
#include "e1000.h" #include "e1000.h"
...@@ -6918,6 +6919,12 @@ static int __e1000_resume(struct pci_dev *pdev) ...@@ -6918,6 +6919,12 @@ static int __e1000_resume(struct pci_dev *pdev)
return 0; return 0;
} }
static int e1000e_pm_prepare(struct device *dev)
{
return pm_runtime_suspended(dev) &&
pm_suspend_via_firmware();
}
static __maybe_unused int e1000e_pm_suspend(struct device *dev) static __maybe_unused int e1000e_pm_suspend(struct device *dev)
{ {
struct net_device *netdev = pci_get_drvdata(to_pci_dev(dev)); struct net_device *netdev = pci_get_drvdata(to_pci_dev(dev));
...@@ -7626,9 +7633,9 @@ static int e1000_probe(struct pci_dev *pdev, const struct pci_device_id *ent) ...@@ -7626,9 +7633,9 @@ static int e1000_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
e1000_print_device_info(adapter); e1000_print_device_info(adapter);
dev_pm_set_driver_flags(&pdev->dev, DPM_FLAG_NO_DIRECT_COMPLETE); dev_pm_set_driver_flags(&pdev->dev, DPM_FLAG_SMART_PREPARE);
if (pci_dev_run_wake(pdev) && hw->mac.type < e1000_pch_cnp) if (pci_dev_run_wake(pdev) && hw->mac.type != e1000_pch_cnp)
pm_runtime_put_noidle(&pdev->dev); pm_runtime_put_noidle(&pdev->dev);
return 0; return 0;
...@@ -7851,6 +7858,7 @@ MODULE_DEVICE_TABLE(pci, e1000_pci_tbl); ...@@ -7851,6 +7858,7 @@ MODULE_DEVICE_TABLE(pci, e1000_pci_tbl);
static const struct dev_pm_ops e1000_pm_ops = { static const struct dev_pm_ops e1000_pm_ops = {
#ifdef CONFIG_PM_SLEEP #ifdef CONFIG_PM_SLEEP
.prepare = e1000e_pm_prepare,
.suspend = e1000e_pm_suspend, .suspend = e1000e_pm_suspend,
.resume = e1000e_pm_resume, .resume = e1000e_pm_resume,
.freeze = e1000e_pm_freeze, .freeze = e1000e_pm_freeze,
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment