e1000: FIX: firmware handover bits
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>
This commit is contained in:
parent
e0aac5a289
commit
31d76442f7
1 changed files with 12 additions and 21 deletions
|
@ -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;
|
||||
|
|
Reference in a new issue