summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichal Simek <michal.simek@xilinx.com>2015-11-30 13:54:43 +0100
committerMichal Simek <michal.simek@xilinx.com>2015-12-07 09:59:04 +0100
commit68cc3bd8b2863667513008c975cc69187855317f (patch)
treeecbdb266570492fea31a84cdf75e5c14f00edbad
parent64a7ead64bdb965c648df1fc34143e203b1d979a (diff)
net: gem: Extract phy init code
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>
-rw-r--r--drivers/net/zynq_gem.c47
1 files changed, 30 insertions, 17 deletions
diff --git a/drivers/net/zynq_gem.c b/drivers/net/zynq_gem.c
index 8f3fe91300..86bb759050 100644
--- a/drivers/net/zynq_gem.c
+++ b/drivers/net/zynq_gem.c
@@ -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) {