diff options
author | Yaniv Rosner <yaniv.rosner@broadcom.com> | 2010-09-07 07:41:04 -0400 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2010-09-07 16:15:30 -0400 |
commit | d90d96baf0cc044bcdedc9ee9e925b5937865673 (patch) | |
tree | 7d0861e20126ac481be80454ae33521aaed9f81d /drivers/net/bnx2x/bnx2x_main.c | |
parent | 7aa0711f32bf911add9e2ced165f8006864f973e (diff) |
bnx2x: Move common function into aggregated function
Move all PHY specific logic from bnx2x_main into bnx2x_link.
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>
Diffstat (limited to 'drivers/net/bnx2x/bnx2x_main.c')
-rw-r--r-- | drivers/net/bnx2x/bnx2x_main.c | 103 |
1 files changed, 12 insertions, 91 deletions
diff --git a/drivers/net/bnx2x/bnx2x_main.c b/drivers/net/bnx2x/bnx2x_main.c index 1184677640e5..0210dde760d9 100644 --- a/drivers/net/bnx2x/bnx2x_main.c +++ b/drivers/net/bnx2x/bnx2x_main.c | |||
@@ -1981,7 +1981,7 @@ static inline void bnx2x_attn_int_deasserted0(struct bnx2x *bp, u32 attn) | |||
1981 | { | 1981 | { |
1982 | int port = BP_PORT(bp); | 1982 | int port = BP_PORT(bp); |
1983 | int reg_offset; | 1983 | int reg_offset; |
1984 | u32 val, swap_val, swap_override; | 1984 | u32 val; |
1985 | 1985 | ||
1986 | reg_offset = (port ? MISC_REG_AEU_ENABLE1_FUNC_1_OUT_0 : | 1986 | reg_offset = (port ? MISC_REG_AEU_ENABLE1_FUNC_1_OUT_0 : |
1987 | MISC_REG_AEU_ENABLE1_FUNC_0_OUT_0); | 1987 | MISC_REG_AEU_ENABLE1_FUNC_0_OUT_0); |
@@ -1995,30 +1995,7 @@ static inline void bnx2x_attn_int_deasserted0(struct bnx2x *bp, u32 attn) | |||
1995 | BNX2X_ERR("SPIO5 hw attention\n"); | 1995 | BNX2X_ERR("SPIO5 hw attention\n"); |
1996 | 1996 | ||
1997 | /* Fan failure attention */ | 1997 | /* Fan failure attention */ |
1998 | switch (bp->link_params.phy[EXT_PHY1].type) { | 1998 | bnx2x_hw_reset_phy(&bp->link_params); |
1999 | case PORT_HW_CFG_XGXS_EXT_PHY_TYPE_SFX7101: | ||
2000 | /* Low power mode is controlled by GPIO 2 */ | ||
2001 | bnx2x_set_gpio(bp, MISC_REGISTERS_GPIO_2, | ||
2002 | MISC_REGISTERS_GPIO_OUTPUT_LOW, port); | ||
2003 | /* The PHY reset is controlled by GPIO 1 */ | ||
2004 | bnx2x_set_gpio(bp, MISC_REGISTERS_GPIO_1, | ||
2005 | MISC_REGISTERS_GPIO_OUTPUT_LOW, port); | ||
2006 | break; | ||
2007 | |||
2008 | case PORT_HW_CFG_XGXS_EXT_PHY_TYPE_BCM8727: | ||
2009 | /* The PHY reset is controlled by GPIO 1 */ | ||
2010 | /* fake the port number to cancel the swap done in | ||
2011 | set_gpio() */ | ||
2012 | swap_val = REG_RD(bp, NIG_REG_PORT_SWAP); | ||
2013 | swap_override = REG_RD(bp, NIG_REG_STRAP_OVERRIDE); | ||
2014 | port = (swap_val && swap_override) ^ 1; | ||
2015 | bnx2x_set_gpio(bp, MISC_REGISTERS_GPIO_1, | ||
2016 | MISC_REGISTERS_GPIO_OUTPUT_LOW, port); | ||
2017 | break; | ||
2018 | |||
2019 | default: | ||
2020 | break; | ||
2021 | } | ||
2022 | bnx2x_fan_failure(bp); | 1999 | bnx2x_fan_failure(bp); |
2023 | } | 2000 | } |
2024 | 2001 | ||
@@ -3867,17 +3844,11 @@ static void bnx2x_setup_fan_failure_detection(struct bnx2x *bp) | |||
3867 | */ | 3844 | */ |
3868 | else if (val == SHARED_HW_CFG_FAN_FAILURE_PHY_TYPE) | 3845 | else if (val == SHARED_HW_CFG_FAN_FAILURE_PHY_TYPE) |
3869 | for (port = PORT_0; port < PORT_MAX; port++) { | 3846 | for (port = PORT_0; port < PORT_MAX; port++) { |
3870 | u32 phy_type = | ||
3871 | SHMEM_RD(bp, dev_info.port_hw_config[port]. | ||
3872 | external_phy_config) & | ||
3873 | PORT_HW_CFG_XGXS_EXT_PHY_TYPE_MASK; | ||
3874 | is_required |= | 3847 | is_required |= |
3875 | ((phy_type == | 3848 | bnx2x_fan_failure_det_req( |
3876 | PORT_HW_CFG_XGXS_EXT_PHY_TYPE_SFX7101) || | 3849 | bp, |
3877 | (phy_type == | 3850 | bp->common.shmem_base, |
3878 | PORT_HW_CFG_XGXS_EXT_PHY_TYPE_BCM8727) || | 3851 | port); |
3879 | (phy_type == | ||
3880 | PORT_HW_CFG_XGXS_EXT_PHY_TYPE_BCM8481)); | ||
3881 | } | 3852 | } |
3882 | 3853 | ||
3883 | DP(NETIF_MSG_HW, "fan detection setting: %d\n", is_required); | 3854 | DP(NETIF_MSG_HW, "fan detection setting: %d\n", is_required); |
@@ -4144,17 +4115,8 @@ static int bnx2x_init_common(struct bnx2x *bp) | |||
4144 | return -EBUSY; | 4115 | return -EBUSY; |
4145 | } | 4116 | } |
4146 | 4117 | ||
4147 | switch (bp->link_params.phy[EXT_PHY1].type) { | 4118 | bp->port.need_hw_lock = bnx2x_hw_lock_required(bp, |
4148 | case PORT_HW_CFG_XGXS_EXT_PHY_TYPE_BCM8072: | 4119 | bp->common.shmem_base); |
4149 | case PORT_HW_CFG_XGXS_EXT_PHY_TYPE_BCM8073: | ||
4150 | case PORT_HW_CFG_XGXS_EXT_PHY_TYPE_BCM8726: | ||
4151 | case PORT_HW_CFG_XGXS_EXT_PHY_TYPE_BCM8727: | ||
4152 | bp->port.need_hw_lock = 1; | ||
4153 | break; | ||
4154 | |||
4155 | default: | ||
4156 | break; | ||
4157 | } | ||
4158 | 4120 | ||
4159 | bnx2x_setup_fan_failure_detection(bp); | 4121 | bnx2x_setup_fan_failure_detection(bp); |
4160 | 4122 | ||
@@ -4302,57 +4264,16 @@ static int bnx2x_init_port(struct bnx2x *bp) | |||
4302 | 4264 | ||
4303 | bnx2x_init_block(bp, MCP_BLOCK, init_stage); | 4265 | bnx2x_init_block(bp, MCP_BLOCK, init_stage); |
4304 | bnx2x_init_block(bp, DMAE_BLOCK, init_stage); | 4266 | bnx2x_init_block(bp, DMAE_BLOCK, init_stage); |
4267 | bp->port.need_hw_lock = bnx2x_hw_lock_required(bp, | ||
4268 | bp->common.shmem_base); | ||
4305 | 4269 | ||
4306 | switch (bp->link_params.phy[EXT_PHY1].type) { | 4270 | if (bnx2x_fan_failure_det_req(bp, bp->common.shmem_base, |
4307 | case PORT_HW_CFG_XGXS_EXT_PHY_TYPE_BCM8726: | 4271 | port)) { |
4308 | { | ||
4309 | u32 swap_val, swap_override, aeu_gpio_mask, offset; | ||
4310 | |||
4311 | bnx2x_set_gpio(bp, MISC_REGISTERS_GPIO_3, | ||
4312 | MISC_REGISTERS_GPIO_INPUT_HI_Z, port); | ||
4313 | |||
4314 | /* The GPIO should be swapped if the swap register is | ||
4315 | set and active */ | ||
4316 | swap_val = REG_RD(bp, NIG_REG_PORT_SWAP); | ||
4317 | swap_override = REG_RD(bp, NIG_REG_STRAP_OVERRIDE); | ||
4318 | |||
4319 | /* Select function upon port-swap configuration */ | ||
4320 | if (port == 0) { | ||
4321 | offset = MISC_REG_AEU_ENABLE1_FUNC_0_OUT_0; | ||
4322 | aeu_gpio_mask = (swap_val && swap_override) ? | ||
4323 | AEU_INPUTS_ATTN_BITS_GPIO3_FUNCTION_1 : | ||
4324 | AEU_INPUTS_ATTN_BITS_GPIO3_FUNCTION_0; | ||
4325 | } else { | ||
4326 | offset = MISC_REG_AEU_ENABLE1_FUNC_1_OUT_0; | ||
4327 | aeu_gpio_mask = (swap_val && swap_override) ? | ||
4328 | AEU_INPUTS_ATTN_BITS_GPIO3_FUNCTION_0 : | ||
4329 | AEU_INPUTS_ATTN_BITS_GPIO3_FUNCTION_1; | ||
4330 | } | ||
4331 | val = REG_RD(bp, offset); | ||
4332 | /* add GPIO3 to group */ | ||
4333 | val |= aeu_gpio_mask; | ||
4334 | REG_WR(bp, offset, val); | ||
4335 | } | ||
4336 | bp->port.need_hw_lock = 1; | ||
4337 | break; | ||
4338 | |||
4339 | case PORT_HW_CFG_XGXS_EXT_PHY_TYPE_BCM8727: | ||
4340 | bp->port.need_hw_lock = 1; | ||
4341 | case PORT_HW_CFG_XGXS_EXT_PHY_TYPE_SFX7101: | ||
4342 | /* add SPIO 5 to group 0 */ | ||
4343 | { | ||
4344 | u32 reg_addr = (port ? MISC_REG_AEU_ENABLE1_FUNC_1_OUT_0 : | 4272 | u32 reg_addr = (port ? MISC_REG_AEU_ENABLE1_FUNC_1_OUT_0 : |
4345 | MISC_REG_AEU_ENABLE1_FUNC_0_OUT_0); | 4273 | MISC_REG_AEU_ENABLE1_FUNC_0_OUT_0); |
4346 | val = REG_RD(bp, reg_addr); | 4274 | val = REG_RD(bp, reg_addr); |
4347 | val |= AEU_INPUTS_ATTN_BITS_SPIO5; | 4275 | val |= AEU_INPUTS_ATTN_BITS_SPIO5; |
4348 | REG_WR(bp, reg_addr, val); | 4276 | REG_WR(bp, reg_addr, val); |
4349 | } | ||
4350 | break; | ||
4351 | case PORT_HW_CFG_XGXS_EXT_PHY_TYPE_BCM8073: | ||
4352 | bp->port.need_hw_lock = 1; | ||
4353 | break; | ||
4354 | default: | ||
4355 | break; | ||
4356 | } | 4277 | } |
4357 | bnx2x__link_reset(bp); | 4278 | bnx2x__link_reset(bp); |
4358 | 4279 | ||