e1000: always call e1000_check_for_link() on e1000_ce4100 MACs.
authorNicolas Schichan <nschichan@freebox.fr>
Sat, 9 Jul 2011 00:24:18 +0000 (00:24 +0000)
committerJeff Kirsher <jeffrey.t.kirsher@intel.com>
Fri, 22 Jul 2011 05:53:41 +0000 (22:53 -0700)
Interrupts about link lost or rx sequence errors are not reported by
the ce4100 hardware, leading to transitions from link UP to link DOWN
never being reported.

Signed-off-by: Nicolas Schichan <nschichan@freebox.fr>
Tested-by: Aaron Brown <aaron.f.brown@intel.com>
Signed-off-by: Jeff Kirsher <jeffrey.t.kirsher@intel.com>
drivers/net/e1000/e1000_main.c

index acaebecf0ca7b201246c61e89ed9c8de29145dcc..f97afda941d727a2b6e2afb8370ac46847c08b4d 100644 (file)
@@ -2402,13 +2402,16 @@ bool e1000_has_link(struct e1000_adapter *adapter)
        struct e1000_hw *hw = &adapter->hw;
        bool link_active = false;
 
-       /* get_link_status is set on LSC (link status) interrupt or
-        * rx sequence error interrupt.  get_link_status will stay
-        * false until the e1000_check_for_link establishes link
-        * for copper adapters ONLY
+       /* get_link_status is set on LSC (link status) interrupt or rx
+        * sequence error interrupt (except on intel ce4100).
+        * get_link_status will stay false until the
+        * e1000_check_for_link establishes link for copper adapters
+        * ONLY
         */
        switch (hw->media_type) {
        case e1000_media_type_copper:
+               if (hw->mac_type == e1000_ce4100)
+                       hw->get_link_status = 1;
                if (hw->get_link_status) {
                        e1000_check_for_link(hw);
                        link_active = !hw->get_link_status;