Commit 786e9a5f authored by Alexander Duyck's avatar Alexander Duyck Committed by Jeff Kirsher

ixgbe: Make ixgbe_fc_autoneg return void and always set current_mode

This change makes it so that ixgbe_fc_autoneg is a void and always sets the
current_mode.  Previously if the link was down we would return an error,
however there is no harm in simply treating a link down case as a case in
which autoneg simply failed.  This allows us to rely on the return value of
the ixgbe_fc_enable call now since there should be no cases where it
returns an error that would normally be ignored.
Signed-off-by: default avatarAlexander Duyck <alexander.h.duyck@intel.com>
Tested-by: default avatarRoss Brattain <ross.b.brattain@intel.com>
Signed-off-by: default avatarJeff Kirsher <jeffrey.t.kirsher@intel.com>
parent d0bfcdfd
...@@ -363,9 +363,7 @@ static s32 ixgbe_fc_enable_82598(struct ixgbe_hw *hw, s32 packetbuf_num) ...@@ -363,9 +363,7 @@ static s32 ixgbe_fc_enable_82598(struct ixgbe_hw *hw, s32 packetbuf_num)
} }
/* Negotiate the fc mode to use */ /* Negotiate the fc mode to use */
ret_val = ixgbe_fc_autoneg(hw); ixgbe_fc_autoneg(hw);
if (ret_val == IXGBE_ERR_FLOW_CONTROL)
goto out;
/* Disable any previous flow control settings */ /* Disable any previous flow control settings */
fctrl_reg = IXGBE_READ_REG(hw, IXGBE_FCTRL); fctrl_reg = IXGBE_READ_REG(hw, IXGBE_FCTRL);
......
...@@ -1940,9 +1940,7 @@ s32 ixgbe_fc_enable_generic(struct ixgbe_hw *hw, s32 packetbuf_num) ...@@ -1940,9 +1940,7 @@ s32 ixgbe_fc_enable_generic(struct ixgbe_hw *hw, s32 packetbuf_num)
#endif /* CONFIG_DCB */ #endif /* CONFIG_DCB */
/* Negotiate the fc mode to use */ /* Negotiate the fc mode to use */
ret_val = ixgbe_fc_autoneg(hw); ixgbe_fc_autoneg(hw);
if (ret_val == IXGBE_ERR_FLOW_CONTROL)
goto out;
/* Disable any previous flow control settings */ /* Disable any previous flow control settings */
mflcn_reg = IXGBE_READ_REG(hw, IXGBE_MFLCN); mflcn_reg = IXGBE_READ_REG(hw, IXGBE_MFLCN);
...@@ -2051,15 +2049,12 @@ s32 ixgbe_fc_enable_generic(struct ixgbe_hw *hw, s32 packetbuf_num) ...@@ -2051,15 +2049,12 @@ s32 ixgbe_fc_enable_generic(struct ixgbe_hw *hw, s32 packetbuf_num)
* Compares our advertised flow control capabilities to those advertised by * Compares our advertised flow control capabilities to those advertised by
* our link partner, and determines the proper flow control mode to use. * our link partner, and determines the proper flow control mode to use.
**/ **/
s32 ixgbe_fc_autoneg(struct ixgbe_hw *hw) void ixgbe_fc_autoneg(struct ixgbe_hw *hw)
{ {
s32 ret_val = IXGBE_ERR_FC_NOT_NEGOTIATED; s32 ret_val = IXGBE_ERR_FC_NOT_NEGOTIATED;
ixgbe_link_speed speed; ixgbe_link_speed speed;
bool link_up; bool link_up;
if (hw->fc.disable_fc_autoneg)
goto out;
/* /*
* AN should have completed when the cable was plugged in. * AN should have completed when the cable was plugged in.
* Look for reasons to bail out. Bail out if: * Look for reasons to bail out. Bail out if:
...@@ -2069,11 +2064,12 @@ s32 ixgbe_fc_autoneg(struct ixgbe_hw *hw) ...@@ -2069,11 +2064,12 @@ s32 ixgbe_fc_autoneg(struct ixgbe_hw *hw)
* Since we're being called from an LSC, link is already known to be up. * Since we're being called from an LSC, link is already known to be up.
* So use link_up_wait_to_complete=false. * So use link_up_wait_to_complete=false.
*/ */
if (hw->fc.disable_fc_autoneg)
goto out;
hw->mac.ops.check_link(hw, &speed, &link_up, false); hw->mac.ops.check_link(hw, &speed, &link_up, false);
if (!link_up) { if (!link_up)
ret_val = IXGBE_ERR_FLOW_CONTROL;
goto out; goto out;
}
switch (hw->phy.media_type) { switch (hw->phy.media_type) {
/* Autoneg flow control on fiber adapters */ /* Autoneg flow control on fiber adapters */
...@@ -2104,7 +2100,6 @@ s32 ixgbe_fc_autoneg(struct ixgbe_hw *hw) ...@@ -2104,7 +2100,6 @@ s32 ixgbe_fc_autoneg(struct ixgbe_hw *hw)
hw->fc.fc_was_autonegged = false; hw->fc.fc_was_autonegged = false;
hw->fc.current_mode = hw->fc.requested_mode; hw->fc.current_mode = hw->fc.requested_mode;
} }
return ret_val;
} }
/** /**
...@@ -2116,7 +2111,7 @@ s32 ixgbe_fc_autoneg(struct ixgbe_hw *hw) ...@@ -2116,7 +2111,7 @@ s32 ixgbe_fc_autoneg(struct ixgbe_hw *hw)
static s32 ixgbe_fc_autoneg_fiber(struct ixgbe_hw *hw) static s32 ixgbe_fc_autoneg_fiber(struct ixgbe_hw *hw)
{ {
u32 pcs_anadv_reg, pcs_lpab_reg, linkstat; u32 pcs_anadv_reg, pcs_lpab_reg, linkstat;
s32 ret_val; s32 ret_val = IXGBE_ERR_FC_NOT_NEGOTIATED;
/* /*
* On multispeed fiber at 1g, bail out if * On multispeed fiber at 1g, bail out if
...@@ -2126,10 +2121,8 @@ static s32 ixgbe_fc_autoneg_fiber(struct ixgbe_hw *hw) ...@@ -2126,10 +2121,8 @@ static s32 ixgbe_fc_autoneg_fiber(struct ixgbe_hw *hw)
linkstat = IXGBE_READ_REG(hw, IXGBE_PCS1GLSTA); linkstat = IXGBE_READ_REG(hw, IXGBE_PCS1GLSTA);
if ((!!(linkstat & IXGBE_PCS1GLSTA_AN_COMPLETE) == 0) || if ((!!(linkstat & IXGBE_PCS1GLSTA_AN_COMPLETE) == 0) ||
(!!(linkstat & IXGBE_PCS1GLSTA_AN_TIMED_OUT) == 1)) { (!!(linkstat & IXGBE_PCS1GLSTA_AN_TIMED_OUT) == 1))
ret_val = IXGBE_ERR_FC_NOT_NEGOTIATED;
goto out; goto out;
}
pcs_anadv_reg = IXGBE_READ_REG(hw, IXGBE_PCS1GANA); pcs_anadv_reg = IXGBE_READ_REG(hw, IXGBE_PCS1GANA);
pcs_lpab_reg = IXGBE_READ_REG(hw, IXGBE_PCS1GANLP); pcs_lpab_reg = IXGBE_READ_REG(hw, IXGBE_PCS1GANLP);
...@@ -2153,7 +2146,7 @@ static s32 ixgbe_fc_autoneg_fiber(struct ixgbe_hw *hw) ...@@ -2153,7 +2146,7 @@ static s32 ixgbe_fc_autoneg_fiber(struct ixgbe_hw *hw)
static s32 ixgbe_fc_autoneg_backplane(struct ixgbe_hw *hw) static s32 ixgbe_fc_autoneg_backplane(struct ixgbe_hw *hw)
{ {
u32 links2, anlp1_reg, autoc_reg, links; u32 links2, anlp1_reg, autoc_reg, links;
s32 ret_val; s32 ret_val = IXGBE_ERR_FC_NOT_NEGOTIATED;
/* /*
* On backplane, bail out if * On backplane, bail out if
...@@ -2161,22 +2154,14 @@ static s32 ixgbe_fc_autoneg_backplane(struct ixgbe_hw *hw) ...@@ -2161,22 +2154,14 @@ static s32 ixgbe_fc_autoneg_backplane(struct ixgbe_hw *hw)
* - we are 82599 and link partner is not AN enabled * - we are 82599 and link partner is not AN enabled
*/ */
links = IXGBE_READ_REG(hw, IXGBE_LINKS); links = IXGBE_READ_REG(hw, IXGBE_LINKS);
if ((links & IXGBE_LINKS_KX_AN_COMP) == 0) { if ((links & IXGBE_LINKS_KX_AN_COMP) == 0)
hw->fc.fc_was_autonegged = false;
hw->fc.current_mode = hw->fc.requested_mode;
ret_val = IXGBE_ERR_FC_NOT_NEGOTIATED;
goto out; goto out;
}
if (hw->mac.type == ixgbe_mac_82599EB) { if (hw->mac.type == ixgbe_mac_82599EB) {
links2 = IXGBE_READ_REG(hw, IXGBE_LINKS2); links2 = IXGBE_READ_REG(hw, IXGBE_LINKS2);
if ((links2 & IXGBE_LINKS2_AN_SUPPORTED) == 0) { if ((links2 & IXGBE_LINKS2_AN_SUPPORTED) == 0)
hw->fc.fc_was_autonegged = false;
hw->fc.current_mode = hw->fc.requested_mode;
ret_val = IXGBE_ERR_FC_NOT_NEGOTIATED;
goto out; goto out;
} }
}
/* /*
* Read the 10g AN autoc and LP ability registers and resolve * Read the 10g AN autoc and LP ability registers and resolve
* local flow control settings accordingly * local flow control settings accordingly
......
...@@ -78,7 +78,7 @@ s32 ixgbe_disable_rx_buff_generic(struct ixgbe_hw *hw); ...@@ -78,7 +78,7 @@ s32 ixgbe_disable_rx_buff_generic(struct ixgbe_hw *hw);
s32 ixgbe_enable_rx_buff_generic(struct ixgbe_hw *hw); s32 ixgbe_enable_rx_buff_generic(struct ixgbe_hw *hw);
s32 ixgbe_enable_rx_dma_generic(struct ixgbe_hw *hw, u32 regval); s32 ixgbe_enable_rx_dma_generic(struct ixgbe_hw *hw, u32 regval);
s32 ixgbe_fc_enable_generic(struct ixgbe_hw *hw, s32 packetbuf_num); s32 ixgbe_fc_enable_generic(struct ixgbe_hw *hw, s32 packetbuf_num);
s32 ixgbe_fc_autoneg(struct ixgbe_hw *hw); void ixgbe_fc_autoneg(struct ixgbe_hw *hw);
s32 ixgbe_validate_mac_addr(u8 *mac_addr); s32 ixgbe_validate_mac_addr(u8 *mac_addr);
s32 ixgbe_acquire_swfw_sync(struct ixgbe_hw *hw, u16 mask); s32 ixgbe_acquire_swfw_sync(struct ixgbe_hw *hw, u16 mask);
......
...@@ -2981,7 +2981,6 @@ struct ixgbe_info { ...@@ -2981,7 +2981,6 @@ struct ixgbe_info {
#define IXGBE_ERR_OVERTEMP -26 #define IXGBE_ERR_OVERTEMP -26
#define IXGBE_ERR_FC_NOT_NEGOTIATED -27 #define IXGBE_ERR_FC_NOT_NEGOTIATED -27
#define IXGBE_ERR_FC_NOT_SUPPORTED -28 #define IXGBE_ERR_FC_NOT_SUPPORTED -28
#define IXGBE_ERR_FLOW_CONTROL -29
#define IXGBE_ERR_SFP_SETUP_NOT_COMPLETE -30 #define IXGBE_ERR_SFP_SETUP_NOT_COMPLETE -30
#define IXGBE_ERR_PBA_SECTION -31 #define IXGBE_ERR_PBA_SECTION -31
#define IXGBE_ERR_INVALID_ARGUMENT -32 #define IXGBE_ERR_INVALID_ARGUMENT -32
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment