diff options
author | Eilon Greenstein <eilong@broadcom.com> | 2009-08-12 04:23:11 -0400 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2009-08-13 02:02:32 -0400 |
commit | f57a60256d02daba1316c98da472f02cd98a58d3 (patch) | |
tree | c927a54bf16050d43418c11404afc1fd78370940 /drivers/net/bnx2x_link.c | |
parent | 01cd452846c98609dd3efbee0deea050e6706f02 (diff) |
bnx2x: Supporting PHY FW upgrade
There are 3 operations that the driver needs to support to allow applications to
access the PHY FW (on top of the MDC/MDIO access). Since those are essentially
nvram access commands, adding them to the ethtool -E interface.
Signed-off-by: Eilon Greenstein <eilong@broadcom.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'drivers/net/bnx2x_link.c')
-rw-r--r-- | drivers/net/bnx2x_link.c | 21 |
1 files changed, 9 insertions, 12 deletions
diff --git a/drivers/net/bnx2x_link.c b/drivers/net/bnx2x_link.c index 371310db2eba..98e3e8fc0ef7 100644 --- a/drivers/net/bnx2x_link.c +++ b/drivers/net/bnx2x_link.c | |||
@@ -1996,7 +1996,7 @@ static u8 bnx2x_emac_program(struct link_params *params, | |||
1996 | /*****************************************************************************/ | 1996 | /*****************************************************************************/ |
1997 | /* External Phy section */ | 1997 | /* External Phy section */ |
1998 | /*****************************************************************************/ | 1998 | /*****************************************************************************/ |
1999 | static void bnx2x_hw_reset(struct bnx2x *bp, u8 port) | 1999 | void bnx2x_ext_phy_hw_reset(struct bnx2x *bp, u8 port) |
2000 | { | 2000 | { |
2001 | bnx2x_set_gpio(bp, MISC_REGISTERS_GPIO_1, | 2001 | bnx2x_set_gpio(bp, MISC_REGISTERS_GPIO_1, |
2002 | MISC_REGISTERS_GPIO_OUTPUT_LOW, port); | 2002 | MISC_REGISTERS_GPIO_OUTPUT_LOW, port); |
@@ -2035,7 +2035,7 @@ static void bnx2x_ext_phy_reset(struct link_params *params, | |||
2035 | params->port); | 2035 | params->port); |
2036 | 2036 | ||
2037 | /* HW reset */ | 2037 | /* HW reset */ |
2038 | bnx2x_hw_reset(bp, params->port); | 2038 | bnx2x_ext_phy_hw_reset(bp, params->port); |
2039 | 2039 | ||
2040 | bnx2x_cl45_write(bp, params->port, | 2040 | bnx2x_cl45_write(bp, params->port, |
2041 | ext_phy_type, | 2041 | ext_phy_type, |
@@ -2106,8 +2106,7 @@ static void bnx2x_ext_phy_reset(struct link_params *params, | |||
2106 | params->port); | 2106 | params->port); |
2107 | 2107 | ||
2108 | /* HW reset */ | 2108 | /* HW reset */ |
2109 | bnx2x_hw_reset(bp, params->port); | 2109 | bnx2x_ext_phy_hw_reset(bp, params->port); |
2110 | |||
2111 | break; | 2110 | break; |
2112 | 2111 | ||
2113 | case PORT_HW_CFG_XGXS_EXT_PHY_TYPE_BCM8481: | 2112 | case PORT_HW_CFG_XGXS_EXT_PHY_TYPE_BCM8481: |
@@ -2118,7 +2117,7 @@ static void bnx2x_ext_phy_reset(struct link_params *params, | |||
2118 | params->port); | 2117 | params->port); |
2119 | 2118 | ||
2120 | /* HW reset */ | 2119 | /* HW reset */ |
2121 | bnx2x_hw_reset(bp, params->port); | 2120 | bnx2x_ext_phy_hw_reset(bp, params->port); |
2122 | 2121 | ||
2123 | bnx2x_cl45_write(bp, params->port, | 2122 | bnx2x_cl45_write(bp, params->port, |
2124 | ext_phy_type, | 2123 | ext_phy_type, |
@@ -2146,7 +2145,7 @@ static void bnx2x_ext_phy_reset(struct link_params *params, | |||
2146 | 2145 | ||
2147 | case PORT_HW_CFG_SERDES_EXT_PHY_TYPE_BCM5482: | 2146 | case PORT_HW_CFG_SERDES_EXT_PHY_TYPE_BCM5482: |
2148 | DP(NETIF_MSG_LINK, "SerDes 5482\n"); | 2147 | DP(NETIF_MSG_LINK, "SerDes 5482\n"); |
2149 | bnx2x_hw_reset(bp, params->port); | 2148 | bnx2x_ext_phy_hw_reset(bp, params->port); |
2150 | break; | 2149 | break; |
2151 | 2150 | ||
2152 | default: | 2151 | default: |
@@ -6573,7 +6572,7 @@ static u8 bnx2x_8727_common_init_phy(struct bnx2x *bp, u32 shmem_base) | |||
6573 | swap_val = REG_RD(bp, NIG_REG_PORT_SWAP); | 6572 | swap_val = REG_RD(bp, NIG_REG_PORT_SWAP); |
6574 | swap_override = REG_RD(bp, NIG_REG_STRAP_OVERRIDE); | 6573 | swap_override = REG_RD(bp, NIG_REG_STRAP_OVERRIDE); |
6575 | 6574 | ||
6576 | bnx2x_hw_reset(bp, 1 ^ (swap_val && swap_override)); | 6575 | bnx2x_ext_phy_hw_reset(bp, 1 ^ (swap_val && swap_override)); |
6577 | msleep(5); | 6576 | msleep(5); |
6578 | 6577 | ||
6579 | if (swap_val && swap_override) | 6578 | if (swap_val && swap_override) |
@@ -6647,7 +6646,7 @@ static u8 bnx2x_8726_common_init_phy(struct bnx2x *bp, u32 shmem_base) | |||
6647 | (1<<(MISC_REGISTERS_GPIO_3 + MISC_REGISTERS_GPIO_PORT_SHIFT))); | 6646 | (1<<(MISC_REGISTERS_GPIO_3 + MISC_REGISTERS_GPIO_PORT_SHIFT))); |
6648 | REG_WR(bp, MISC_REG_GPIO_EVENT_EN, val); | 6647 | REG_WR(bp, MISC_REG_GPIO_EVENT_EN, val); |
6649 | 6648 | ||
6650 | bnx2x_hw_reset(bp, 1); | 6649 | bnx2x_ext_phy_hw_reset(bp, 1); |
6651 | msleep(5); | 6650 | msleep(5); |
6652 | for (port = 0; port < PORT_MAX; port++) { | 6651 | for (port = 0; port < PORT_MAX; port++) { |
6653 | /* Extract the ext phy address for the port */ | 6652 | /* Extract the ext phy address for the port */ |
@@ -6714,9 +6713,7 @@ u8 bnx2x_common_init_phy(struct bnx2x *bp, u32 shmem_base) | |||
6714 | return rc; | 6713 | return rc; |
6715 | } | 6714 | } |
6716 | 6715 | ||
6717 | 6716 | void bnx2x_sfx7101_sp_sw_reset(struct bnx2x *bp, u8 port, u8 phy_addr) | |
6718 | |||
6719 | static void bnx2x_sfx7101_sp_sw_reset(struct bnx2x *bp, u8 port, u8 phy_addr) | ||
6720 | { | 6717 | { |
6721 | u16 val, cnt; | 6718 | u16 val, cnt; |
6722 | 6719 | ||
@@ -7032,7 +7029,7 @@ static u8 bnx2x_sfx7101_flash_download(struct bnx2x *bp, u8 port, | |||
7032 | for (cnt = 0; cnt < 100; cnt++) | 7029 | for (cnt = 0; cnt < 100; cnt++) |
7033 | msleep(5); | 7030 | msleep(5); |
7034 | 7031 | ||
7035 | bnx2x_hw_reset(bp, port); | 7032 | bnx2x_ext_phy_hw_reset(bp, port); |
7036 | 7033 | ||
7037 | for (cnt = 0; cnt < 100; cnt++) | 7034 | for (cnt = 0; cnt < 100; cnt++) |
7038 | msleep(5); | 7035 | msleep(5); |