diff options
-rw-r--r-- | drivers/net/bnx2x_link.c | 132 | ||||
-rw-r--r-- | drivers/net/bnx2x_link.h | 3 | ||||
-rw-r--r-- | drivers/net/bnx2x_main.c | 16 | ||||
-rw-r--r-- | drivers/net/bnx2x_reg.h | 18 |
4 files changed, 104 insertions, 65 deletions
diff --git a/drivers/net/bnx2x_link.c b/drivers/net/bnx2x_link.c index b5964cb7e761..eabdd1155a5a 100644 --- a/drivers/net/bnx2x_link.c +++ b/drivers/net/bnx2x_link.c | |||
@@ -1228,7 +1228,7 @@ static void bnx2x_set_autoneg(struct link_params *params, | |||
1228 | params->phy_addr, | 1228 | params->phy_addr, |
1229 | MDIO_REG_BANK_CL73_USERB0, | 1229 | MDIO_REG_BANK_CL73_USERB0, |
1230 | MDIO_CL73_USERB0_CL73_UCTRL, | 1230 | MDIO_CL73_USERB0_CL73_UCTRL, |
1231 | MDIO_CL73_USERB0_CL73_UCTRL_USTAT1_MUXSEL); | 1231 | 0xe); |
1232 | 1232 | ||
1233 | /* Enable BAM Station Manager*/ | 1233 | /* Enable BAM Station Manager*/ |
1234 | CL45_WR_OVER_CL22(bp, params->port, | 1234 | CL45_WR_OVER_CL22(bp, params->port, |
@@ -1239,29 +1239,25 @@ static void bnx2x_set_autoneg(struct link_params *params, | |||
1239 | MDIO_CL73_USERB0_CL73_BAM_CTRL1_BAM_STATION_MNGR_EN | | 1239 | MDIO_CL73_USERB0_CL73_BAM_CTRL1_BAM_STATION_MNGR_EN | |
1240 | MDIO_CL73_USERB0_CL73_BAM_CTRL1_BAM_NP_AFTER_BP_EN); | 1240 | MDIO_CL73_USERB0_CL73_BAM_CTRL1_BAM_NP_AFTER_BP_EN); |
1241 | 1241 | ||
1242 | /* Merge CL73 and CL37 aneg resolution */ | 1242 | /* Advertise CL73 link speeds */ |
1243 | CL45_RD_OVER_CL22(bp, params->port, | ||
1244 | params->phy_addr, | ||
1245 | MDIO_REG_BANK_CL73_USERB0, | ||
1246 | MDIO_CL73_USERB0_CL73_BAM_CTRL3, | ||
1247 | ®_val); | ||
1248 | |||
1249 | if (params->speed_cap_mask & | ||
1250 | PORT_HW_CFG_SPEED_CAPABILITY_D0_10G) { | ||
1251 | /* Set the CL73 AN speed */ | ||
1252 | CL45_RD_OVER_CL22(bp, params->port, | 1243 | CL45_RD_OVER_CL22(bp, params->port, |
1253 | params->phy_addr, | 1244 | params->phy_addr, |
1254 | MDIO_REG_BANK_CL73_IEEEB1, | 1245 | MDIO_REG_BANK_CL73_IEEEB1, |
1255 | MDIO_CL73_IEEEB1_AN_ADV2, | 1246 | MDIO_CL73_IEEEB1_AN_ADV2, |
1256 | ®_val); | 1247 | ®_val); |
1248 | if (params->speed_cap_mask & | ||
1249 | PORT_HW_CFG_SPEED_CAPABILITY_D0_10G) | ||
1250 | reg_val |= MDIO_CL73_IEEEB1_AN_ADV2_ADVR_10G_KX4; | ||
1251 | if (params->speed_cap_mask & | ||
1252 | PORT_HW_CFG_SPEED_CAPABILITY_D0_1G) | ||
1253 | reg_val |= MDIO_CL73_IEEEB1_AN_ADV2_ADVR_1000M_KX; | ||
1257 | 1254 | ||
1258 | CL45_WR_OVER_CL22(bp, params->port, | 1255 | CL45_WR_OVER_CL22(bp, params->port, |
1259 | params->phy_addr, | 1256 | params->phy_addr, |
1260 | MDIO_REG_BANK_CL73_IEEEB1, | 1257 | MDIO_REG_BANK_CL73_IEEEB1, |
1261 | MDIO_CL73_IEEEB1_AN_ADV2, | 1258 | MDIO_CL73_IEEEB1_AN_ADV2, |
1262 | reg_val | MDIO_CL73_IEEEB1_AN_ADV2_ADVR_10G_KX4); | 1259 | reg_val); |
1263 | 1260 | ||
1264 | } | ||
1265 | /* CL73 Autoneg Enabled */ | 1261 | /* CL73 Autoneg Enabled */ |
1266 | reg_val = MDIO_CL73_IEEEB0_CL73_AN_CONTROL_AN_EN; | 1262 | reg_val = MDIO_CL73_IEEEB0_CL73_AN_CONTROL_AN_EN; |
1267 | 1263 | ||
@@ -1389,12 +1385,23 @@ static void bnx2x_set_ieee_aneg_advertisment(struct link_params *params, | |||
1389 | u16 ieee_fc) | 1385 | u16 ieee_fc) |
1390 | { | 1386 | { |
1391 | struct bnx2x *bp = params->bp; | 1387 | struct bnx2x *bp = params->bp; |
1388 | u16 val; | ||
1392 | /* for AN, we are always publishing full duplex */ | 1389 | /* for AN, we are always publishing full duplex */ |
1393 | 1390 | ||
1394 | CL45_WR_OVER_CL22(bp, params->port, | 1391 | CL45_WR_OVER_CL22(bp, params->port, |
1395 | params->phy_addr, | 1392 | params->phy_addr, |
1396 | MDIO_REG_BANK_COMBO_IEEE0, | 1393 | MDIO_REG_BANK_COMBO_IEEE0, |
1397 | MDIO_COMBO_IEEE0_AUTO_NEG_ADV, ieee_fc); | 1394 | MDIO_COMBO_IEEE0_AUTO_NEG_ADV, ieee_fc); |
1395 | CL45_RD_OVER_CL22(bp, params->port, | ||
1396 | params->phy_addr, | ||
1397 | MDIO_REG_BANK_CL73_IEEEB1, | ||
1398 | MDIO_CL73_IEEEB1_AN_ADV1, &val); | ||
1399 | val &= ~MDIO_CL73_IEEEB1_AN_ADV1_PAUSE_BOTH; | ||
1400 | val |= ((ieee_fc<<3) & MDIO_CL73_IEEEB1_AN_ADV1_PAUSE_MASK); | ||
1401 | CL45_WR_OVER_CL22(bp, params->port, | ||
1402 | params->phy_addr, | ||
1403 | MDIO_REG_BANK_CL73_IEEEB1, | ||
1404 | MDIO_CL73_IEEEB1_AN_ADV1, val); | ||
1398 | } | 1405 | } |
1399 | 1406 | ||
1400 | static void bnx2x_restart_autoneg(struct link_params *params, u8 enable_cl73) | 1407 | static void bnx2x_restart_autoneg(struct link_params *params, u8 enable_cl73) |
@@ -1630,21 +1637,49 @@ static void bnx2x_flow_ctrl_resolve(struct link_params *params, | |||
1630 | (!(vars->phy_flags & PHY_SGMII_FLAG)) && | 1637 | (!(vars->phy_flags & PHY_SGMII_FLAG)) && |
1631 | (XGXS_EXT_PHY_TYPE(params->ext_phy_config) == | 1638 | (XGXS_EXT_PHY_TYPE(params->ext_phy_config) == |
1632 | PORT_HW_CFG_XGXS_EXT_PHY_TYPE_DIRECT)) { | 1639 | PORT_HW_CFG_XGXS_EXT_PHY_TYPE_DIRECT)) { |
1633 | CL45_RD_OVER_CL22(bp, params->port, | 1640 | if ((gp_status & |
1634 | params->phy_addr, | 1641 | (MDIO_GP_STATUS_TOP_AN_STATUS1_CL73_AUTONEG_COMPLETE | |
1635 | MDIO_REG_BANK_COMBO_IEEE0, | 1642 | MDIO_GP_STATUS_TOP_AN_STATUS1_CL73_MR_LP_NP_AN_ABLE)) == |
1636 | MDIO_COMBO_IEEE0_AUTO_NEG_ADV, | 1643 | (MDIO_GP_STATUS_TOP_AN_STATUS1_CL73_AUTONEG_COMPLETE | |
1637 | &ld_pause); | 1644 | MDIO_GP_STATUS_TOP_AN_STATUS1_CL73_MR_LP_NP_AN_ABLE)) { |
1638 | CL45_RD_OVER_CL22(bp, params->port, | 1645 | |
1639 | params->phy_addr, | 1646 | CL45_RD_OVER_CL22(bp, params->port, |
1640 | MDIO_REG_BANK_COMBO_IEEE0, | 1647 | params->phy_addr, |
1641 | MDIO_COMBO_IEEE0_AUTO_NEG_LINK_PARTNER_ABILITY1, | 1648 | MDIO_REG_BANK_CL73_IEEEB1, |
1642 | &lp_pause); | 1649 | MDIO_CL73_IEEEB1_AN_ADV1, |
1643 | pause_result = (ld_pause & | 1650 | &ld_pause); |
1651 | CL45_RD_OVER_CL22(bp, params->port, | ||
1652 | params->phy_addr, | ||
1653 | MDIO_REG_BANK_CL73_IEEEB1, | ||
1654 | MDIO_CL73_IEEEB1_AN_LP_ADV1, | ||
1655 | &lp_pause); | ||
1656 | pause_result = (ld_pause & | ||
1657 | MDIO_CL73_IEEEB1_AN_ADV1_PAUSE_MASK) | ||
1658 | >> 8; | ||
1659 | pause_result |= (lp_pause & | ||
1660 | MDIO_CL73_IEEEB1_AN_LP_ADV1_PAUSE_MASK) | ||
1661 | >> 10; | ||
1662 | DP(NETIF_MSG_LINK, "pause_result CL73 0x%x\n", | ||
1663 | pause_result); | ||
1664 | } else { | ||
1665 | |||
1666 | CL45_RD_OVER_CL22(bp, params->port, | ||
1667 | params->phy_addr, | ||
1668 | MDIO_REG_BANK_COMBO_IEEE0, | ||
1669 | MDIO_COMBO_IEEE0_AUTO_NEG_ADV, | ||
1670 | &ld_pause); | ||
1671 | CL45_RD_OVER_CL22(bp, params->port, | ||
1672 | params->phy_addr, | ||
1673 | MDIO_REG_BANK_COMBO_IEEE0, | ||
1674 | MDIO_COMBO_IEEE0_AUTO_NEG_LINK_PARTNER_ABILITY1, | ||
1675 | &lp_pause); | ||
1676 | pause_result = (ld_pause & | ||
1644 | MDIO_COMBO_IEEE0_AUTO_NEG_ADV_PAUSE_MASK)>>5; | 1677 | MDIO_COMBO_IEEE0_AUTO_NEG_ADV_PAUSE_MASK)>>5; |
1645 | pause_result |= (lp_pause & | 1678 | pause_result |= (lp_pause & |
1646 | MDIO_COMBO_IEEE0_AUTO_NEG_ADV_PAUSE_MASK)>>7; | 1679 | MDIO_COMBO_IEEE0_AUTO_NEG_ADV_PAUSE_MASK)>>7; |
1647 | DP(NETIF_MSG_LINK, "pause_result 0x%x\n", pause_result); | 1680 | DP(NETIF_MSG_LINK, "pause_result CL37 0x%x\n", |
1681 | pause_result); | ||
1682 | } | ||
1648 | bnx2x_pause_resolve(vars, pause_result); | 1683 | bnx2x_pause_resolve(vars, pause_result); |
1649 | } else if ((params->req_flow_ctrl == BNX2X_FLOW_CTRL_AUTO) && | 1684 | } else if ((params->req_flow_ctrl == BNX2X_FLOW_CTRL_AUTO) && |
1650 | (bnx2x_ext_phy_resolve_fc(params, vars))) { | 1685 | (bnx2x_ext_phy_resolve_fc(params, vars))) { |
@@ -1990,8 +2025,7 @@ static u8 bnx2x_emac_program(struct link_params *params, | |||
1990 | GRCBASE_EMAC0 + port*0x400 + EMAC_REG_EMAC_MODE, | 2025 | GRCBASE_EMAC0 + port*0x400 + EMAC_REG_EMAC_MODE, |
1991 | mode); | 2026 | mode); |
1992 | 2027 | ||
1993 | bnx2x_set_led(bp, params->port, LED_MODE_OPER, | 2028 | bnx2x_set_led(params, LED_MODE_OPER, line_speed); |
1994 | line_speed, params->hw_led_mode, params->chip_id); | ||
1995 | return 0; | 2029 | return 0; |
1996 | } | 2030 | } |
1997 | 2031 | ||
@@ -3547,7 +3581,10 @@ static void bnx2x_init_internal_phy(struct link_params *params, | |||
3547 | bnx2x_set_preemphasis(params); | 3581 | bnx2x_set_preemphasis(params); |
3548 | 3582 | ||
3549 | /* forced speed requested? */ | 3583 | /* forced speed requested? */ |
3550 | if (vars->line_speed != SPEED_AUTO_NEG) { | 3584 | if (vars->line_speed != SPEED_AUTO_NEG || |
3585 | ((XGXS_EXT_PHY_TYPE(params->ext_phy_config) == | ||
3586 | PORT_HW_CFG_XGXS_EXT_PHY_TYPE_DIRECT) && | ||
3587 | params->loopback_mode == LOOPBACK_EXT)) { | ||
3551 | DP(NETIF_MSG_LINK, "not SGMII, no AN\n"); | 3588 | DP(NETIF_MSG_LINK, "not SGMII, no AN\n"); |
3552 | 3589 | ||
3553 | /* disable autoneg */ | 3590 | /* disable autoneg */ |
@@ -5731,13 +5768,15 @@ u8 bnx2x_override_led_value(struct bnx2x *bp, u8 port, | |||
5731 | } | 5768 | } |
5732 | 5769 | ||
5733 | 5770 | ||
5734 | u8 bnx2x_set_led(struct bnx2x *bp, u8 port, u8 mode, u32 speed, | 5771 | u8 bnx2x_set_led(struct link_params *params, u8 mode, u32 speed) |
5735 | u16 hw_led_mode, u32 chip_id) | ||
5736 | { | 5772 | { |
5773 | u8 port = params->port; | ||
5774 | u16 hw_led_mode = params->hw_led_mode; | ||
5737 | u8 rc = 0; | 5775 | u8 rc = 0; |
5738 | u32 tmp; | 5776 | u32 tmp; |
5739 | u32 emac_base = port ? GRCBASE_EMAC1 : GRCBASE_EMAC0; | 5777 | u32 emac_base = port ? GRCBASE_EMAC1 : GRCBASE_EMAC0; |
5740 | 5778 | u32 ext_phy_type = XGXS_EXT_PHY_TYPE(params->ext_phy_config); | |
5779 | struct bnx2x *bp = params->bp; | ||
5741 | DP(NETIF_MSG_LINK, "bnx2x_set_led: port %x, mode %d\n", port, mode); | 5780 | DP(NETIF_MSG_LINK, "bnx2x_set_led: port %x, mode %d\n", port, mode); |
5742 | DP(NETIF_MSG_LINK, "speed 0x%x, hw_led_mode 0x%x\n", | 5781 | DP(NETIF_MSG_LINK, "speed 0x%x, hw_led_mode 0x%x\n", |
5743 | speed, hw_led_mode); | 5782 | speed, hw_led_mode); |
@@ -5752,7 +5791,14 @@ u8 bnx2x_set_led(struct bnx2x *bp, u8 port, u8 mode, u32 speed, | |||
5752 | break; | 5791 | break; |
5753 | 5792 | ||
5754 | case LED_MODE_OPER: | 5793 | case LED_MODE_OPER: |
5755 | REG_WR(bp, NIG_REG_LED_MODE_P0 + port*4, hw_led_mode); | 5794 | if (ext_phy_type == PORT_HW_CFG_XGXS_EXT_PHY_TYPE_DIRECT) { |
5795 | REG_WR(bp, NIG_REG_LED_MODE_P0 + port*4, 0); | ||
5796 | REG_WR(bp, NIG_REG_LED_10G_P0 + port*4, 1); | ||
5797 | } else { | ||
5798 | REG_WR(bp, NIG_REG_LED_MODE_P0 + port*4, | ||
5799 | hw_led_mode); | ||
5800 | } | ||
5801 | |||
5756 | REG_WR(bp, NIG_REG_LED_CONTROL_OVERRIDE_TRAFFIC_P0 + | 5802 | REG_WR(bp, NIG_REG_LED_CONTROL_OVERRIDE_TRAFFIC_P0 + |
5757 | port*4, 0); | 5803 | port*4, 0); |
5758 | /* Set blinking rate to ~15.9Hz */ | 5804 | /* Set blinking rate to ~15.9Hz */ |
@@ -5764,7 +5810,7 @@ u8 bnx2x_set_led(struct bnx2x *bp, u8 port, u8 mode, u32 speed, | |||
5764 | EMAC_WR(bp, EMAC_REG_EMAC_LED, | 5810 | EMAC_WR(bp, EMAC_REG_EMAC_LED, |
5765 | (tmp & (~EMAC_LED_OVERRIDE))); | 5811 | (tmp & (~EMAC_LED_OVERRIDE))); |
5766 | 5812 | ||
5767 | if (!CHIP_IS_E1H(bp) && | 5813 | if (CHIP_IS_E1(bp) && |
5768 | ((speed == SPEED_2500) || | 5814 | ((speed == SPEED_2500) || |
5769 | (speed == SPEED_1000) || | 5815 | (speed == SPEED_1000) || |
5770 | (speed == SPEED_100) || | 5816 | (speed == SPEED_100) || |
@@ -6033,10 +6079,7 @@ u8 bnx2x_phy_init(struct link_params *params, struct link_vars *vars) | |||
6033 | REG_WR(bp, NIG_REG_EGRESS_DRAIN0_MODE + | 6079 | REG_WR(bp, NIG_REG_EGRESS_DRAIN0_MODE + |
6034 | params->port*4, 0); | 6080 | params->port*4, 0); |
6035 | 6081 | ||
6036 | bnx2x_set_led(bp, params->port, LED_MODE_OPER, | 6082 | bnx2x_set_led(params, LED_MODE_OPER, vars->line_speed); |
6037 | vars->line_speed, params->hw_led_mode, | ||
6038 | params->chip_id); | ||
6039 | |||
6040 | } else | 6083 | } else |
6041 | /* No loopback */ | 6084 | /* No loopback */ |
6042 | { | 6085 | { |
@@ -6094,8 +6137,6 @@ u8 bnx2x_link_reset(struct link_params *params, struct link_vars *vars, | |||
6094 | { | 6137 | { |
6095 | struct bnx2x *bp = params->bp; | 6138 | struct bnx2x *bp = params->bp; |
6096 | u32 ext_phy_config = params->ext_phy_config; | 6139 | u32 ext_phy_config = params->ext_phy_config; |
6097 | u16 hw_led_mode = params->hw_led_mode; | ||
6098 | u32 chip_id = params->chip_id; | ||
6099 | u8 port = params->port; | 6140 | u8 port = params->port; |
6100 | u32 ext_phy_type = XGXS_EXT_PHY_TYPE(ext_phy_config); | 6141 | u32 ext_phy_type = XGXS_EXT_PHY_TYPE(ext_phy_config); |
6101 | u32 val = REG_RD(bp, params->shmem_base + | 6142 | u32 val = REG_RD(bp, params->shmem_base + |
@@ -6130,7 +6171,7 @@ u8 bnx2x_link_reset(struct link_params *params, struct link_vars *vars, | |||
6130 | * Hold it as vars low | 6171 | * Hold it as vars low |
6131 | */ | 6172 | */ |
6132 | /* clear link led */ | 6173 | /* clear link led */ |
6133 | bnx2x_set_led(bp, port, LED_MODE_OFF, 0, hw_led_mode, chip_id); | 6174 | bnx2x_set_led(params, LED_MODE_OFF, 0); |
6134 | if (reset_ext_phy) { | 6175 | if (reset_ext_phy) { |
6135 | switch (ext_phy_type) { | 6176 | switch (ext_phy_type) { |
6136 | case PORT_HW_CFG_XGXS_EXT_PHY_TYPE_DIRECT: | 6177 | case PORT_HW_CFG_XGXS_EXT_PHY_TYPE_DIRECT: |
@@ -6201,9 +6242,7 @@ static u8 bnx2x_update_link_down(struct link_params *params, | |||
6201 | u8 port = params->port; | 6242 | u8 port = params->port; |
6202 | 6243 | ||
6203 | DP(NETIF_MSG_LINK, "Port %x: Link is down\n", port); | 6244 | DP(NETIF_MSG_LINK, "Port %x: Link is down\n", port); |
6204 | bnx2x_set_led(bp, port, LED_MODE_OFF, | 6245 | bnx2x_set_led(params, LED_MODE_OFF, 0); |
6205 | 0, params->hw_led_mode, | ||
6206 | params->chip_id); | ||
6207 | 6246 | ||
6208 | /* indicate no mac active */ | 6247 | /* indicate no mac active */ |
6209 | vars->mac_type = MAC_TYPE_NONE; | 6248 | vars->mac_type = MAC_TYPE_NONE; |
@@ -6240,10 +6279,7 @@ static u8 bnx2x_update_link_up(struct link_params *params, | |||
6240 | vars->link_status |= LINK_STATUS_LINK_UP; | 6279 | vars->link_status |= LINK_STATUS_LINK_UP; |
6241 | if (link_10g) { | 6280 | if (link_10g) { |
6242 | bnx2x_bmac_enable(params, vars, 0); | 6281 | bnx2x_bmac_enable(params, vars, 0); |
6243 | bnx2x_set_led(bp, port, LED_MODE_OPER, | 6282 | bnx2x_set_led(params, LED_MODE_OPER, SPEED_10000); |
6244 | SPEED_10000, params->hw_led_mode, | ||
6245 | params->chip_id); | ||
6246 | |||
6247 | } else { | 6283 | } else { |
6248 | bnx2x_emac_enable(params, vars, 0); | 6284 | bnx2x_emac_enable(params, vars, 0); |
6249 | rc = bnx2x_emac_program(params, vars->line_speed, | 6285 | rc = bnx2x_emac_program(params, vars->line_speed, |
diff --git a/drivers/net/bnx2x_link.h b/drivers/net/bnx2x_link.h index f3e252264e1b..40c2981de8ed 100644 --- a/drivers/net/bnx2x_link.h +++ b/drivers/net/bnx2x_link.h | |||
@@ -178,8 +178,7 @@ u8 bnx2x_get_ext_phy_fw_version(struct link_params *params, u8 driver_loaded, | |||
178 | Basically, the CLC takes care of the led for the link, but in case one needs | 178 | Basically, the CLC takes care of the led for the link, but in case one needs |
179 | to set/unset the led unnaturally, set the "mode" to LED_MODE_OPER to | 179 | to set/unset the led unnaturally, set the "mode" to LED_MODE_OPER to |
180 | blink the led, and LED_MODE_OFF to set the led off.*/ | 180 | blink the led, and LED_MODE_OFF to set the led off.*/ |
181 | u8 bnx2x_set_led(struct bnx2x *bp, u8 port, u8 mode, u32 speed, | 181 | u8 bnx2x_set_led(struct link_params *params, u8 mode, u32 speed); |
182 | u16 hw_led_mode, u32 chip_id); | ||
183 | #define LED_MODE_OFF 0 | 182 | #define LED_MODE_OFF 0 |
184 | #define LED_MODE_OPER 2 | 183 | #define LED_MODE_OPER 2 |
185 | 184 | ||
diff --git a/drivers/net/bnx2x_main.c b/drivers/net/bnx2x_main.c index 59b58d8f0fa8..6f16547a1b8a 100644 --- a/drivers/net/bnx2x_main.c +++ b/drivers/net/bnx2x_main.c | |||
@@ -10855,7 +10855,6 @@ static void bnx2x_get_ethtool_stats(struct net_device *dev, | |||
10855 | static int bnx2x_phys_id(struct net_device *dev, u32 data) | 10855 | static int bnx2x_phys_id(struct net_device *dev, u32 data) |
10856 | { | 10856 | { |
10857 | struct bnx2x *bp = netdev_priv(dev); | 10857 | struct bnx2x *bp = netdev_priv(dev); |
10858 | int port = BP_PORT(bp); | ||
10859 | int i; | 10858 | int i; |
10860 | 10859 | ||
10861 | if (!netif_running(dev)) | 10860 | if (!netif_running(dev)) |
@@ -10869,13 +10868,10 @@ static int bnx2x_phys_id(struct net_device *dev, u32 data) | |||
10869 | 10868 | ||
10870 | for (i = 0; i < (data * 2); i++) { | 10869 | for (i = 0; i < (data * 2); i++) { |
10871 | if ((i % 2) == 0) | 10870 | if ((i % 2) == 0) |
10872 | bnx2x_set_led(bp, port, LED_MODE_OPER, SPEED_1000, | 10871 | bnx2x_set_led(&bp->link_params, LED_MODE_OPER, |
10873 | bp->link_params.hw_led_mode, | 10872 | SPEED_1000); |
10874 | bp->link_params.chip_id); | ||
10875 | else | 10873 | else |
10876 | bnx2x_set_led(bp, port, LED_MODE_OFF, 0, | 10874 | bnx2x_set_led(&bp->link_params, LED_MODE_OFF, 0); |
10877 | bp->link_params.hw_led_mode, | ||
10878 | bp->link_params.chip_id); | ||
10879 | 10875 | ||
10880 | msleep_interruptible(500); | 10876 | msleep_interruptible(500); |
10881 | if (signal_pending(current)) | 10877 | if (signal_pending(current)) |
@@ -10883,10 +10879,8 @@ static int bnx2x_phys_id(struct net_device *dev, u32 data) | |||
10883 | } | 10879 | } |
10884 | 10880 | ||
10885 | if (bp->link_vars.link_up) | 10881 | if (bp->link_vars.link_up) |
10886 | bnx2x_set_led(bp, port, LED_MODE_OPER, | 10882 | bnx2x_set_led(&bp->link_params, LED_MODE_OPER, |
10887 | bp->link_vars.line_speed, | 10883 | bp->link_vars.line_speed); |
10888 | bp->link_params.hw_led_mode, | ||
10889 | bp->link_params.chip_id); | ||
10890 | 10884 | ||
10891 | return 0; | 10885 | return 0; |
10892 | } | 10886 | } |
diff --git a/drivers/net/bnx2x_reg.h b/drivers/net/bnx2x_reg.h index aa76cbada5e2..b80fde44c85d 100644 --- a/drivers/net/bnx2x_reg.h +++ b/drivers/net/bnx2x_reg.h | |||
@@ -4772,18 +4772,28 @@ | |||
4772 | #define PCI_ID_VAL2 0x438 | 4772 | #define PCI_ID_VAL2 0x438 |
4773 | 4773 | ||
4774 | 4774 | ||
4775 | #define MDIO_REG_BANK_CL73_IEEEB0 0x0 | 4775 | #define MDIO_REG_BANK_CL73_IEEEB0 0x0 |
4776 | #define MDIO_CL73_IEEEB0_CL73_AN_CONTROL 0x0 | 4776 | #define MDIO_CL73_IEEEB0_CL73_AN_CONTROL 0x0 |
4777 | #define MDIO_CL73_IEEEB0_CL73_AN_CONTROL_RESTART_AN 0x0200 | 4777 | #define MDIO_CL73_IEEEB0_CL73_AN_CONTROL_RESTART_AN 0x0200 |
4778 | #define MDIO_CL73_IEEEB0_CL73_AN_CONTROL_AN_EN 0x1000 | 4778 | #define MDIO_CL73_IEEEB0_CL73_AN_CONTROL_AN_EN 0x1000 |
4779 | #define MDIO_CL73_IEEEB0_CL73_AN_CONTROL_MAIN_RST 0x8000 | 4779 | #define MDIO_CL73_IEEEB0_CL73_AN_CONTROL_MAIN_RST 0x8000 |
4780 | 4780 | ||
4781 | #define MDIO_REG_BANK_CL73_IEEEB1 0x10 | 4781 | #define MDIO_REG_BANK_CL73_IEEEB1 0x10 |
4782 | #define MDIO_CL73_IEEEB1_AN_ADV2 0x01 | 4782 | #define MDIO_CL73_IEEEB1_AN_ADV1 0x00 |
4783 | #define MDIO_CL73_IEEEB1_AN_ADV1_PAUSE 0x0400 | ||
4784 | #define MDIO_CL73_IEEEB1_AN_ADV1_ASYMMETRIC 0x0800 | ||
4785 | #define MDIO_CL73_IEEEB1_AN_ADV1_PAUSE_BOTH 0x0C00 | ||
4786 | #define MDIO_CL73_IEEEB1_AN_ADV1_PAUSE_MASK 0x0C00 | ||
4787 | #define MDIO_CL73_IEEEB1_AN_ADV2 0x01 | ||
4783 | #define MDIO_CL73_IEEEB1_AN_ADV2_ADVR_1000M 0x0000 | 4788 | #define MDIO_CL73_IEEEB1_AN_ADV2_ADVR_1000M 0x0000 |
4784 | #define MDIO_CL73_IEEEB1_AN_ADV2_ADVR_1000M_KX 0x0020 | 4789 | #define MDIO_CL73_IEEEB1_AN_ADV2_ADVR_1000M_KX 0x0020 |
4785 | #define MDIO_CL73_IEEEB1_AN_ADV2_ADVR_10G_KX4 0x0040 | 4790 | #define MDIO_CL73_IEEEB1_AN_ADV2_ADVR_10G_KX4 0x0040 |
4786 | #define MDIO_CL73_IEEEB1_AN_ADV2_ADVR_10G_KR 0x0080 | 4791 | #define MDIO_CL73_IEEEB1_AN_ADV2_ADVR_10G_KR 0x0080 |
4792 | #define MDIO_CL73_IEEEB1_AN_LP_ADV1 0x03 | ||
4793 | #define MDIO_CL73_IEEEB1_AN_LP_ADV1_PAUSE 0x0400 | ||
4794 | #define MDIO_CL73_IEEEB1_AN_LP_ADV1_ASYMMETRIC 0x0800 | ||
4795 | #define MDIO_CL73_IEEEB1_AN_LP_ADV1_PAUSE_BOTH 0x0C00 | ||
4796 | #define MDIO_CL73_IEEEB1_AN_LP_ADV1_PAUSE_MASK 0x0C00 | ||
4787 | 4797 | ||
4788 | #define MDIO_REG_BANK_RX0 0x80b0 | 4798 | #define MDIO_REG_BANK_RX0 0x80b0 |
4789 | #define MDIO_RX0_RX_STATUS 0x10 | 4799 | #define MDIO_RX0_RX_STATUS 0x10 |