|
@@ -1749,8 +1749,18 @@ static int bnx2x_run_loopback(struct bnx2x *bp, int loopback_mode)
|
|
|
return -EINVAL;
|
|
|
break;
|
|
|
case BNX2X_MAC_LOOPBACK:
|
|
|
- bp->link_params.loopback_mode = CHIP_IS_E3(bp) ?
|
|
|
- LOOPBACK_XMAC : LOOPBACK_BMAC;
|
|
|
+ if (CHIP_IS_E3(bp)) {
|
|
|
+ int cfg_idx = bnx2x_get_link_cfg_idx(bp);
|
|
|
+ if (bp->port.supported[cfg_idx] &
|
|
|
+ (SUPPORTED_10000baseT_Full |
|
|
|
+ SUPPORTED_20000baseMLD2_Full |
|
|
|
+ SUPPORTED_20000baseKR2_Full))
|
|
|
+ bp->link_params.loopback_mode = LOOPBACK_XMAC;
|
|
|
+ else
|
|
|
+ bp->link_params.loopback_mode = LOOPBACK_UMAC;
|
|
|
+ } else
|
|
|
+ bp->link_params.loopback_mode = LOOPBACK_BMAC;
|
|
|
+
|
|
|
bnx2x_phy_init(&bp->link_params, &bp->link_vars);
|
|
|
break;
|
|
|
default:
|