|
@@ -38,23 +38,23 @@
|
|
|
#define IXGBE_82599_MC_TBL_SIZE 128
|
|
|
#define IXGBE_82599_VFT_TBL_SIZE 128
|
|
|
|
|
|
-static s32 ixgbe_setup_mac_link_multispeed_fiber(struct ixgbe_hw *hw);
|
|
|
-static s32 ixgbe_setup_mac_link_speed_multispeed_fiber(struct ixgbe_hw *hw,
|
|
|
- ixgbe_link_speed speed, bool autoneg,
|
|
|
- bool autoneg_wait_to_complete);
|
|
|
-static s32 ixgbe_setup_mac_link_82599(struct ixgbe_hw *hw);
|
|
|
-static s32 ixgbe_setup_mac_link_speed_82599(struct ixgbe_hw *hw,
|
|
|
- ixgbe_link_speed speed,
|
|
|
- bool autoneg,
|
|
|
- bool autoneg_wait_to_complete);
|
|
|
+s32 ixgbe_setup_mac_link_multispeed_fiber(struct ixgbe_hw *hw,
|
|
|
+ ixgbe_link_speed speed,
|
|
|
+ bool autoneg,
|
|
|
+ bool autoneg_wait_to_complete);
|
|
|
+s32 ixgbe_start_mac_link_82599(struct ixgbe_hw *hw,
|
|
|
+ bool autoneg_wait_to_complete);
|
|
|
+s32 ixgbe_setup_mac_link_82599(struct ixgbe_hw *hw,
|
|
|
+ ixgbe_link_speed speed,
|
|
|
+ bool autoneg,
|
|
|
+ bool autoneg_wait_to_complete);
|
|
|
static s32 ixgbe_get_copper_link_capabilities_82599(struct ixgbe_hw *hw,
|
|
|
ixgbe_link_speed *speed,
|
|
|
bool *autoneg);
|
|
|
-static s32 ixgbe_setup_copper_link_82599(struct ixgbe_hw *hw);
|
|
|
-static s32 ixgbe_setup_copper_link_speed_82599(struct ixgbe_hw *hw,
|
|
|
- ixgbe_link_speed speed,
|
|
|
- bool autoneg,
|
|
|
- bool autoneg_wait_to_complete);
|
|
|
+static s32 ixgbe_setup_copper_link_82599(struct ixgbe_hw *hw,
|
|
|
+ ixgbe_link_speed speed,
|
|
|
+ bool autoneg,
|
|
|
+ bool autoneg_wait_to_complete);
|
|
|
static s32 ixgbe_verify_fw_version_82599(struct ixgbe_hw *hw);
|
|
|
|
|
|
static void ixgbe_init_mac_link_ops_82599(struct ixgbe_hw *hw)
|
|
@@ -62,15 +62,9 @@ static void ixgbe_init_mac_link_ops_82599(struct ixgbe_hw *hw)
|
|
|
struct ixgbe_mac_info *mac = &hw->mac;
|
|
|
if (hw->phy.multispeed_fiber) {
|
|
|
/* Set up dual speed SFP+ support */
|
|
|
- mac->ops.setup_link =
|
|
|
- &ixgbe_setup_mac_link_multispeed_fiber;
|
|
|
- mac->ops.setup_link_speed =
|
|
|
- &ixgbe_setup_mac_link_speed_multispeed_fiber;
|
|
|
+ mac->ops.setup_link = &ixgbe_setup_mac_link_multispeed_fiber;
|
|
|
} else {
|
|
|
- mac->ops.setup_link =
|
|
|
- &ixgbe_setup_mac_link_82599;
|
|
|
- mac->ops.setup_link_speed =
|
|
|
- &ixgbe_setup_mac_link_speed_82599;
|
|
|
+ mac->ops.setup_link = &ixgbe_setup_mac_link_82599;
|
|
|
}
|
|
|
}
|
|
|
|
|
@@ -178,8 +172,6 @@ static s32 ixgbe_init_phy_ops_82599(struct ixgbe_hw *hw)
|
|
|
/* If copper media, overwrite with copper function pointers */
|
|
|
if (mac->ops.get_media_type(hw) == ixgbe_media_type_copper) {
|
|
|
mac->ops.setup_link = &ixgbe_setup_copper_link_82599;
|
|
|
- mac->ops.setup_link_speed =
|
|
|
- &ixgbe_setup_copper_link_speed_82599;
|
|
|
mac->ops.get_link_capabilities =
|
|
|
&ixgbe_get_copper_link_capabilities_82599;
|
|
|
}
|
|
@@ -354,13 +346,15 @@ out:
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
- * ixgbe_setup_mac_link_82599 - Setup MAC link settings
|
|
|
+ * ixgbe_start_mac_link_82599 - Setup MAC link settings
|
|
|
* @hw: pointer to hardware structure
|
|
|
+ * @autoneg_wait_to_complete: true when waiting for completion is needed
|
|
|
*
|
|
|
* Configures link settings based on values in the ixgbe_hw struct.
|
|
|
* Restarts the link. Performs autonegotiation if needed.
|
|
|
**/
|
|
|
-static s32 ixgbe_setup_mac_link_82599(struct ixgbe_hw *hw)
|
|
|
+s32 ixgbe_start_mac_link_82599(struct ixgbe_hw *hw,
|
|
|
+ bool autoneg_wait_to_complete)
|
|
|
{
|
|
|
u32 autoc_reg;
|
|
|
u32 links_reg;
|
|
@@ -373,7 +367,7 @@ static s32 ixgbe_setup_mac_link_82599(struct ixgbe_hw *hw)
|
|
|
IXGBE_WRITE_REG(hw, IXGBE_AUTOC, autoc_reg);
|
|
|
|
|
|
/* Only poll for autoneg to complete if specified to do so */
|
|
|
- if (hw->phy.autoneg_wait_to_complete) {
|
|
|
+ if (autoneg_wait_to_complete) {
|
|
|
if ((autoc_reg & IXGBE_AUTOC_LMS_MASK) ==
|
|
|
IXGBE_AUTOC_LMS_KX4_KX_KR ||
|
|
|
(autoc_reg & IXGBE_AUTOC_LMS_MASK) ==
|
|
@@ -401,25 +395,7 @@ static s32 ixgbe_setup_mac_link_82599(struct ixgbe_hw *hw)
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
- * ixgbe_setup_mac_link_multispeed_fiber - Setup MAC link settings
|
|
|
- * @hw: pointer to hardware structure
|
|
|
- *
|
|
|
- * Configures link settings based on values in the ixgbe_hw struct.
|
|
|
- * Restarts the link for multi-speed fiber at 1G speed, if link
|
|
|
- * fails at 10G.
|
|
|
- * Performs autonegotiation if needed.
|
|
|
- **/
|
|
|
-static s32 ixgbe_setup_mac_link_multispeed_fiber(struct ixgbe_hw *hw)
|
|
|
-{
|
|
|
- s32 status = 0;
|
|
|
- ixgbe_link_speed link_speed = IXGBE_LINK_SPEED_82599_AUTONEG;
|
|
|
- status = ixgbe_setup_mac_link_speed_multispeed_fiber(hw, link_speed,
|
|
|
- true, true);
|
|
|
- return status;
|
|
|
-}
|
|
|
-
|
|
|
-/**
|
|
|
- * ixgbe_setup_mac_link_speed_multispeed_fiber - Set MAC link speed
|
|
|
+ * ixgbe_setup_mac_link_multispeed_fiber - Set MAC link speed
|
|
|
* @hw: pointer to hardware structure
|
|
|
* @speed: new link speed
|
|
|
* @autoneg: true if autonegotiation enabled
|
|
@@ -427,10 +403,10 @@ static s32 ixgbe_setup_mac_link_multispeed_fiber(struct ixgbe_hw *hw)
|
|
|
*
|
|
|
* Set the link speed in the AUTOC register and restarts link.
|
|
|
**/
|
|
|
-static s32 ixgbe_setup_mac_link_speed_multispeed_fiber(struct ixgbe_hw *hw,
|
|
|
- ixgbe_link_speed speed,
|
|
|
- bool autoneg,
|
|
|
- bool autoneg_wait_to_complete)
|
|
|
+s32 ixgbe_setup_mac_link_multispeed_fiber(struct ixgbe_hw *hw,
|
|
|
+ ixgbe_link_speed speed,
|
|
|
+ bool autoneg,
|
|
|
+ bool autoneg_wait_to_complete)
|
|
|
{
|
|
|
s32 status = 0;
|
|
|
ixgbe_link_speed phy_link_speed;
|
|
@@ -485,10 +461,10 @@ static s32 ixgbe_setup_mac_link_speed_multispeed_fiber(struct ixgbe_hw *hw,
|
|
|
/* Allow module to change analog characteristics (1G->10G) */
|
|
|
msleep(40);
|
|
|
|
|
|
- status = ixgbe_setup_mac_link_speed_82599(hw,
|
|
|
- IXGBE_LINK_SPEED_10GB_FULL,
|
|
|
- autoneg,
|
|
|
- autoneg_wait_to_complete);
|
|
|
+ status = ixgbe_setup_mac_link_82599(hw,
|
|
|
+ IXGBE_LINK_SPEED_10GB_FULL,
|
|
|
+ autoneg,
|
|
|
+ autoneg_wait_to_complete);
|
|
|
if (status != 0)
|
|
|
goto out;
|
|
|
|
|
@@ -539,7 +515,7 @@ static s32 ixgbe_setup_mac_link_speed_multispeed_fiber(struct ixgbe_hw *hw,
|
|
|
/* Allow module to change analog characteristics (10G->1G) */
|
|
|
msleep(40);
|
|
|
|
|
|
- status = ixgbe_setup_mac_link_speed_82599(hw,
|
|
|
+ status = ixgbe_setup_mac_link_82599(hw,
|
|
|
IXGBE_LINK_SPEED_1GB_FULL,
|
|
|
autoneg,
|
|
|
autoneg_wait_to_complete);
|
|
@@ -576,10 +552,10 @@ static s32 ixgbe_setup_mac_link_speed_multispeed_fiber(struct ixgbe_hw *hw,
|
|
|
* single highest speed that the user requested.
|
|
|
*/
|
|
|
if (speedcnt > 1)
|
|
|
- status = ixgbe_setup_mac_link_speed_multispeed_fiber(hw,
|
|
|
- highest_link_speed,
|
|
|
- autoneg,
|
|
|
- autoneg_wait_to_complete);
|
|
|
+ status = ixgbe_setup_mac_link_multispeed_fiber(hw,
|
|
|
+ highest_link_speed,
|
|
|
+ autoneg,
|
|
|
+ autoneg_wait_to_complete);
|
|
|
|
|
|
out:
|
|
|
return status;
|
|
@@ -640,7 +616,7 @@ static s32 ixgbe_check_mac_link_82599(struct ixgbe_hw *hw,
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
- * ixgbe_setup_mac_link_speed_82599 - Set MAC link speed
|
|
|
+ * ixgbe_setup_mac_link_82599 - Set MAC link speed
|
|
|
* @hw: pointer to hardware structure
|
|
|
* @speed: new link speed
|
|
|
* @autoneg: true if autonegotiation enabled
|
|
@@ -648,10 +624,9 @@ static s32 ixgbe_check_mac_link_82599(struct ixgbe_hw *hw,
|
|
|
*
|
|
|
* Set the link speed in the AUTOC register and restarts link.
|
|
|
**/
|
|
|
-static s32 ixgbe_setup_mac_link_speed_82599(struct ixgbe_hw *hw,
|
|
|
- ixgbe_link_speed speed,
|
|
|
- bool autoneg,
|
|
|
- bool autoneg_wait_to_complete)
|
|
|
+s32 ixgbe_setup_mac_link_82599(struct ixgbe_hw *hw,
|
|
|
+ ixgbe_link_speed speed, bool autoneg,
|
|
|
+ bool autoneg_wait_to_complete)
|
|
|
{
|
|
|
s32 status = 0;
|
|
|
u32 autoc = IXGBE_READ_REG(hw, IXGBE_AUTOC);
|
|
@@ -751,26 +726,7 @@ out:
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
- * ixgbe_setup_copper_link_82599 - Setup copper link settings
|
|
|
- * @hw: pointer to hardware structure
|
|
|
- *
|
|
|
- * Restarts the link on PHY and then MAC. Performs autonegotiation if needed.
|
|
|
- **/
|
|
|
-static s32 ixgbe_setup_copper_link_82599(struct ixgbe_hw *hw)
|
|
|
-{
|
|
|
- s32 status;
|
|
|
-
|
|
|
- /* Restart autonegotiation on PHY */
|
|
|
- status = hw->phy.ops.setup_link(hw);
|
|
|
-
|
|
|
- /* Set up MAC */
|
|
|
- ixgbe_setup_mac_link_82599(hw);
|
|
|
-
|
|
|
- return status;
|
|
|
-}
|
|
|
-
|
|
|
-/**
|
|
|
- * ixgbe_setup_copper_link_speed_82599 - Set the PHY autoneg advertised field
|
|
|
+ * ixgbe_setup_copper_link_82599 - Set the PHY autoneg advertised field
|
|
|
* @hw: pointer to hardware structure
|
|
|
* @speed: new link speed
|
|
|
* @autoneg: true if autonegotiation enabled
|
|
@@ -778,10 +734,10 @@ static s32 ixgbe_setup_copper_link_82599(struct ixgbe_hw *hw)
|
|
|
*
|
|
|
* Restarts link on PHY and MAC based on settings passed in.
|
|
|
**/
|
|
|
-static s32 ixgbe_setup_copper_link_speed_82599(struct ixgbe_hw *hw,
|
|
|
- ixgbe_link_speed speed,
|
|
|
- bool autoneg,
|
|
|
- bool autoneg_wait_to_complete)
|
|
|
+static s32 ixgbe_setup_copper_link_82599(struct ixgbe_hw *hw,
|
|
|
+ ixgbe_link_speed speed,
|
|
|
+ bool autoneg,
|
|
|
+ bool autoneg_wait_to_complete)
|
|
|
{
|
|
|
s32 status;
|
|
|
|
|
@@ -789,7 +745,7 @@ static s32 ixgbe_setup_copper_link_speed_82599(struct ixgbe_hw *hw,
|
|
|
status = hw->phy.ops.setup_link_speed(hw, speed, autoneg,
|
|
|
autoneg_wait_to_complete);
|
|
|
/* Set up MAC */
|
|
|
- ixgbe_setup_mac_link_82599(hw);
|
|
|
+ ixgbe_start_mac_link_82599(hw, autoneg_wait_to_complete);
|
|
|
|
|
|
return status;
|
|
|
}
|
|
@@ -2470,7 +2426,6 @@ static struct ixgbe_mac_operations mac_ops_82599 = {
|
|
|
.read_analog_reg8 = &ixgbe_read_analog_reg8_82599,
|
|
|
.write_analog_reg8 = &ixgbe_write_analog_reg8_82599,
|
|
|
.setup_link = &ixgbe_setup_mac_link_82599,
|
|
|
- .setup_link_speed = &ixgbe_setup_mac_link_speed_82599,
|
|
|
.check_link = &ixgbe_check_mac_link_82599,
|
|
|
.get_link_capabilities = &ixgbe_get_link_capabilities_82599,
|
|
|
.led_on = &ixgbe_led_on_generic,
|