net: gem: Extract phy init code
authorMichal Simek <michal.simek@xilinx.com>
Mon, 30 Nov 2015 12:54:43 +0000 (13:54 +0100)
committerMichal Simek <michal.simek@xilinx.com>
Mon, 7 Dec 2015 08:59:04 +0000 (09:59 +0100)
Move phy init code out of zynq_gem_init. DM drivers are normally calling
this code from probe function.

Signed-off-by: Michal Simek <michal.simek@xilinx.com>
drivers/net/zynq_gem.c

index 8f3fe91300666617a92f68c241093938e218342b..86bb75905071667473203f12509169f272e82884 100644 (file)
@@ -310,15 +310,10 @@ static int zynq_gem_setup_mac(struct eth_device *dev)
        return 0;
 }
 
-static int zynq_gem_init(struct eth_device *dev, bd_t * bis)
+static int zynq_phy_init(struct eth_device *dev)
 {
-       u32 i;
        int ret;
-       unsigned long clk_rate = 0;
-       struct zynq_gem_regs *regs = (struct zynq_gem_regs *)dev->iobase;
        struct zynq_gem_priv *priv = dev->priv;
-       struct emac_bd *dummy_tx_bd = &priv->tx_bd[TX_FREE_DESC];
-       struct emac_bd *dummy_rx_bd = &priv->tx_bd[TX_FREE_DESC + 2];
        const u32 supported = SUPPORTED_10baseT_Half |
                        SUPPORTED_10baseT_Full |
                        SUPPORTED_100baseT_Half |
@@ -326,6 +321,33 @@ static int zynq_gem_init(struct eth_device *dev, bd_t * bis)
                        SUPPORTED_1000baseT_Half |
                        SUPPORTED_1000baseT_Full;
 
+       ret = phy_detection(dev);
+       if (ret) {
+               printf("GEM PHY init failed\n");
+               return ret;
+       }
+
+       priv->phydev = phy_connect(priv->bus, priv->phyaddr, dev,
+                                  priv->interface);
+
+       priv->phydev->supported = supported | ADVERTISED_Pause |
+                                 ADVERTISED_Asym_Pause;
+       priv->phydev->advertising = priv->phydev->supported;
+       phy_config(priv->phydev);
+
+       return 0;
+}
+
+static int zynq_gem_init(struct eth_device *dev, bd_t *bis)
+{
+       u32 i;
+       int ret;
+       unsigned long clk_rate = 0;
+       struct zynq_gem_regs *regs = (struct zynq_gem_regs *)dev->iobase;
+       struct zynq_gem_priv *priv = dev->priv;
+       struct emac_bd *dummy_tx_bd = &priv->tx_bd[TX_FREE_DESC];
+       struct emac_bd *dummy_rx_bd = &priv->tx_bd[TX_FREE_DESC + 2];
+
        if (!priv->init) {
                /* Disable all interrupts */
                writel(0xFFFFFFFF, &regs->idr);
@@ -387,19 +409,10 @@ static int zynq_gem_init(struct eth_device *dev, bd_t * bis)
                priv->init++;
        }
 
-       ret = phy_detection(dev);
-       if (ret) {
-               printf("GEM PHY init failed\n");
+       ret = zynq_phy_init(dev);
+       if (ret)
                return ret;
-       }
-
-       priv->phydev = phy_connect(priv->bus, priv->phyaddr, dev,
-                                  priv->interface);
 
-       priv->phydev->supported = supported | ADVERTISED_Pause |
-                                 ADVERTISED_Asym_Pause;
-       priv->phydev->advertising = priv->phydev->supported;
-       phy_config(priv->phydev);
        phy_startup(priv->phydev);
 
        if (!priv->phydev->link) {