Gitweb:     
http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=bb8e3311ef9de8e72f45f910e4a977c313c7009c
Commit:     bb8e3311ef9de8e72f45f910e4a977c313c7009c
Parent:     72f3ab7462f4e153d1e8ac78e379716ad71d6923
Author:     Jeff Garzik <[EMAIL PROTECTED]>
AuthorDate: Fri Dec 15 11:06:17 2006 -0500
Committer:  Jeff Garzik <[EMAIL PROTECTED]>
CommitDate: Tue Dec 26 15:51:30 2006 -0500

    e1000: workaround for the ESB2 NIC RX unit issue
    
    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 <[EMAIL PROTECTED]>,
    rewritten to use feature flags by me.
    
    Signed-off-by: Jeff Garzik <[EMAIL PROTECTED]>
---
 drivers/net/e1000/e1000_hw.c   |    6 ++++++
 drivers/net/e1000/e1000_hw.h   |    1 +
 drivers/net/e1000/e1000_main.c |    7 +++++++
 3 files changed, 14 insertions(+), 0 deletions(-)

diff --git a/drivers/net/e1000/e1000_hw.c b/drivers/net/e1000/e1000_hw.c
index 1ea556e..ea7b371 100644
--- a/drivers/net/e1000/e1000_hw.c
+++ b/drivers/net/e1000/e1000_hw.c
@@ -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;
 }
 
diff --git a/drivers/net/e1000/e1000_hw.h b/drivers/net/e1000/e1000_hw.h
index 18a4ae4..f4d01e1 100644
--- a/drivers/net/e1000/e1000_hw.h
+++ b/drivers/net/e1000/e1000_hw.h
@@ -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;
 };
 
 
diff --git a/drivers/net/e1000/e1000_main.c b/drivers/net/e1000/e1000_main.c
index 9c24949..343eb68 100644
--- a/drivers/net/e1000/e1000_main.c
+++ b/drivers/net/e1000/e1000_main.c
@@ -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)) {
-
To unsubscribe from this list: send the line "unsubscribe git-commits-head" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to