Commit 4f60dab113230943fb1bc7969053d9a1b6578339

Authored by Yaniv Rosner
Committed by David S. Miller
1 parent b5bbf0080e

bnx2x: Add support for BCM84823

Add support for new phy type BCM84823 (Dual copper-port phy)

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>

Showing 2 changed files with 42 additions and 3 deletions Side-by-side Diff

drivers/net/bnx2x_hsi.h
... ... @@ -264,6 +264,7 @@
264 264 #define PORT_HW_CFG_XGXS_EXT_PHY_TYPE_SFX7101 0x00000800
265 265 #define PORT_HW_CFG_XGXS_EXT_PHY_TYPE_BCM8727 0x00000900
266 266 #define PORT_HW_CFG_XGXS_EXT_PHY_TYPE_BCM8727_NOC 0x00000a00
  267 +#define PORT_HW_CFG_XGXS_EXT_PHY_TYPE_BCM84823 0x00000b00
267 268 #define PORT_HW_CFG_XGXS_EXT_PHY_TYPE_FAILURE 0x0000fd00
268 269 #define PORT_HW_CFG_XGXS_EXT_PHY_TYPE_NOT_CONN 0x0000ff00
269 270  
drivers/net/bnx2x_link.c
... ... @@ -2200,6 +2200,8 @@
2200 2200 MDIO_PMA_REG_CTRL,
2201 2201 1<<15);
2202 2202 break;
  2203 + case PORT_HW_CFG_XGXS_EXT_PHY_TYPE_BCM84823:
  2204 + break;
2203 2205 case PORT_HW_CFG_XGXS_EXT_PHY_TYPE_FAILURE:
2204 2206 DP(NETIF_MSG_LINK, "XGXS PHY Failure detected\n");
2205 2207 break;
... ... @@ -4373,6 +4375,7 @@
4373 4375 break;
4374 4376 }
4375 4377 case PORT_HW_CFG_XGXS_EXT_PHY_TYPE_BCM8481:
  4378 + case PORT_HW_CFG_XGXS_EXT_PHY_TYPE_BCM84823:
4376 4379 /* This phy uses the NIG latch mechanism since link
4377 4380 indication arrives through its LED4 and not via
4378 4381 its LASI signal, so we get steady signal
... ... @@ -4380,6 +4383,12 @@
4380 4383 bnx2x_bits_en(bp, NIG_REG_LATCH_BC_0 + params->port*4,
4381 4384 1 << NIG_LATCH_BC_ENABLE_MI_INT);
4382 4385  
  4386 + bnx2x_cl45_write(bp, params->port,
  4387 + PORT_HW_CFG_XGXS_EXT_PHY_TYPE_BCM8481,
  4388 + ext_phy_addr,
  4389 + MDIO_PMA_DEVAD,
  4390 + MDIO_PMA_REG_CTRL, 0x0000);
  4391 +
4383 4392 bnx2x_8481_set_led4(params, ext_phy_type, ext_phy_addr);
4384 4393 if (params->req_line_speed == SPEED_AUTO_NEG) {
4385 4394  
... ... @@ -5230,6 +5239,7 @@
5230 5239 }
5231 5240 break;
5232 5241 case PORT_HW_CFG_XGXS_EXT_PHY_TYPE_BCM8481:
  5242 + case PORT_HW_CFG_XGXS_EXT_PHY_TYPE_BCM84823:
5233 5243 /* Check 10G-BaseT link status */
5234 5244 /* Check PMD signal ok */
5235 5245 bnx2x_cl45_read(bp, params->port, ext_phy_type,
... ... @@ -5445,8 +5455,10 @@
5445 5455 (NIG_STATUS_XGXS0_LINK10G |
5446 5456 NIG_STATUS_XGXS0_LINK_STATUS |
5447 5457 NIG_STATUS_SERDES0_LINK_STATUS));
5448   - if (XGXS_EXT_PHY_TYPE(params->ext_phy_config)
5449   - == PORT_HW_CFG_XGXS_EXT_PHY_TYPE_BCM8481) {
  5458 + if ((XGXS_EXT_PHY_TYPE(params->ext_phy_config)
  5459 + == PORT_HW_CFG_XGXS_EXT_PHY_TYPE_BCM8481) ||
  5460 + (XGXS_EXT_PHY_TYPE(params->ext_phy_config)
  5461 + == PORT_HW_CFG_XGXS_EXT_PHY_TYPE_BCM84823)) {
5450 5462 bnx2x_8481_rearm_latch_signal(bp, port, is_mi_int);
5451 5463 }
5452 5464 if (vars->phy_link_up) {
... ... @@ -5559,6 +5571,7 @@
5559 5571 status = bnx2x_format_ver(spirom_ver, version, len);
5560 5572 break;
5561 5573 case PORT_HW_CFG_XGXS_EXT_PHY_TYPE_BCM8481:
  5574 + case PORT_HW_CFG_XGXS_EXT_PHY_TYPE_BCM84823:
5562 5575 spirom_ver = ((spirom_ver & 0xF80) >> 7) << 16 |
5563 5576 (spirom_ver & 0x7F);
5564 5577 status = bnx2x_format_ver(spirom_ver, version, len);
... ... @@ -6250,6 +6263,22 @@
6250 6263 bnx2x_8726_reset_phy(bp, params->port, ext_phy_addr);
6251 6264 break;
6252 6265 }
  6266 + case PORT_HW_CFG_XGXS_EXT_PHY_TYPE_BCM84823:
  6267 + {
  6268 + u8 ext_phy_addr =
  6269 + XGXS_EXT_PHY_ADDR(params->ext_phy_config);
  6270 + bnx2x_cl45_write(bp, port,
  6271 + PORT_HW_CFG_XGXS_EXT_PHY_TYPE_BCM8481,
  6272 + ext_phy_addr,
  6273 + MDIO_AN_DEVAD,
  6274 + MDIO_AN_REG_CTRL, 0x0000);
  6275 + bnx2x_cl45_write(bp, port,
  6276 + PORT_HW_CFG_XGXS_EXT_PHY_TYPE_BCM8481,
  6277 + ext_phy_addr,
  6278 + MDIO_PMA_DEVAD,
  6279 + MDIO_PMA_REG_CTRL, 1);
  6280 + break;
  6281 + }
6253 6282 default:
6254 6283 /* HW reset */
6255 6284 bnx2x_set_gpio(bp, MISC_REGISTERS_GPIO_1,
... ... @@ -6661,6 +6690,13 @@
6661 6690 return 0;
6662 6691 }
6663 6692  
  6693 +
  6694 +static u8 bnx2x_84823_common_init_phy(struct bnx2x *bp, u32 shmem_base)
  6695 +{
  6696 + /* HW reset */
  6697 + bnx2x_ext_phy_hw_reset(bp, 1);
  6698 + return 0;
  6699 +}
6664 6700 u8 bnx2x_common_init_phy(struct bnx2x *bp, u32 shmem_base)
6665 6701 {
6666 6702 u8 rc = 0;
... ... @@ -6690,7 +6726,9 @@
6690 6726 /* GPIO1 affects both ports, so there's need to pull
6691 6727 it for single port alone */
6692 6728 rc = bnx2x_8726_common_init_phy(bp, shmem_base);
6693   -
  6729 + break;
  6730 + case PORT_HW_CFG_XGXS_EXT_PHY_TYPE_BCM84823:
  6731 + rc = bnx2x_84823_common_init_phy(bp, shmem_base);
6694 6732 break;
6695 6733 default:
6696 6734 DP(NETIF_MSG_LINK,