diff options
author | Bruce Allan <bruce.w.allan@intel.com> | 2007-03-06 11:57:24 -0500 |
---|---|---|
committer | Jeff Garzik <jeff@garzik.org> | 2007-04-26 02:22:41 -0400 |
commit | 31d76442f719af834718cbf5bf866370acc36093 (patch) | |
tree | ea786c88ac7b0ed4a2ae2d7341f96e8387077418 /drivers/net/e1000 | |
parent | e0aac5a289b1dacbc94bd9ae8c449bcdf9ab508c (diff) |
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>
Diffstat (limited to 'drivers/net/e1000')
-rw-r--r-- | drivers/net/e1000/e1000_main.c | 33 |
1 files changed, 12 insertions, 21 deletions
diff --git a/drivers/net/e1000/e1000_main.c b/drivers/net/e1000/e1000_main.c index f777d37d8e66..dd66f8816b2f 100644 --- a/drivers/net/e1000/e1000_main.c +++ b/drivers/net/e1000/e1000_main.c | |||
@@ -409,25 +409,21 @@ e1000_release_hw_control(struct e1000_adapter *adapter) | |||
409 | { | 409 | { |
410 | uint32_t ctrl_ext; | 410 | uint32_t ctrl_ext; |
411 | uint32_t swsm; | 411 | uint32_t swsm; |
412 | uint32_t extcnf; | ||
413 | 412 | ||
414 | /* Let firmware taken over control of h/w */ | 413 | /* Let firmware taken over control of h/w */ |
415 | switch (adapter->hw.mac_type) { | 414 | switch (adapter->hw.mac_type) { |
416 | case e1000_82571: | ||
417 | case e1000_82572: | ||
418 | case e1000_80003es2lan: | ||
419 | ctrl_ext = E1000_READ_REG(&adapter->hw, CTRL_EXT); | ||
420 | E1000_WRITE_REG(&adapter->hw, CTRL_EXT, | ||
421 | ctrl_ext & ~E1000_CTRL_EXT_DRV_LOAD); | ||
422 | break; | ||
423 | case e1000_82573: | 415 | case e1000_82573: |
424 | swsm = E1000_READ_REG(&adapter->hw, SWSM); | 416 | swsm = E1000_READ_REG(&adapter->hw, SWSM); |
425 | E1000_WRITE_REG(&adapter->hw, SWSM, | 417 | E1000_WRITE_REG(&adapter->hw, SWSM, |
426 | swsm & ~E1000_SWSM_DRV_LOAD); | 418 | swsm & ~E1000_SWSM_DRV_LOAD); |
419 | break; | ||
420 | case e1000_82571: | ||
421 | case e1000_82572: | ||
422 | case e1000_80003es2lan: | ||
427 | case e1000_ich8lan: | 423 | case e1000_ich8lan: |
428 | extcnf = E1000_READ_REG(&adapter->hw, CTRL_EXT); | 424 | ctrl_ext = E1000_READ_REG(&adapter->hw, CTRL_EXT); |
429 | E1000_WRITE_REG(&adapter->hw, CTRL_EXT, | 425 | E1000_WRITE_REG(&adapter->hw, CTRL_EXT, |
430 | extcnf & ~E1000_CTRL_EXT_DRV_LOAD); | 426 | ctrl_ext & ~E1000_CTRL_EXT_DRV_LOAD); |
431 | break; | 427 | break; |
432 | default: | 428 | default: |
433 | break; | 429 | break; |
@@ -450,26 +446,21 @@ e1000_get_hw_control(struct e1000_adapter *adapter) | |||
450 | { | 446 | { |
451 | uint32_t ctrl_ext; | 447 | uint32_t ctrl_ext; |
452 | uint32_t swsm; | 448 | uint32_t swsm; |
453 | uint32_t extcnf; | ||
454 | 449 | ||
455 | /* Let firmware know the driver has taken over */ | 450 | /* Let firmware know the driver has taken over */ |
456 | switch (adapter->hw.mac_type) { | 451 | switch (adapter->hw.mac_type) { |
457 | case e1000_82571: | ||
458 | case e1000_82572: | ||
459 | case e1000_80003es2lan: | ||
460 | ctrl_ext = E1000_READ_REG(&adapter->hw, CTRL_EXT); | ||
461 | E1000_WRITE_REG(&adapter->hw, CTRL_EXT, | ||
462 | ctrl_ext | E1000_CTRL_EXT_DRV_LOAD); | ||
463 | break; | ||
464 | case e1000_82573: | 452 | case e1000_82573: |
465 | swsm = E1000_READ_REG(&adapter->hw, SWSM); | 453 | swsm = E1000_READ_REG(&adapter->hw, SWSM); |
466 | E1000_WRITE_REG(&adapter->hw, SWSM, | 454 | E1000_WRITE_REG(&adapter->hw, SWSM, |
467 | swsm | E1000_SWSM_DRV_LOAD); | 455 | swsm | E1000_SWSM_DRV_LOAD); |
468 | break; | 456 | break; |
457 | case e1000_82571: | ||
458 | case e1000_82572: | ||
459 | case e1000_80003es2lan: | ||
469 | case e1000_ich8lan: | 460 | case e1000_ich8lan: |
470 | extcnf = E1000_READ_REG(&adapter->hw, EXTCNF_CTRL); | 461 | ctrl_ext = E1000_READ_REG(&adapter->hw, CTRL_EXT); |
471 | E1000_WRITE_REG(&adapter->hw, EXTCNF_CTRL, | 462 | E1000_WRITE_REG(&adapter->hw, CTRL_EXT, |
472 | extcnf | E1000_EXTCNF_CTRL_SWFLAG); | 463 | ctrl_ext | E1000_CTRL_EXT_DRV_LOAD); |
473 | break; | 464 | break; |
474 | default: | 465 | default: |
475 | break; | 466 | break; |