aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/net')
-rw-r--r--drivers/net/e1000e/netdev.c22
1 files changed, 21 insertions, 1 deletions
diff --git a/drivers/net/e1000e/netdev.c b/drivers/net/e1000e/netdev.c
index cc0502bbb9ff..ebbb9f061c87 100644
--- a/drivers/net/e1000e/netdev.c
+++ b/drivers/net/e1000e/netdev.c
@@ -4462,7 +4462,27 @@ static int e1000_suspend(struct pci_dev *pdev, pm_message_t state)
4462 4462
4463 pci_disable_device(pdev); 4463 pci_disable_device(pdev);
4464 4464
4465 pci_set_power_state(pdev, pci_choose_state(pdev, state)); 4465 /*
4466 * The pci-e switch on some quad port adapters will report a
4467 * correctable error when the MAC transitions from D0 to D3. To
4468 * prevent this we need to mask off the correctable errors on the
4469 * downstream port of the pci-e switch.
4470 */
4471 if (adapter->flags & FLAG_IS_QUAD_PORT) {
4472 struct pci_dev *us_dev = pdev->bus->self;
4473 int pos = pci_find_capability(us_dev, PCI_CAP_ID_EXP);
4474 u16 devctl;
4475
4476 pci_read_config_word(us_dev, pos + PCI_EXP_DEVCTL, &devctl);
4477 pci_write_config_word(us_dev, pos + PCI_EXP_DEVCTL,
4478 (devctl & ~PCI_EXP_DEVCTL_CERE));
4479
4480 pci_set_power_state(pdev, pci_choose_state(pdev, state));
4481
4482 pci_write_config_word(us_dev, pos + PCI_EXP_DEVCTL, devctl);
4483 } else {
4484 pci_set_power_state(pdev, pci_choose_state(pdev, state));
4485 }
4466 4486
4467 return 0; 4487 return 0;
4468} 4488}