diff options
Diffstat (limited to 'drivers/net/ethernet/broadcom/bnx2x/bnx2x_link.c')
-rw-r--r-- | drivers/net/ethernet/broadcom/bnx2x/bnx2x_link.c | 64 |
1 files changed, 63 insertions, 1 deletions
diff --git a/drivers/net/ethernet/broadcom/bnx2x/bnx2x_link.c b/drivers/net/ethernet/broadcom/bnx2x/bnx2x_link.c index 1663e0b6b5a0..31c5787970db 100644 --- a/drivers/net/ethernet/broadcom/bnx2x/bnx2x_link.c +++ b/drivers/net/ethernet/broadcom/bnx2x/bnx2x_link.c | |||
@@ -10422,6 +10422,28 @@ static void bnx2x_848xx_set_link_led(struct bnx2x_phy *phy, | |||
10422 | MDIO_PMA_DEVAD, | 10422 | MDIO_PMA_DEVAD, |
10423 | MDIO_PMA_REG_8481_LED1_MASK, | 10423 | MDIO_PMA_REG_8481_LED1_MASK, |
10424 | 0x0); | 10424 | 0x0); |
10425 | if (phy->type == | ||
10426 | PORT_HW_CFG_XGXS_EXT_PHY_TYPE_BCM84834) { | ||
10427 | /* Disable MI_INT interrupt before setting LED4 | ||
10428 | * source to constant off. | ||
10429 | */ | ||
10430 | if (REG_RD(bp, NIG_REG_MASK_INTERRUPT_PORT0 + | ||
10431 | params->port*4) & | ||
10432 | NIG_MASK_MI_INT) { | ||
10433 | params->link_flags |= | ||
10434 | LINK_FLAGS_INT_DISABLED; | ||
10435 | |||
10436 | bnx2x_bits_dis( | ||
10437 | bp, | ||
10438 | NIG_REG_MASK_INTERRUPT_PORT0 + | ||
10439 | params->port*4, | ||
10440 | NIG_MASK_MI_INT); | ||
10441 | } | ||
10442 | bnx2x_cl45_write(bp, phy, | ||
10443 | MDIO_PMA_DEVAD, | ||
10444 | MDIO_PMA_REG_8481_SIGNAL_MASK, | ||
10445 | 0x0); | ||
10446 | } | ||
10425 | } | 10447 | } |
10426 | break; | 10448 | break; |
10427 | case LED_MODE_ON: | 10449 | case LED_MODE_ON: |
@@ -10468,6 +10490,28 @@ static void bnx2x_848xx_set_link_led(struct bnx2x_phy *phy, | |||
10468 | MDIO_PMA_DEVAD, | 10490 | MDIO_PMA_DEVAD, |
10469 | MDIO_PMA_REG_8481_LED1_MASK, | 10491 | MDIO_PMA_REG_8481_LED1_MASK, |
10470 | 0x20); | 10492 | 0x20); |
10493 | if (phy->type == | ||
10494 | PORT_HW_CFG_XGXS_EXT_PHY_TYPE_BCM84834) { | ||
10495 | /* Disable MI_INT interrupt before setting LED4 | ||
10496 | * source to constant on. | ||
10497 | */ | ||
10498 | if (REG_RD(bp, NIG_REG_MASK_INTERRUPT_PORT0 + | ||
10499 | params->port*4) & | ||
10500 | NIG_MASK_MI_INT) { | ||
10501 | params->link_flags |= | ||
10502 | LINK_FLAGS_INT_DISABLED; | ||
10503 | |||
10504 | bnx2x_bits_dis( | ||
10505 | bp, | ||
10506 | NIG_REG_MASK_INTERRUPT_PORT0 + | ||
10507 | params->port*4, | ||
10508 | NIG_MASK_MI_INT); | ||
10509 | } | ||
10510 | bnx2x_cl45_write(bp, phy, | ||
10511 | MDIO_PMA_DEVAD, | ||
10512 | MDIO_PMA_REG_8481_SIGNAL_MASK, | ||
10513 | 0x20); | ||
10514 | } | ||
10471 | } | 10515 | } |
10472 | break; | 10516 | break; |
10473 | 10517 | ||
@@ -10532,6 +10576,22 @@ static void bnx2x_848xx_set_link_led(struct bnx2x_phy *phy, | |||
10532 | MDIO_PMA_DEVAD, | 10576 | MDIO_PMA_DEVAD, |
10533 | MDIO_PMA_REG_8481_LINK_SIGNAL, | 10577 | MDIO_PMA_REG_8481_LINK_SIGNAL, |
10534 | val); | 10578 | val); |
10579 | if (phy->type == | ||
10580 | PORT_HW_CFG_XGXS_EXT_PHY_TYPE_BCM84834) { | ||
10581 | /* Restore LED4 source to external link, | ||
10582 | * and re-enable interrupts. | ||
10583 | */ | ||
10584 | bnx2x_cl45_write(bp, phy, | ||
10585 | MDIO_PMA_DEVAD, | ||
10586 | MDIO_PMA_REG_8481_SIGNAL_MASK, | ||
10587 | 0x40); | ||
10588 | if (params->link_flags & | ||
10589 | LINK_FLAGS_INT_DISABLED) { | ||
10590 | bnx2x_link_int_enable(params); | ||
10591 | params->link_flags &= | ||
10592 | ~LINK_FLAGS_INT_DISABLED; | ||
10593 | } | ||
10594 | } | ||
10535 | } | 10595 | } |
10536 | break; | 10596 | break; |
10537 | } | 10597 | } |
@@ -11791,6 +11851,8 @@ static int bnx2x_populate_int_phy(struct bnx2x *bp, u32 shmem_base, u8 port, | |||
11791 | phy->media_type = ETH_PHY_KR; | 11851 | phy->media_type = ETH_PHY_KR; |
11792 | phy->flags |= FLAGS_WC_DUAL_MODE; | 11852 | phy->flags |= FLAGS_WC_DUAL_MODE; |
11793 | phy->supported &= (SUPPORTED_20000baseKR2_Full | | 11853 | phy->supported &= (SUPPORTED_20000baseKR2_Full | |
11854 | SUPPORTED_10000baseT_Full | | ||
11855 | SUPPORTED_1000baseT_Full | | ||
11794 | SUPPORTED_Autoneg | | 11856 | SUPPORTED_Autoneg | |
11795 | SUPPORTED_FIBRE | | 11857 | SUPPORTED_FIBRE | |
11796 | SUPPORTED_Pause | | 11858 | SUPPORTED_Pause | |
@@ -13437,7 +13499,7 @@ void bnx2x_period_func(struct link_params *params, struct link_vars *vars) | |||
13437 | struct bnx2x_phy *phy = ¶ms->phy[INT_PHY]; | 13499 | struct bnx2x_phy *phy = ¶ms->phy[INT_PHY]; |
13438 | bnx2x_set_aer_mmd(params, phy); | 13500 | bnx2x_set_aer_mmd(params, phy); |
13439 | if ((phy->supported & SUPPORTED_20000baseKR2_Full) && | 13501 | if ((phy->supported & SUPPORTED_20000baseKR2_Full) && |
13440 | (phy->speed_cap_mask & SPEED_20000)) | 13502 | (phy->speed_cap_mask & PORT_HW_CFG_SPEED_CAPABILITY_D0_20G)) |
13441 | bnx2x_check_kr2_wa(params, vars, phy); | 13503 | bnx2x_check_kr2_wa(params, vars, phy); |
13442 | bnx2x_check_over_curr(params, vars); | 13504 | bnx2x_check_over_curr(params, vars); |
13443 | if (vars->rx_tx_asic_rst) | 13505 | if (vars->rx_tx_asic_rst) |