igb: make serdes power down available for 82575 in addition to 82576 parts
authorAlexander Duyck <alexander.h.duyck@intel.com>
Thu, 23 Jul 2009 18:07:40 +0000 (18:07 +0000)
committerDavid S. Miller <davem@davemloft.net>
Sun, 26 Jul 2009 16:46:42 +0000 (09:46 -0700)
There was a serdes power down workaround that was originally added for
82576 fiber.  However it has also been found that this workaround is needed
for serdes connections as well.  In addition it is also needed for 82575
serdes so we we need to remove the checks restricting it to 82576.

Signed-off-by: Alexander Duyck <alexander.h.duyck@intel.com>
Signed-off-by: Jeff Kirsher <jeffrey.t.kirsher@intel.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/igb/e1000_82575.c
drivers/net/igb/e1000_82575.h
drivers/net/igb/e1000_mac.c

index bd3efdb95c6471765b65adfd90c967426a501b5e..fa4a76299e00fafbd9a3e446637736eeeba1dcf5 100644 (file)
@@ -866,8 +866,7 @@ void igb_shutdown_fiber_serdes_link_82575(struct e1000_hw *hw)
 {
        u32 reg;
 
-       if (hw->mac.type != e1000_82576 ||
-           hw->phy.media_type != e1000_media_type_internal_serdes)
+       if (hw->phy.media_type != e1000_media_type_internal_serdes)
                return;
 
        /* if the management interface is not enabled, then power down */
@@ -1228,10 +1227,6 @@ out:
 static bool igb_sgmii_active_82575(struct e1000_hw *hw)
 {
        struct e1000_dev_spec_82575 *dev_spec = &hw->dev_spec._82575;
-
-       if (hw->mac.type != e1000_82575 && hw->mac.type != e1000_82576)
-               return false;
-
        return dev_spec->sgmii_active;
 }
 
index 0f16abab256537f91ec4df794c17136f1be925ef..b674417ae06d7b77db7c2998b305c62e3e10948a 100644 (file)
@@ -32,6 +32,11 @@ void igb_update_mc_addr_list(struct e1000_hw*, u8*, u32, u32, u32);
 extern void igb_shutdown_fiber_serdes_link_82575(struct e1000_hw *hw);
 extern void igb_rx_fifo_flush_82575(struct e1000_hw *hw);
 
+#define ID_LED_DEFAULT_82575_SERDES ((ID_LED_DEF1_DEF2 << 12) | \
+                                     (ID_LED_DEF1_DEF2 <<  8) | \
+                                     (ID_LED_DEF1_DEF2 <<  4) | \
+                                     (ID_LED_OFF1_ON2))
+
 #define E1000_RAR_ENTRIES_82575   16
 #define E1000_RAR_ENTRIES_82576   24
 
index 37706d9981e8bf660f582b0dc13de540c00d7809..34f1a370b0688d6ff71aac97f59d65187d2ec297 100644 (file)
@@ -1064,9 +1064,17 @@ static s32 igb_valid_led_default(struct e1000_hw *hw, u16 *data)
                goto out;
        }
 
-       if (*data == ID_LED_RESERVED_0000 || *data == ID_LED_RESERVED_FFFF)
-               *data = ID_LED_DEFAULT;
-
+       if (*data == ID_LED_RESERVED_0000 || *data == ID_LED_RESERVED_FFFF) {
+               switch(hw->phy.media_type) {
+               case e1000_media_type_internal_serdes:
+                       *data = ID_LED_DEFAULT_82575_SERDES;
+                       break;
+               case e1000_media_type_copper:
+               default:
+                       *data = ID_LED_DEFAULT;
+                       break;
+               }
+       }
 out:
        return ret_val;
 }
This page took 0.035018 seconds and 5 git commands to generate.