diff options
author | Jesse Brandeburg <jesse.brandeburg@intel.com> | 2008-08-04 20:21:40 -0400 |
---|---|---|
committer | Jeff Garzik <jgarzik@redhat.com> | 2008-08-07 01:54:53 -0400 |
commit | c43bc57e5d72932b5e64bc5e4e7741bedbcaaf5f (patch) | |
tree | 8663f7d9aee9328f38c7761b43aa114c35301ec3 /drivers/net/e1000e/netdev.c | |
parent | 10aa4c0447c308738dade244e23036f2fcbfb140 (diff) |
e1000e: fix drv load issues
a few people seem to have problems maintaining gigabit link
and it was root caused to an interaction between the managability
firmware on the host and the driver, not communicating.
The form of communication they use is the drv_load bit.
Signed-off-by: Jesse Brandeburg <jesse.brandeburg@intel.com>
Signed-off-by: Jeff Kirsher <jeffrey.t.kirsher@intel.com>
Signed-off-by: Jeff Garzik <jgarzik@redhat.com>
Diffstat (limited to 'drivers/net/e1000e/netdev.c')
-rw-r--r-- | drivers/net/e1000e/netdev.c | 28 |
1 files changed, 12 insertions, 16 deletions
diff --git a/drivers/net/e1000e/netdev.c b/drivers/net/e1000e/netdev.c index 589e54246ad2..18f076c01eea 100644 --- a/drivers/net/e1000e/netdev.c +++ b/drivers/net/e1000e/netdev.c | |||
@@ -2444,7 +2444,7 @@ void e1000e_reset(struct e1000_adapter *adapter) | |||
2444 | * For parts with AMT enabled, let the firmware know | 2444 | * For parts with AMT enabled, let the firmware know |
2445 | * that the network interface is in control | 2445 | * that the network interface is in control |
2446 | */ | 2446 | */ |
2447 | if ((adapter->flags & FLAG_HAS_AMT) && e1000e_check_mng_mode(hw)) | 2447 | if (adapter->flags & FLAG_HAS_AMT) |
2448 | e1000_get_hw_control(adapter); | 2448 | e1000_get_hw_control(adapter); |
2449 | 2449 | ||
2450 | ew32(WUC, 0); | 2450 | ew32(WUC, 0); |
@@ -2634,8 +2634,7 @@ static int e1000_open(struct net_device *netdev) | |||
2634 | * If AMT is enabled, let the firmware know that the network | 2634 | * If AMT is enabled, let the firmware know that the network |
2635 | * interface is now open | 2635 | * interface is now open |
2636 | */ | 2636 | */ |
2637 | if ((adapter->flags & FLAG_HAS_AMT) && | 2637 | if (adapter->flags & FLAG_HAS_AMT) |
2638 | e1000e_check_mng_mode(&adapter->hw)) | ||
2639 | e1000_get_hw_control(adapter); | 2638 | e1000_get_hw_control(adapter); |
2640 | 2639 | ||
2641 | /* | 2640 | /* |
@@ -2713,8 +2712,7 @@ static int e1000_close(struct net_device *netdev) | |||
2713 | * If AMT is enabled, let the firmware know that the network | 2712 | * If AMT is enabled, let the firmware know that the network |
2714 | * interface is now closed | 2713 | * interface is now closed |
2715 | */ | 2714 | */ |
2716 | if ((adapter->flags & FLAG_HAS_AMT) && | 2715 | if (adapter->flags & FLAG_HAS_AMT) |
2717 | e1000e_check_mng_mode(&adapter->hw)) | ||
2718 | e1000_release_hw_control(adapter); | 2716 | e1000_release_hw_control(adapter); |
2719 | 2717 | ||
2720 | return 0; | 2718 | return 0; |
@@ -4030,7 +4028,7 @@ static int e1000_resume(struct pci_dev *pdev) | |||
4030 | * is up. For all other cases, let the f/w know that the h/w is now | 4028 | * is up. For all other cases, let the f/w know that the h/w is now |
4031 | * under the control of the driver. | 4029 | * under the control of the driver. |
4032 | */ | 4030 | */ |
4033 | if (!(adapter->flags & FLAG_HAS_AMT) || !e1000e_check_mng_mode(&adapter->hw)) | 4031 | if (!(adapter->flags & FLAG_HAS_AMT)) |
4034 | e1000_get_hw_control(adapter); | 4032 | e1000_get_hw_control(adapter); |
4035 | 4033 | ||
4036 | return 0; | 4034 | return 0; |
@@ -4149,8 +4147,7 @@ static void e1000_io_resume(struct pci_dev *pdev) | |||
4149 | * is up. For all other cases, let the f/w know that the h/w is now | 4147 | * is up. For all other cases, let the f/w know that the h/w is now |
4150 | * under the control of the driver. | 4148 | * under the control of the driver. |
4151 | */ | 4149 | */ |
4152 | if (!(adapter->flags & FLAG_HAS_AMT) || | 4150 | if (!(adapter->flags & FLAG_HAS_AMT)) |
4153 | !e1000e_check_mng_mode(&adapter->hw)) | ||
4154 | e1000_get_hw_control(adapter); | 4151 | e1000_get_hw_control(adapter); |
4155 | 4152 | ||
4156 | } | 4153 | } |
@@ -4505,8 +4502,7 @@ static int __devinit e1000_probe(struct pci_dev *pdev, | |||
4505 | * is up. For all other cases, let the f/w know that the h/w is now | 4502 | * is up. For all other cases, let the f/w know that the h/w is now |
4506 | * under the control of the driver. | 4503 | * under the control of the driver. |
4507 | */ | 4504 | */ |
4508 | if (!(adapter->flags & FLAG_HAS_AMT) || | 4505 | if (!(adapter->flags & FLAG_HAS_AMT)) |
4509 | !e1000e_check_mng_mode(&adapter->hw)) | ||
4510 | e1000_get_hw_control(adapter); | 4506 | e1000_get_hw_control(adapter); |
4511 | 4507 | ||
4512 | /* tell the stack to leave us alone until e1000_open() is called */ | 4508 | /* tell the stack to leave us alone until e1000_open() is called */ |
@@ -4523,19 +4519,19 @@ static int __devinit e1000_probe(struct pci_dev *pdev, | |||
4523 | return 0; | 4519 | return 0; |
4524 | 4520 | ||
4525 | err_register: | 4521 | err_register: |
4526 | err_hw_init: | 4522 | if (!(adapter->flags & FLAG_HAS_AMT)) |
4527 | e1000_release_hw_control(adapter); | 4523 | e1000_release_hw_control(adapter); |
4528 | err_eeprom: | 4524 | err_eeprom: |
4529 | if (!e1000_check_reset_block(&adapter->hw)) | 4525 | if (!e1000_check_reset_block(&adapter->hw)) |
4530 | e1000_phy_hw_reset(&adapter->hw); | 4526 | e1000_phy_hw_reset(&adapter->hw); |
4527 | err_hw_init: | ||
4531 | 4528 | ||
4532 | if (adapter->hw.flash_address) | ||
4533 | iounmap(adapter->hw.flash_address); | ||
4534 | |||
4535 | err_flashmap: | ||
4536 | kfree(adapter->tx_ring); | 4529 | kfree(adapter->tx_ring); |
4537 | kfree(adapter->rx_ring); | 4530 | kfree(adapter->rx_ring); |
4538 | err_sw_init: | 4531 | err_sw_init: |
4532 | if (adapter->hw.flash_address) | ||
4533 | iounmap(adapter->hw.flash_address); | ||
4534 | err_flashmap: | ||
4539 | iounmap(adapter->hw.hw_addr); | 4535 | iounmap(adapter->hw.hw_addr); |
4540 | err_ioremap: | 4536 | err_ioremap: |
4541 | free_netdev(netdev); | 4537 | free_netdev(netdev); |