| From 804741ac7b9f2fdebe3740cb0579cb8d94d49e60 Mon Sep 17 00:00:00 2001 |
| From: Mian Yousaf Kaukab <ykaukab@suse.de> |
| Date: Thu, 18 Mar 2021 09:50:26 +0100 |
| Subject: netsec: restore phy power state after controller reset |
| |
| From: Mian Yousaf Kaukab <ykaukab@suse.de> |
| |
| commit 804741ac7b9f2fdebe3740cb0579cb8d94d49e60 upstream. |
| |
| Since commit 8e850f25b581 ("net: socionext: Stop PHY before resetting |
| netsec") netsec_netdev_init() power downs phy before resetting the |
| controller. However, the state is not restored once the reset is |
| complete. As a result it is not possible to bring up network on a |
| platform with Broadcom BCM5482 phy. |
| |
| Fix the issue by restoring phy power state after controller reset is |
| complete. |
| |
| Fixes: 8e850f25b581 ("net: socionext: Stop PHY before resetting netsec") |
| Cc: stable@vger.kernel.org |
| Signed-off-by: Mian Yousaf Kaukab <ykaukab@suse.de> |
| Signed-off-by: David S. Miller <davem@davemloft.net> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| --- |
| drivers/net/ethernet/socionext/netsec.c | 9 ++++++--- |
| 1 file changed, 6 insertions(+), 3 deletions(-) |
| |
| --- a/drivers/net/ethernet/socionext/netsec.c |
| +++ b/drivers/net/ethernet/socionext/netsec.c |
| @@ -1693,14 +1693,17 @@ static int netsec_netdev_init(struct net |
| goto err1; |
| |
| /* set phy power down */ |
| - data = netsec_phy_read(priv->mii_bus, priv->phy_addr, MII_BMCR) | |
| - BMCR_PDOWN; |
| - netsec_phy_write(priv->mii_bus, priv->phy_addr, MII_BMCR, data); |
| + data = netsec_phy_read(priv->mii_bus, priv->phy_addr, MII_BMCR); |
| + netsec_phy_write(priv->mii_bus, priv->phy_addr, MII_BMCR, |
| + data | BMCR_PDOWN); |
| |
| ret = netsec_reset_hardware(priv, true); |
| if (ret) |
| goto err2; |
| |
| + /* Restore phy power state */ |
| + netsec_phy_write(priv->mii_bus, priv->phy_addr, MII_BMCR, data); |
| + |
| spin_lock_init(&priv->desc_ring[NETSEC_RING_TX].lock); |
| spin_lock_init(&priv->desc_ring[NETSEC_RING_RX].lock); |
| |