e1000: FIX: firmware handover bits
authorBruce Allan <bruce.w.allan@intel.com>
Tue, 6 Mar 2007 16:57:24 +0000 (08:57 -0800)
committerJeff Garzik <jeff@garzik.org>
Thu, 26 Apr 2007 06:22:41 +0000 (02:22 -0400)
Upon code inspection it was spotted that the firmware handover bit get/set
mismatched, which may have resulted in management issues on PCI-E
adapters. Setting them correctly may fix some management issues such
as arp routing etc.

Signed-off-by: Auke Kok <auke-jan.h.kok@intel.com>
Signed-off-by: Bruce Allan <bruce.w.allan@intel.com>
Signed-off-by: Jeff Garzik <jeff@garzik.org>
drivers/net/e1000/e1000_main.c

index f777d37..dd66f88 100644 (file)
@@ -409,25 +409,21 @@ e1000_release_hw_control(struct e1000_adapter *adapter)
 {
        uint32_t ctrl_ext;
        uint32_t swsm;
-       uint32_t extcnf;
 
        /* Let firmware taken over control of h/w */
        switch (adapter->hw.mac_type) {
-       case e1000_82571:
-       case e1000_82572:
-       case e1000_80003es2lan:
-               ctrl_ext = E1000_READ_REG(&adapter->hw, CTRL_EXT);
-               E1000_WRITE_REG(&adapter->hw, CTRL_EXT,
-                               ctrl_ext & ~E1000_CTRL_EXT_DRV_LOAD);
-               break;
        case e1000_82573:
                swsm = E1000_READ_REG(&adapter->hw, SWSM);
                E1000_WRITE_REG(&adapter->hw, SWSM,
                                swsm & ~E1000_SWSM_DRV_LOAD);
+               break;
+       case e1000_82571:
+       case e1000_82572:
+       case e1000_80003es2lan:
        case e1000_ich8lan:
-               extcnf = E1000_READ_REG(&adapter->hw, CTRL_EXT);
+               ctrl_ext = E1000_READ_REG(&adapter->hw, CTRL_EXT);
                E1000_WRITE_REG(&adapter->hw, CTRL_EXT,
-                               extcnf & ~E1000_CTRL_EXT_DRV_LOAD);
+                               ctrl_ext & ~E1000_CTRL_EXT_DRV_LOAD);
                break;
        default:
                break;
@@ -450,26 +446,21 @@ e1000_get_hw_control(struct e1000_adapter *adapter)
 {
        uint32_t ctrl_ext;
        uint32_t swsm;
-       uint32_t extcnf;
 
        /* Let firmware know the driver has taken over */
        switch (adapter->hw.mac_type) {
-       case e1000_82571:
-       case e1000_82572:
-       case e1000_80003es2lan:
-               ctrl_ext = E1000_READ_REG(&adapter->hw, CTRL_EXT);
-               E1000_WRITE_REG(&adapter->hw, CTRL_EXT,
-                               ctrl_ext | E1000_CTRL_EXT_DRV_LOAD);
-               break;
        case e1000_82573:
                swsm = E1000_READ_REG(&adapter->hw, SWSM);
                E1000_WRITE_REG(&adapter->hw, SWSM,
                                swsm | E1000_SWSM_DRV_LOAD);
                break;
+       case e1000_82571:
+       case e1000_82572:
+       case e1000_80003es2lan:
        case e1000_ich8lan:
-               extcnf = E1000_READ_REG(&adapter->hw, EXTCNF_CTRL);
-               E1000_WRITE_REG(&adapter->hw, EXTCNF_CTRL,
-                               extcnf | E1000_EXTCNF_CTRL_SWFLAG);
+               ctrl_ext = E1000_READ_REG(&adapter->hw, CTRL_EXT);
+               E1000_WRITE_REG(&adapter->hw, CTRL_EXT,
+                               ctrl_ext | E1000_CTRL_EXT_DRV_LOAD);
                break;
        default:
                break;