bnx2x: loopback test failure
A link change interrupt might be queued and activated after the loopback was set and it will cause the loopback to fail. The PHY lock should be kept until the loopback test is over. That implies that the bnx2x_test_link should used within the loopback function and not bnx2x_wait_for_link since that function also takes the PHY link Signed-off-by: Eilon Greenstein <eilong@broadcom.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
5650d9d4cb
commit
3910c8ae44
1 changed files with 7 additions and 6 deletions
|
@ -8750,18 +8750,17 @@ static int bnx2x_run_loopback(struct bnx2x *bp, int loopback_mode, u8 link_up)
|
|||
|
||||
if (loopback_mode == BNX2X_MAC_LOOPBACK) {
|
||||
bp->link_params.loopback_mode = LOOPBACK_BMAC;
|
||||
bnx2x_acquire_phy_lock(bp);
|
||||
bnx2x_phy_init(&bp->link_params, &bp->link_vars);
|
||||
bnx2x_release_phy_lock(bp);
|
||||
|
||||
} else if (loopback_mode == BNX2X_PHY_LOOPBACK) {
|
||||
u16 cnt = 1000;
|
||||
bp->link_params.loopback_mode = LOOPBACK_XGXS_10;
|
||||
bnx2x_acquire_phy_lock(bp);
|
||||
bnx2x_phy_init(&bp->link_params, &bp->link_vars);
|
||||
bnx2x_release_phy_lock(bp);
|
||||
/* wait until link state is restored */
|
||||
bnx2x_wait_for_link(bp, link_up);
|
||||
|
||||
if (link_up)
|
||||
while (cnt-- && bnx2x_test_link(&bp->link_params,
|
||||
&bp->link_vars))
|
||||
msleep(10);
|
||||
} else
|
||||
return -EINVAL;
|
||||
|
||||
|
@ -8867,6 +8866,7 @@ static int bnx2x_test_loopback(struct bnx2x *bp, u8 link_up)
|
|||
return BNX2X_LOOPBACK_FAILED;
|
||||
|
||||
bnx2x_netif_stop(bp, 1);
|
||||
bnx2x_acquire_phy_lock(bp);
|
||||
|
||||
if (bnx2x_run_loopback(bp, BNX2X_MAC_LOOPBACK, link_up)) {
|
||||
DP(NETIF_MSG_PROBE, "MAC loopback failed\n");
|
||||
|
@ -8878,6 +8878,7 @@ static int bnx2x_test_loopback(struct bnx2x *bp, u8 link_up)
|
|||
rc |= BNX2X_PHY_LOOPBACK_FAILED;
|
||||
}
|
||||
|
||||
bnx2x_release_phy_lock(bp);
|
||||
bnx2x_netif_start(bp);
|
||||
|
||||
return rc;
|
||||
|
|
Loading…
Reference in a new issue