diff options
author | Yaniv Rosner <yanivr@broadcom.com> | 2011-07-04 21:06:34 -0400 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2011-07-05 07:21:40 -0400 |
commit | 52c4d6c4b543574930667bfc2a4aed8af0713519 (patch) | |
tree | 32f0f648c4e01a76d8f928281589c054dc4de927 | |
parent | b8d6d0824d064ad447e6aacbce90f3a340d93d65 (diff) |
bnx2x: Change BCM54616S to BCM54618SE
Change 1G copper PHY BCM54616S to BCM54618SE since we only have HW with latter one of the two.
Signed-off-by: Yaniv Rosner <yanivr@broadcom.com>
Signed-off-by: Eilon Greenstein <eilong@broadcom.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
-rw-r--r-- | drivers/net/bnx2x/bnx2x_hsi.h | 4 | ||||
-rw-r--r-- | drivers/net/bnx2x/bnx2x_link.c | 78 | ||||
-rw-r--r-- | drivers/net/bnx2x/bnx2x_reg.h | 10 |
3 files changed, 62 insertions, 30 deletions
diff --git a/drivers/net/bnx2x/bnx2x_hsi.h b/drivers/net/bnx2x/bnx2x_hsi.h index d6a7aa95d968..e6f816df88b8 100644 --- a/drivers/net/bnx2x/bnx2x_hsi.h +++ b/drivers/net/bnx2x/bnx2x_hsi.h | |||
@@ -696,7 +696,7 @@ struct port_hw_cfg { /* port 0: 0x12c port 1: 0x2bc */ | |||
696 | #define PORT_HW_CFG_XGXS_EXT_PHY2_TYPE_BCM84823 0x00000b00 | 696 | #define PORT_HW_CFG_XGXS_EXT_PHY2_TYPE_BCM84823 0x00000b00 |
697 | #define PORT_HW_CFG_XGXS_EXT_PHY2_TYPE_BCM54640 0x00000c00 | 697 | #define PORT_HW_CFG_XGXS_EXT_PHY2_TYPE_BCM54640 0x00000c00 |
698 | #define PORT_HW_CFG_XGXS_EXT_PHY2_TYPE_BCM84833 0x00000d00 | 698 | #define PORT_HW_CFG_XGXS_EXT_PHY2_TYPE_BCM84833 0x00000d00 |
699 | #define PORT_HW_CFG_XGXS_EXT_PHY2_TYPE_BCM54616 0x00000e00 | 699 | #define PORT_HW_CFG_XGXS_EXT_PHY2_TYPE_BCM54618SE 0x00000e00 |
700 | #define PORT_HW_CFG_XGXS_EXT_PHY2_TYPE_BCM8722 0x00000f00 | 700 | #define PORT_HW_CFG_XGXS_EXT_PHY2_TYPE_BCM8722 0x00000f00 |
701 | #define PORT_HW_CFG_XGXS_EXT_PHY2_TYPE_FAILURE 0x0000fd00 | 701 | #define PORT_HW_CFG_XGXS_EXT_PHY2_TYPE_FAILURE 0x0000fd00 |
702 | #define PORT_HW_CFG_XGXS_EXT_PHY2_TYPE_NOT_CONN 0x0000ff00 | 702 | #define PORT_HW_CFG_XGXS_EXT_PHY2_TYPE_NOT_CONN 0x0000ff00 |
@@ -751,7 +751,7 @@ struct port_hw_cfg { /* port 0: 0x12c port 1: 0x2bc */ | |||
751 | #define PORT_HW_CFG_XGXS_EXT_PHY_TYPE_BCM84823 0x00000b00 | 751 | #define PORT_HW_CFG_XGXS_EXT_PHY_TYPE_BCM84823 0x00000b00 |
752 | #define PORT_HW_CFG_XGXS_EXT_PHY_TYPE_BCM54640 0x00000c00 | 752 | #define PORT_HW_CFG_XGXS_EXT_PHY_TYPE_BCM54640 0x00000c00 |
753 | #define PORT_HW_CFG_XGXS_EXT_PHY_TYPE_BCM84833 0x00000d00 | 753 | #define PORT_HW_CFG_XGXS_EXT_PHY_TYPE_BCM84833 0x00000d00 |
754 | #define PORT_HW_CFG_XGXS_EXT_PHY_TYPE_BCM54616 0x00000e00 | 754 | #define PORT_HW_CFG_XGXS_EXT_PHY_TYPE_BCM54618SE 0x00000e00 |
755 | #define PORT_HW_CFG_XGXS_EXT_PHY_TYPE_BCM8722 0x00000f00 | 755 | #define PORT_HW_CFG_XGXS_EXT_PHY_TYPE_BCM8722 0x00000f00 |
756 | #define PORT_HW_CFG_XGXS_EXT_PHY_TYPE_DIRECT_WC 0x0000fc00 | 756 | #define PORT_HW_CFG_XGXS_EXT_PHY_TYPE_DIRECT_WC 0x0000fc00 |
757 | #define PORT_HW_CFG_XGXS_EXT_PHY_TYPE_FAILURE 0x0000fd00 | 757 | #define PORT_HW_CFG_XGXS_EXT_PHY_TYPE_FAILURE 0x0000fd00 |
diff --git a/drivers/net/bnx2x/bnx2x_link.c b/drivers/net/bnx2x/bnx2x_link.c index 57ba8110aa5f..011548a84ef7 100644 --- a/drivers/net/bnx2x/bnx2x_link.c +++ b/drivers/net/bnx2x/bnx2x_link.c | |||
@@ -3530,7 +3530,7 @@ static u8 bnx2x_ext_phy_resolve_fc(struct bnx2x_phy *phy, | |||
3530 | vars->flow_ctrl = params->req_fc_auto_adv; | 3530 | vars->flow_ctrl = params->req_fc_auto_adv; |
3531 | else if (vars->link_status & LINK_STATUS_AUTO_NEGOTIATE_COMPLETE) { | 3531 | else if (vars->link_status & LINK_STATUS_AUTO_NEGOTIATE_COMPLETE) { |
3532 | ret = 1; | 3532 | ret = 1; |
3533 | if (phy->type == PORT_HW_CFG_XGXS_EXT_PHY_TYPE_BCM54616) { | 3533 | if (phy->type == PORT_HW_CFG_XGXS_EXT_PHY_TYPE_BCM54618SE) { |
3534 | bnx2x_cl22_read(bp, phy, | 3534 | bnx2x_cl22_read(bp, phy, |
3535 | 0x4, &ld_pause); | 3535 | 0x4, &ld_pause); |
3536 | bnx2x_cl22_read(bp, phy, | 3536 | bnx2x_cl22_read(bp, phy, |
@@ -5549,7 +5549,7 @@ static u16 bnx2x_wait_reset_complete(struct bnx2x *bp, | |||
5549 | u16 cnt, ctrl; | 5549 | u16 cnt, ctrl; |
5550 | /* Wait for soft reset to get cleared up to 1 sec */ | 5550 | /* Wait for soft reset to get cleared up to 1 sec */ |
5551 | for (cnt = 0; cnt < 1000; cnt++) { | 5551 | for (cnt = 0; cnt < 1000; cnt++) { |
5552 | if (phy->type == PORT_HW_CFG_XGXS_EXT_PHY_TYPE_BCM54616) | 5552 | if (phy->type == PORT_HW_CFG_XGXS_EXT_PHY_TYPE_BCM54618SE) |
5553 | bnx2x_cl22_read(bp, phy, | 5553 | bnx2x_cl22_read(bp, phy, |
5554 | MDIO_PMA_REG_CTRL, &ctrl); | 5554 | MDIO_PMA_REG_CTRL, &ctrl); |
5555 | else | 5555 | else |
@@ -9800,9 +9800,9 @@ static void bnx2x_848xx_set_link_led(struct bnx2x_phy *phy, | |||
9800 | } | 9800 | } |
9801 | 9801 | ||
9802 | /******************************************************************/ | 9802 | /******************************************************************/ |
9803 | /* 54616S PHY SECTION */ | 9803 | /* 54618SE PHY SECTION */ |
9804 | /******************************************************************/ | 9804 | /******************************************************************/ |
9805 | static int bnx2x_54616s_config_init(struct bnx2x_phy *phy, | 9805 | static int bnx2x_54618se_config_init(struct bnx2x_phy *phy, |
9806 | struct link_params *params, | 9806 | struct link_params *params, |
9807 | struct link_vars *vars) | 9807 | struct link_vars *vars) |
9808 | { | 9808 | { |
@@ -9811,7 +9811,7 @@ static int bnx2x_54616s_config_init(struct bnx2x_phy *phy, | |||
9811 | u16 autoneg_val, an_1000_val, an_10_100_val, fc_val, temp; | 9811 | u16 autoneg_val, an_1000_val, an_10_100_val, fc_val, temp; |
9812 | u32 cfg_pin; | 9812 | u32 cfg_pin; |
9813 | 9813 | ||
9814 | DP(NETIF_MSG_LINK, "54616S cfg init\n"); | 9814 | DP(NETIF_MSG_LINK, "54618SE cfg init\n"); |
9815 | usleep_range(1000, 1000); | 9815 | usleep_range(1000, 1000); |
9816 | 9816 | ||
9817 | /* This works with E3 only, no need to check the chip | 9817 | /* This works with E3 only, no need to check the chip |
@@ -9973,11 +9973,11 @@ static int bnx2x_54616s_config_init(struct bnx2x_phy *phy, | |||
9973 | return 0; | 9973 | return 0; |
9974 | } | 9974 | } |
9975 | 9975 | ||
9976 | static void bnx2x_54616s_set_link_led(struct bnx2x_phy *phy, | 9976 | static void bnx2x_54618se_set_link_led(struct bnx2x_phy *phy, |
9977 | struct link_params *params, u8 mode) | 9977 | struct link_params *params, u8 mode) |
9978 | { | 9978 | { |
9979 | struct bnx2x *bp = params->bp; | 9979 | struct bnx2x *bp = params->bp; |
9980 | DP(NETIF_MSG_LINK, "54616S set link led (mode=%x)\n", mode); | 9980 | DP(NETIF_MSG_LINK, "54618SE set link led (mode=%x)\n", mode); |
9981 | switch (mode) { | 9981 | switch (mode) { |
9982 | case LED_MODE_FRONT_PANEL_OFF: | 9982 | case LED_MODE_FRONT_PANEL_OFF: |
9983 | case LED_MODE_OFF: | 9983 | case LED_MODE_OFF: |
@@ -9989,8 +9989,8 @@ static void bnx2x_54616s_set_link_led(struct bnx2x_phy *phy, | |||
9989 | return; | 9989 | return; |
9990 | } | 9990 | } |
9991 | 9991 | ||
9992 | static void bnx2x_54616s_link_reset(struct bnx2x_phy *phy, | 9992 | static void bnx2x_54618se_link_reset(struct bnx2x_phy *phy, |
9993 | struct link_params *params) | 9993 | struct link_params *params) |
9994 | { | 9994 | { |
9995 | struct bnx2x *bp = params->bp; | 9995 | struct bnx2x *bp = params->bp; |
9996 | u32 cfg_pin; | 9996 | u32 cfg_pin; |
@@ -10009,9 +10009,9 @@ static void bnx2x_54616s_link_reset(struct bnx2x_phy *phy, | |||
10009 | bnx2x_set_cfg_pin(bp, cfg_pin, 0); | 10009 | bnx2x_set_cfg_pin(bp, cfg_pin, 0); |
10010 | } | 10010 | } |
10011 | 10011 | ||
10012 | static u8 bnx2x_54616s_read_status(struct bnx2x_phy *phy, | 10012 | static u8 bnx2x_54618se_read_status(struct bnx2x_phy *phy, |
10013 | struct link_params *params, | 10013 | struct link_params *params, |
10014 | struct link_vars *vars) | 10014 | struct link_vars *vars) |
10015 | { | 10015 | { |
10016 | struct bnx2x *bp = params->bp; | 10016 | struct bnx2x *bp = params->bp; |
10017 | u16 val; | 10017 | u16 val; |
@@ -10022,7 +10022,7 @@ static u8 bnx2x_54616s_read_status(struct bnx2x_phy *phy, | |||
10022 | bnx2x_cl22_read(bp, phy, | 10022 | bnx2x_cl22_read(bp, phy, |
10023 | 0x19, | 10023 | 0x19, |
10024 | &legacy_status); | 10024 | &legacy_status); |
10025 | DP(NETIF_MSG_LINK, "54616S read_status: 0x%x\n", legacy_status); | 10025 | DP(NETIF_MSG_LINK, "54618SE read_status: 0x%x\n", legacy_status); |
10026 | 10026 | ||
10027 | /* Read status to clear the PHY interrupt. */ | 10027 | /* Read status to clear the PHY interrupt. */ |
10028 | bnx2x_cl22_read(bp, phy, | 10028 | bnx2x_cl22_read(bp, phy, |
@@ -10074,21 +10074,45 @@ static u8 bnx2x_54616s_read_status(struct bnx2x_phy *phy, | |||
10074 | vars->link_status |= | 10074 | vars->link_status |= |
10075 | LINK_STATUS_PARALLEL_DETECTION_USED; | 10075 | LINK_STATUS_PARALLEL_DETECTION_USED; |
10076 | 10076 | ||
10077 | DP(NETIF_MSG_LINK, "BCM54616S: link speed is %d\n", | 10077 | DP(NETIF_MSG_LINK, "BCM54618SE: link speed is %d\n", |
10078 | vars->line_speed); | 10078 | vars->line_speed); |
10079 | |||
10080 | /* Report whether EEE is resolved. */ | ||
10081 | bnx2x_cl22_read(bp, phy, MDIO_REG_GPHY_PHYID_LSB, &val); | ||
10082 | if (val == MDIO_REG_GPHY_ID_54618SE) { | ||
10083 | if (vars->link_status & | ||
10084 | LINK_STATUS_AUTO_NEGOTIATE_COMPLETE) | ||
10085 | val = 0; | ||
10086 | else { | ||
10087 | bnx2x_cl22_write(bp, phy, | ||
10088 | MDIO_REG_GPHY_CL45_ADDR_REG, | ||
10089 | MDIO_AN_DEVAD); | ||
10090 | bnx2x_cl22_write(bp, phy, | ||
10091 | MDIO_REG_GPHY_CL45_DATA_REG, | ||
10092 | MDIO_REG_GPHY_EEE_RESOLVED); | ||
10093 | bnx2x_cl22_write(bp, phy, | ||
10094 | MDIO_REG_GPHY_CL45_ADDR_REG, | ||
10095 | (0x1 << 14) | MDIO_AN_DEVAD); | ||
10096 | bnx2x_cl22_read(bp, phy, | ||
10097 | MDIO_REG_GPHY_CL45_DATA_REG, | ||
10098 | &val); | ||
10099 | } | ||
10100 | DP(NETIF_MSG_LINK, "EEE resolution: 0x%x\n", val); | ||
10101 | } | ||
10102 | |||
10079 | bnx2x_ext_phy_resolve_fc(phy, params, vars); | 10103 | bnx2x_ext_phy_resolve_fc(phy, params, vars); |
10080 | } | 10104 | } |
10081 | return link_up; | 10105 | return link_up; |
10082 | } | 10106 | } |
10083 | 10107 | ||
10084 | static void bnx2x_54616s_config_loopback(struct bnx2x_phy *phy, | 10108 | static void bnx2x_54618se_config_loopback(struct bnx2x_phy *phy, |
10085 | struct link_params *params) | 10109 | struct link_params *params) |
10086 | { | 10110 | { |
10087 | struct bnx2x *bp = params->bp; | 10111 | struct bnx2x *bp = params->bp; |
10088 | u16 val; | 10112 | u16 val; |
10089 | u32 umac_base = params->port ? GRCBASE_UMAC1 : GRCBASE_UMAC0; | 10113 | u32 umac_base = params->port ? GRCBASE_UMAC1 : GRCBASE_UMAC0; |
10090 | 10114 | ||
10091 | DP(NETIF_MSG_LINK, "2PMA/PMD ext_phy_loopback: 54616s\n"); | 10115 | DP(NETIF_MSG_LINK, "2PMA/PMD ext_phy_loopback: 54618se\n"); |
10092 | 10116 | ||
10093 | /* Enable master/slave manual mmode and set to master */ | 10117 | /* Enable master/slave manual mmode and set to master */ |
10094 | /* mii write 9 [bits set 11 12] */ | 10118 | /* mii write 9 [bits set 11 12] */ |
@@ -10705,8 +10729,8 @@ static struct bnx2x_phy phy_84833 = { | |||
10705 | .phy_specific_func = (phy_specific_func_t)NULL | 10729 | .phy_specific_func = (phy_specific_func_t)NULL |
10706 | }; | 10730 | }; |
10707 | 10731 | ||
10708 | static struct bnx2x_phy phy_54616s = { | 10732 | static struct bnx2x_phy phy_54618se = { |
10709 | .type = PORT_HW_CFG_XGXS_EXT_PHY_TYPE_BCM54616, | 10733 | .type = PORT_HW_CFG_XGXS_EXT_PHY_TYPE_BCM54618SE, |
10710 | .addr = 0xff, | 10734 | .addr = 0xff, |
10711 | .def_md_devad = 0, | 10735 | .def_md_devad = 0, |
10712 | .flags = FLAGS_INIT_XGXS_FIRST, | 10736 | .flags = FLAGS_INIT_XGXS_FIRST, |
@@ -10729,13 +10753,13 @@ static struct bnx2x_phy phy_54616s = { | |||
10729 | .speed_cap_mask = 0, | 10753 | .speed_cap_mask = 0, |
10730 | /* req_duplex = */0, | 10754 | /* req_duplex = */0, |
10731 | /* rsrv = */0, | 10755 | /* rsrv = */0, |
10732 | .config_init = (config_init_t)bnx2x_54616s_config_init, | 10756 | .config_init = (config_init_t)bnx2x_54618se_config_init, |
10733 | .read_status = (read_status_t)bnx2x_54616s_read_status, | 10757 | .read_status = (read_status_t)bnx2x_54618se_read_status, |
10734 | .link_reset = (link_reset_t)bnx2x_54616s_link_reset, | 10758 | .link_reset = (link_reset_t)bnx2x_54618se_link_reset, |
10735 | .config_loopback = (config_loopback_t)bnx2x_54616s_config_loopback, | 10759 | .config_loopback = (config_loopback_t)bnx2x_54618se_config_loopback, |
10736 | .format_fw_ver = (format_fw_ver_t)NULL, | 10760 | .format_fw_ver = (format_fw_ver_t)NULL, |
10737 | .hw_reset = (hw_reset_t)NULL, | 10761 | .hw_reset = (hw_reset_t)NULL, |
10738 | .set_link_led = (set_link_led_t)bnx2x_54616s_set_link_led, | 10762 | .set_link_led = (set_link_led_t)bnx2x_54618se_set_link_led, |
10739 | .phy_specific_func = (phy_specific_func_t)NULL | 10763 | .phy_specific_func = (phy_specific_func_t)NULL |
10740 | }; | 10764 | }; |
10741 | /*****************************************************************/ | 10765 | /*****************************************************************/ |
@@ -10978,8 +11002,8 @@ static int bnx2x_populate_ext_phy(struct bnx2x *bp, | |||
10978 | case PORT_HW_CFG_XGXS_EXT_PHY_TYPE_BCM84833: | 11002 | case PORT_HW_CFG_XGXS_EXT_PHY_TYPE_BCM84833: |
10979 | *phy = phy_84833; | 11003 | *phy = phy_84833; |
10980 | break; | 11004 | break; |
10981 | case PORT_HW_CFG_XGXS_EXT_PHY_TYPE_BCM54616: | 11005 | case PORT_HW_CFG_XGXS_EXT_PHY_TYPE_BCM54618SE: |
10982 | *phy = phy_54616s; | 11006 | *phy = phy_54618se; |
10983 | break; | 11007 | break; |
10984 | case PORT_HW_CFG_XGXS_EXT_PHY_TYPE_SFX7101: | 11008 | case PORT_HW_CFG_XGXS_EXT_PHY_TYPE_SFX7101: |
10985 | *phy = phy_7101; | 11009 | *phy = phy_7101; |
diff --git a/drivers/net/bnx2x/bnx2x_reg.h b/drivers/net/bnx2x/bnx2x_reg.h index 064b4452664b..1684e1bce5a3 100644 --- a/drivers/net/bnx2x/bnx2x_reg.h +++ b/drivers/net/bnx2x/bnx2x_reg.h | |||
@@ -6919,7 +6919,15 @@ Theotherbitsarereservedandshouldbezero*/ | |||
6919 | 6919 | ||
6920 | #define DIGITAL5_ACTUAL_SPEED_TX_MASK 0x003f | 6920 | #define DIGITAL5_ACTUAL_SPEED_TX_MASK 0x003f |
6921 | 6921 | ||
6922 | /* 54616s */ | 6922 | /* 54618se */ |
6923 | #define MDIO_REG_GPHY_PHYID_LSB 0x3 | ||
6924 | #define MDIO_REG_GPHY_ID_54618SE 0x5cd5 | ||
6925 | #define MDIO_REG_GPHY_CL45_ADDR_REG 0xd | ||
6926 | #define MDIO_REG_GPHY_CL45_DATA_REG 0xe | ||
6927 | #define MDIO_REG_GPHY_EEE_ADV 0x3c | ||
6928 | #define MDIO_REG_GPHY_EEE_1G (0x1 << 2) | ||
6929 | #define MDIO_REG_GPHY_EEE_100 (0x1 << 1) | ||
6930 | #define MDIO_REG_GPHY_EEE_RESOLVED 0x803e | ||
6923 | #define MDIO_REG_INTR_STATUS 0x1a | 6931 | #define MDIO_REG_INTR_STATUS 0x1a |
6924 | #define MDIO_REG_INTR_MASK 0x1b | 6932 | #define MDIO_REG_INTR_MASK 0x1b |
6925 | #define MDIO_REG_INTR_MASK_LINK_STATUS (0x1 << 1) | 6933 | #define MDIO_REG_INTR_MASK_LINK_STATUS (0x1 << 1) |