Patchwork [net-2.6,1/2] bnx2x: Fix PHY locking problem

login
register
mail settings
Submitter Yaniv Rosner
Date Aug. 16, 2010, 4:34 p.m.
Message ID <1281976446.3997.17.camel@lb-tlvb-yanivr.il.broadcom.com>
Download mbox | patch
Permalink /patch/61808/
State Accepted
Delegated to: David Miller
Headers show

Comments

Yaniv Rosner - Aug. 16, 2010, 4:34 p.m.
PHY locking is required between two ports for some external PHYs. Since
initialization was done in the common init function (called only on the 
first port initialization) rather than in the port init function, there
was in fact no PHY locking between the ports. 

Signed-off-by: Yaniv Rosner <yanivr@broadcom.com>
Signed-off-by: Eilon Greenstein <eilong@broadcom.com> 
---
 drivers/net/bnx2x/bnx2x_main.c |    9 +++++++--
 1 files changed, 7 insertions(+), 2 deletions(-)






--
To unsubscribe from this list: send the line "unsubscribe netdev" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
David Miller - Aug. 19, 2010, 6:41 a.m.
From: "Yaniv Rosner" <yaniv.home@broadcom.com>
Date: Mon, 16 Aug 2010 19:34:06 +0300

> PHY locking is required between two ports for some external PHYs. Since
> initialization was done in the common init function (called only on the 
> first port initialization) rather than in the port init function, there
> was in fact no PHY locking between the ports. 
> 
> Signed-off-by: Yaniv Rosner <yanivr@broadcom.com>
> Signed-off-by: Eilon Greenstein <eilong@broadcom.com> 

Applied.
--
To unsubscribe from this list: send the line "unsubscribe netdev" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Patch

diff --git a/drivers/net/bnx2x/bnx2x_main.c b/drivers/net/bnx2x/bnx2x_main.c
index b4ec2b0..f8c3f08 100644
--- a/drivers/net/bnx2x/bnx2x_main.c
+++ b/drivers/net/bnx2x/bnx2x_main.c
@@ -4328,10 +4328,12 @@  static int bnx2x_init_port(struct bnx2x *bp)
 		val |= aeu_gpio_mask;
 		REG_WR(bp, offset, val);
 		}
+		bp->port.need_hw_lock = 1;
 		break;
 
-	case PORT_HW_CFG_XGXS_EXT_PHY_TYPE_SFX7101:
 	case PORT_HW_CFG_XGXS_EXT_PHY_TYPE_BCM8727:
+		bp->port.need_hw_lock = 1;
+	case PORT_HW_CFG_XGXS_EXT_PHY_TYPE_SFX7101:
 		/* add SPIO 5 to group 0 */
 		{
 		u32 reg_addr = (port ? MISC_REG_AEU_ENABLE1_FUNC_1_OUT_0 :
@@ -4341,7 +4343,10 @@  static int bnx2x_init_port(struct bnx2x *bp)
 		REG_WR(bp, reg_addr, val);
 		}
 		break;
-
+	case PORT_HW_CFG_XGXS_EXT_PHY_TYPE_BCM8072:
+	case PORT_HW_CFG_XGXS_EXT_PHY_TYPE_BCM8073:
+		bp->port.need_hw_lock = 1;
+		break;
 	default:
 		break;
 	}