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>
This commit is contained in:
Michal Simek 2015-11-30 13:54:43 +01:00
parent 64a7ead64b
commit 68cc3bd8b2

View file

@ -310,7 +310,35 @@ static int zynq_gem_setup_mac(struct eth_device *dev)
return 0; return 0;
} }
static int zynq_gem_init(struct eth_device *dev, bd_t * bis) static int zynq_phy_init(struct eth_device *dev)
{
int ret;
struct zynq_gem_priv *priv = dev->priv;
const u32 supported = SUPPORTED_10baseT_Half |
SUPPORTED_10baseT_Full |
SUPPORTED_100baseT_Half |
SUPPORTED_100baseT_Full |
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; u32 i;
int ret; int ret;
@ -319,12 +347,6 @@ static int zynq_gem_init(struct eth_device *dev, bd_t * bis)
struct zynq_gem_priv *priv = dev->priv; struct zynq_gem_priv *priv = dev->priv;
struct emac_bd *dummy_tx_bd = &priv->tx_bd[TX_FREE_DESC]; 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]; 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 |
SUPPORTED_100baseT_Full |
SUPPORTED_1000baseT_Half |
SUPPORTED_1000baseT_Full;
if (!priv->init) { if (!priv->init) {
/* Disable all interrupts */ /* Disable all interrupts */
@ -387,19 +409,10 @@ static int zynq_gem_init(struct eth_device *dev, bd_t * bis)
priv->init++; priv->init++;
} }
ret = phy_detection(dev); ret = zynq_phy_init(dev);
if (ret) { if (ret)
printf("GEM PHY init failed\n");
return 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); phy_startup(priv->phydev);
if (!priv->phydev->link) { if (!priv->phydev->link) {