Skip to content

Commit

Permalink
e1000: workaround for the ESB2 NIC RX unit issue
Browse files Browse the repository at this point in the history
In rare occasions, ESB2 systems would end up started without the RX
unit being turned on. Add a check that runs post-init to work around
this issue.

Originally from Jesse Brandeburg <jesse.brandeburg@intel.com>,
rewritten to use feature flags by me.

Signed-off-by: Jeff Garzik <jeff@garzik.org>
  • Loading branch information
Jeff Garzik committed Dec 26, 2006
1 parent 72f3ab7 commit bb8e331
Show file tree
Hide file tree
Showing 3 changed files with 14 additions and 0 deletions.
6 changes: 6 additions & 0 deletions drivers/net/e1000/e1000_hw.c
Original file line number Diff line number Diff line change
Expand Up @@ -452,6 +452,12 @@ e1000_set_mac_type(struct e1000_hw *hw)
if (hw->mac_type >= e1000_82571)
hw->has_manc2h = TRUE;

/* In rare occasions, ESB2 systems would end up started without
* the RX unit being turned on.
*/
if (hw->mac_type == e1000_80003es2lan)
hw->rx_needs_kicking = TRUE;

return E1000_SUCCESS;
}

Expand Down
1 change: 1 addition & 0 deletions drivers/net/e1000/e1000_hw.h
Original file line number Diff line number Diff line change
Expand Up @@ -1463,6 +1463,7 @@ struct e1000_hw {
boolean_t kmrn_lock_loss_workaround_disabled;
boolean_t bad_tx_carr_stats_fd;
boolean_t has_manc2h;
boolean_t rx_needs_kicking;
};


Expand Down
7 changes: 7 additions & 0 deletions drivers/net/e1000/e1000_main.c
Original file line number Diff line number Diff line change
Expand Up @@ -2579,6 +2579,13 @@ e1000_watchdog(unsigned long data)
netif_wake_queue(netdev);
mod_timer(&adapter->phy_info_timer, jiffies + 2 * HZ);
adapter->smartspeed = 0;
} else {
/* make sure the receive unit is started */
if (adapter->hw.rx_needs_kicking) {
struct e1000_hw *hw = &adapter->hw;
uint32_t rctl = E1000_READ_REG(hw, RCTL);
E1000_WRITE_REG(hw, RCTL, rctl | E1000_RCTL_EN);
}
}
} else {
if (netif_carrier_ok(netdev)) {
Expand Down

0 comments on commit bb8e331

Please sign in to comment.