aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorYaniv Rosner <yanivr@broadcom.com>2011-07-04 21:06:34 -0400
committerDavid S. Miller <davem@davemloft.net>2011-07-05 07:21:40 -0400
commit52c4d6c4b543574930667bfc2a4aed8af0713519 (patch)
tree32f0f648c4e01a76d8f928281589c054dc4de927
parentb8d6d0824d064ad447e6aacbce90f3a340d93d65 (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.h4
-rw-r--r--drivers/net/bnx2x/bnx2x_link.c78
-rw-r--r--drivers/net/bnx2x/bnx2x_reg.h10
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/******************************************************************/
9805static int bnx2x_54616s_config_init(struct bnx2x_phy *phy, 9805static 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
9976static void bnx2x_54616s_set_link_led(struct bnx2x_phy *phy, 9976static 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
9992static void bnx2x_54616s_link_reset(struct bnx2x_phy *phy, 9992static 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
10012static u8 bnx2x_54616s_read_status(struct bnx2x_phy *phy, 10012static 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
10084static void bnx2x_54616s_config_loopback(struct bnx2x_phy *phy, 10108static 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
10708static struct bnx2x_phy phy_54616s = { 10732static 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)