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: Alexander Duyck <alexander.h.duyck@intel.com> Tested-by: Ross Brattain <ross.b.brattain@intel.com> Signed-off-by: Jeff Kirsher <jeffrey.t.kirsher@intel.com>
This commit is contained in:
committed by
Jeff Kirsher
parent
d0bfcdfd48
commit
786e9a5f59
@@ -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)
|
|||||||
|
|
||||||
#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 @@ out:
|
|||||||
* 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)
|
|||||||
* 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.
|
||||||
*/
|
*/
|
||||||
hw->mac.ops.check_link(hw, &speed, &link_up, false);
|
if (hw->fc.disable_fc_autoneg)
|
||||||
if (!link_up) {
|
goto out;
|
||||||
ret_val = IXGBE_ERR_FLOW_CONTROL;
|
|
||||||
|
hw->mac.ops.check_link(hw, &speed, &link_up, false);
|
||||||
|
if (!link_up)
|
||||||
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 @@ out:
|
|||||||
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 @@ out:
|
|||||||
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)
|
|||||||
|
|
||||||
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 @@ out:
|
|||||||
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,21 +2154,13 @@ 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
|
||||||
|
|||||||
@@ -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 {
|
|||||||
#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
|
||||||
|
|||||||
Reference in New Issue
Block a user