aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/e1000e/netdev.c
diff options
context:
space:
mode:
authorJesse Brandeburg <jesse.brandeburg@intel.com>2008-08-04 20:21:40 -0400
committerJeff Garzik <jgarzik@redhat.com>2008-08-07 01:54:53 -0400
commitc43bc57e5d72932b5e64bc5e4e7741bedbcaaf5f (patch)
tree8663f7d9aee9328f38c7761b43aa114c35301ec3 /drivers/net/e1000e/netdev.c
parent10aa4c0447c308738dade244e23036f2fcbfb140 (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.c28
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
4525err_register: 4521err_register:
4526err_hw_init: 4522 if (!(adapter->flags & FLAG_HAS_AMT))
4527 e1000_release_hw_control(adapter); 4523 e1000_release_hw_control(adapter);
4528err_eeprom: 4524err_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);
4527err_hw_init:
4531 4528
4532 if (adapter->hw.flash_address)
4533 iounmap(adapter->hw.flash_address);
4534
4535err_flashmap:
4536 kfree(adapter->tx_ring); 4529 kfree(adapter->tx_ring);
4537 kfree(adapter->rx_ring); 4530 kfree(adapter->rx_ring);
4538err_sw_init: 4531err_sw_init:
4532 if (adapter->hw.flash_address)
4533 iounmap(adapter->hw.flash_address);
4534err_flashmap:
4539 iounmap(adapter->hw.hw_addr); 4535 iounmap(adapter->hw.hw_addr);
4540err_ioremap: 4536err_ioremap:
4541 free_netdev(netdev); 4537 free_netdev(netdev);