diff options
Diffstat (limited to 'drivers/net/ethernet/broadcom/bnx2x/bnx2x_link.c')
| -rw-r--r-- | drivers/net/ethernet/broadcom/bnx2x/bnx2x_link.c | 18 | 
1 files changed, 11 insertions, 7 deletions
diff --git a/drivers/net/ethernet/broadcom/bnx2x/bnx2x_link.c b/drivers/net/ethernet/broadcom/bnx2x/bnx2x_link.c index 77ebae0ac64..0283f343b0d 100644 --- a/drivers/net/ethernet/broadcom/bnx2x/bnx2x_link.c +++ b/drivers/net/ethernet/broadcom/bnx2x/bnx2x_link.c @@ -13437,13 +13437,7 @@ static void bnx2x_check_kr2_wa(struct link_params *params,  {  	struct bnx2x *bp = params->bp;  	u16 base_page, next_page, not_kr2_device, lane; -	int sigdet = bnx2x_warpcore_get_sigdet(phy, params); - -	if (!sigdet) { -		if (!(vars->link_attr_sync & LINK_ATTR_SYNC_KR2_ENABLE)) -			bnx2x_kr2_recovery(params, vars, phy); -		return; -	} +	int sigdet;  	/* Once KR2 was disabled, wait 5 seconds before checking KR2 recovery  	 * since some switches tend to reinit the AN process and clear the @@ -13454,6 +13448,16 @@ static void bnx2x_check_kr2_wa(struct link_params *params,  		vars->check_kr2_recovery_cnt--;  		return;  	} + +	sigdet = bnx2x_warpcore_get_sigdet(phy, params); +	if (!sigdet) { +		if (!(vars->link_attr_sync & LINK_ATTR_SYNC_KR2_ENABLE)) { +			bnx2x_kr2_recovery(params, vars, phy); +			DP(NETIF_MSG_LINK, "No sigdet\n"); +		} +		return; +	} +  	lane = bnx2x_get_warpcore_lane(phy, params);  	CL22_WR_OVER_CL45(bp, phy, MDIO_REG_BANK_AER_BLOCK,  			  MDIO_AER_BLOCK_AER_REG, lane);  |