Patch "net: bcmgenet: Software reset EPHY after power on" has been added to the 4.3-stable tree
Subsystems (3)
This is a note to let you know that I've just added the patch titled
net: bcmgenet: Software reset EPHY after power on
to the 4.3-stable tree which can be found at:
http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary
The filename of the patch is:
net-bcmgenet-software-reset-ephy-after-power-on.patch
and it can be found in the queue-4.3 subdirectory.
If you, or anyone else, feels it should not be added to the stable tree, please let <[email protected]> know about it.
Quoted 1 line
From foo@baz Tue Nov 17 14:33:46 PST 2015
From: Florian Fainelli <[email protected]>
Date: Thu, 29 Oct 2015 18:11:35 -0700
Subject: net: bcmgenet: Software reset EPHY after power on
From: Florian Fainelli <[email protected]>
[ Upstream commit 5dbebbb44a6ad94aab2cd1a46f7676f255403f64 ]
The EPHY on GENET v1->v3 is extremely finicky, and will show occasional failures based on the timing and reset sequence, ranging from duplicate packets, to extremely high latencies.
Perform an additional software reset, and re-configuration to make sure it is in a consistent and working state.
--- drivers/net/ethernet/broadcom/genet/bcmgenet.c | 4 +++- drivers/net/ethernet/broadcom/genet/bcmgenet.h | 1 + drivers/net/ethernet/broadcom/genet/bcmmii.c | 18 ++++++++++++++++++ 3 files changed, 22 insertions(+), 1 deletion(-)
drivers/net/ethernet/broadcom/genet/bcmgenet.c +3 -1
@@ -907,8 +907,10 @@ static void bcmgenet_power_up(struct bcm }bcmgenet_ext_writel (priv, reg,EXT_EXT_PWR_MGMT ); -if (mode ==GENET_POWER_PASSIVE ) +if (mode ==GENET_POWER_PASSIVE ) {bcmgenet_phy_power_set (priv->dev, true); +bcmgenet_mii_reset (priv->dev); + } }/* ioctl handle special commands that are not present in ethtool. */
drivers/net/ethernet/broadcom/genet/bcmgenet.h +1 -0
@@ -674,6 +674,7 @@ int bcmgenet_mii_init(struct net_deviceint bcmgenet_mii_config (struct net_device *dev);int bcmgenet_mii_probe (struct net_device *dev);void bcmgenet_mii_exit (struct net_device *dev); +void bcmgenet_mii_reset (struct net_device *dev);void bcmgenet_phy_power_set (struct net_device *dev,bool enable);void bcmgenet_mii_setup (struct net_device *dev);
drivers/net/ethernet/broadcom/genet/bcmmii.c +18 -0
@@ -163,6 +163,7 @@ void bcmgenet_mii_setup(struct net_devicphy_print_status (phydev); } +static int bcmgenet_fixed_phy_link_update (struct net_device *dev,struct fixed_phy_status *status) {
@@ -172,6 +173,22 @@ static int bcmgenet_fixed_phy_link_updatreturn 0 ; } +/* Perform a voluntary PHY software reset, since the EPHY is very finicky about +* not doing it and will start corrupting packets +*/ +void bcmgenet_mii_reset (struct net_device *dev) +{ +struct bcmgenet_priv *priv =netdev_priv (dev); + +if (GENET_IS_V4 (priv)) +return ; + +if (priv->phydev) { +phy_init_hw (priv->phydev); +phy_start_aneg (priv->phydev); + } +} +void bcmgenet_phy_power_set (struct net_device *dev,bool enable) {struct bcmgenet_priv *priv =netdev_priv (dev);
@@ -214,6 +231,7 @@ static void bcmgenet_internal_phy_setup( reg =bcmgenet_ext_readl (priv,EXT_EXT_PWR_MGMT ); reg |=EXT_PWR_DN_EN_LD ;bcmgenet_ext_writel (priv, reg,EXT_EXT_PWR_MGMT ); +bcmgenet_mii_reset (dev); }static void bcmgenet_moca_phy_setup (struct bcmgenet_priv *priv)
Patches currently in stable-queue which might be from [email protected] are
queue-4.3/net-bcmgenet-software-reset-ephy-after-power-on.patch