net: bcmgenet: move PHY initialization from probe() to start() 72/228772/1 accepted/tizen/unified/20200402.155635 submit/tizen/20200331.090714
authorMarek Szyprowski <m.szyprowski@samsung.com>
Wed, 25 Mar 2020 09:01:48 +0000 (10:01 +0100)
committerMarek Szyprowski <m.szyprowski@samsung.com>
Wed, 25 Mar 2020 09:33:13 +0000 (10:33 +0100)
Fix random network failures on subsequent network access by forcing PHY initialization on
every network access. This also fixes sudden link drop from 100baseT to 10baseT observed
from time to time.

Signed-off-by: Marek Szyprowski <m.szyprowski@samsung.com>
Change-Id: I5bb55ce6546dec5449afea1bef036458563f287c

drivers/net/bcmgenet.c

index 8f4848aec68a0ad7341141363e8d215692371331..6ff7ab225db0b23a6fcc6099e18870ac918d9ee7 100644 (file)
@@ -455,11 +455,17 @@ static int bcmgenet_adjust_link(struct bcmgenet_eth_priv *priv)
        return 0;
 }
 
+static int bcmgenet_phy_init(struct bcmgenet_eth_priv *priv, void *dev);
+
 static int bcmgenet_gmac_eth_start(struct udevice *dev)
 {
        struct bcmgenet_eth_priv *priv = dev_get_priv(dev);
        int ret;
 
+       ret = bcmgenet_phy_init(priv, dev);
+       if (ret)
+               return ret;
+
        priv->tx_desc_base = priv->mac_reg + GENET_TX_OFF;
        priv->rx_desc_base = priv->mac_reg + GENET_RX_OFF;
        priv->tx_index = 0x0;
@@ -655,7 +661,7 @@ static int bcmgenet_eth_probe(struct udevice *dev)
 
        priv->bus = miiphy_get_dev_by_name(name);
 
-       return bcmgenet_phy_init(priv, dev);
+       return 0;
 }
 
 static void bcmgenet_gmac_eth_stop(struct udevice *dev)