Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit cb28ea3b authored by Yaniv Rosner's avatar Yaniv Rosner Committed by David S. Miller
Browse files

bnx2x: Fix KR2 rapid link flap



Check KR2 recovery time at the beginning of the work-around function.

Signed-off-by: default avatarYaniv Rosner <yanivr@broadcom.com>
Signed-off-by: default avatarEilon Greenstein <eilong@broadcom.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 259c9a1f
Loading
Loading
Loading
Loading
+11 −7
Original line number Diff line number Diff line
@@ -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);