aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/bnx2x/bnx2x_main.c
diff options
context:
space:
mode:
authorYaniv Rosner <yaniv.rosner@broadcom.com>2010-09-07 07:41:04 -0400
committerDavid S. Miller <davem@davemloft.net>2010-09-07 16:15:30 -0400
commitd90d96baf0cc044bcdedc9ee9e925b5937865673 (patch)
tree7d0861e20126ac481be80454ae33521aaed9f81d /drivers/net/bnx2x/bnx2x_main.c
parent7aa0711f32bf911add9e2ced165f8006864f973e (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.c103
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