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:
@@ -409,25 +409,21 @@ e1000_release_hw_control(struct e1000_adapter *adapter)
|
|||||||
{
|
{
|
||||||
uint32_t ctrl_ext;
|
uint32_t ctrl_ext;
|
||||||
uint32_t swsm;
|
uint32_t swsm;
|
||||||
uint32_t extcnf;
|
|
||||||
|
|
||||||
/* Let firmware taken over control of h/w */
|
/* Let firmware taken over control of h/w */
|
||||||
switch (adapter->hw.mac_type) {
|
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:
|
case e1000_82573:
|
||||||
swsm = E1000_READ_REG(&adapter->hw, SWSM);
|
swsm = E1000_READ_REG(&adapter->hw, SWSM);
|
||||||
E1000_WRITE_REG(&adapter->hw, SWSM,
|
E1000_WRITE_REG(&adapter->hw, SWSM,
|
||||||
swsm & ~E1000_SWSM_DRV_LOAD);
|
swsm & ~E1000_SWSM_DRV_LOAD);
|
||||||
|
break;
|
||||||
|
case e1000_82571:
|
||||||
|
case e1000_82572:
|
||||||
|
case e1000_80003es2lan:
|
||||||
case e1000_ich8lan:
|
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,
|
E1000_WRITE_REG(&adapter->hw, CTRL_EXT,
|
||||||
extcnf & ~E1000_CTRL_EXT_DRV_LOAD);
|
ctrl_ext & ~E1000_CTRL_EXT_DRV_LOAD);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
@@ -450,26 +446,21 @@ e1000_get_hw_control(struct e1000_adapter *adapter)
|
|||||||
{
|
{
|
||||||
uint32_t ctrl_ext;
|
uint32_t ctrl_ext;
|
||||||
uint32_t swsm;
|
uint32_t swsm;
|
||||||
uint32_t extcnf;
|
|
||||||
|
|
||||||
/* Let firmware know the driver has taken over */
|
/* Let firmware know the driver has taken over */
|
||||||
switch (adapter->hw.mac_type) {
|
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:
|
case e1000_82573:
|
||||||
swsm = E1000_READ_REG(&adapter->hw, SWSM);
|
swsm = E1000_READ_REG(&adapter->hw, SWSM);
|
||||||
E1000_WRITE_REG(&adapter->hw, SWSM,
|
E1000_WRITE_REG(&adapter->hw, SWSM,
|
||||||
swsm | E1000_SWSM_DRV_LOAD);
|
swsm | E1000_SWSM_DRV_LOAD);
|
||||||
break;
|
break;
|
||||||
|
case e1000_82571:
|
||||||
|
case e1000_82572:
|
||||||
|
case e1000_80003es2lan:
|
||||||
case e1000_ich8lan:
|
case e1000_ich8lan:
|
||||||
extcnf = E1000_READ_REG(&adapter->hw, EXTCNF_CTRL);
|
ctrl_ext = E1000_READ_REG(&adapter->hw, CTRL_EXT);
|
||||||
E1000_WRITE_REG(&adapter->hw, EXTCNF_CTRL,
|
E1000_WRITE_REG(&adapter->hw, CTRL_EXT,
|
||||||
extcnf | E1000_EXTCNF_CTRL_SWFLAG);
|
ctrl_ext | E1000_CTRL_EXT_DRV_LOAD);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
|
Reference in New Issue
Block a user