net: abort network initialization if the PHY driver fails
Now that phy_startup() can return an actual error code, check for that error code and abort network initialization if the PHY fails. Signed-off-by: Timur Tabi <timur@freescale.com> Acked-by: Nobuhiro Iwamamatsu <nobuhiro.iwamatsu.yj@renesas.com> (sh_eth part) Acked-by: Stephan Linz <linz@li-pro.net> (Xilinx part, xilinx_axi_emac and xilinx_ll_temac) Reviewed-by: Marek Vasut <marex@denx.de> (FEC part)
This commit is contained in:
parent
6e5b9ac097
commit
11af8d6527
|
@ -510,7 +510,13 @@ static int fec_open(struct eth_device *edev)
|
||||||
fec_eth_phy_config(edev);
|
fec_eth_phy_config(edev);
|
||||||
if (fec->phydev) {
|
if (fec->phydev) {
|
||||||
/* Start up the PHY */
|
/* Start up the PHY */
|
||||||
phy_startup(fec->phydev);
|
int ret = phy_startup(fec->phydev);
|
||||||
|
|
||||||
|
if (ret) {
|
||||||
|
printf("Could not initialize PHY %s\n",
|
||||||
|
fec->phydev->dev->name);
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
speed = fec->phydev->speed;
|
speed = fec->phydev->speed;
|
||||||
} else {
|
} else {
|
||||||
speed = _100BASET;
|
speed = _100BASET;
|
||||||
|
|
|
@ -363,6 +363,9 @@ static int fm_eth_open(struct eth_device *dev, bd_t *bd)
|
||||||
{
|
{
|
||||||
struct fm_eth *fm_eth;
|
struct fm_eth *fm_eth;
|
||||||
struct fsl_enet_mac *mac;
|
struct fsl_enet_mac *mac;
|
||||||
|
#ifdef CONFIG_PHYLIB
|
||||||
|
int ret;
|
||||||
|
#endif
|
||||||
|
|
||||||
fm_eth = (struct fm_eth *)dev->priv;
|
fm_eth = (struct fm_eth *)dev->priv;
|
||||||
mac = fm_eth->mac;
|
mac = fm_eth->mac;
|
||||||
|
@ -384,7 +387,11 @@ static int fm_eth_open(struct eth_device *dev, bd_t *bd)
|
||||||
fmc_tx_port_graceful_stop_disable(fm_eth);
|
fmc_tx_port_graceful_stop_disable(fm_eth);
|
||||||
|
|
||||||
#ifdef CONFIG_PHYLIB
|
#ifdef CONFIG_PHYLIB
|
||||||
phy_startup(fm_eth->phydev);
|
ret = phy_startup(fm_eth->phydev);
|
||||||
|
if (ret) {
|
||||||
|
printf("%s: Could not initialize\n", fm_eth->phydev->dev->name);
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
#else
|
#else
|
||||||
fm_eth->phydev->speed = SPEED_1000;
|
fm_eth->phydev->speed = SPEED_1000;
|
||||||
fm_eth->phydev->link = 1;
|
fm_eth->phydev->link = 1;
|
||||||
|
|
|
@ -415,7 +415,11 @@ static int sh_eth_config(struct sh_eth_dev *eth, bd_t *bd)
|
||||||
goto err_phy_cfg;
|
goto err_phy_cfg;
|
||||||
}
|
}
|
||||||
phy = port_info->phydev;
|
phy = port_info->phydev;
|
||||||
phy_startup(phy);
|
ret = phy_startup(phy);
|
||||||
|
if (ret) {
|
||||||
|
printf(SHETHER_NAME ": phy startup failure\n");
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
val = 0;
|
val = 0;
|
||||||
|
|
||||||
|
|
|
@ -480,6 +480,7 @@ static int tsec_init(struct eth_device *dev, bd_t * bd)
|
||||||
int i;
|
int i;
|
||||||
struct tsec_private *priv = (struct tsec_private *)dev->priv;
|
struct tsec_private *priv = (struct tsec_private *)dev->priv;
|
||||||
tsec_t *regs = priv->regs;
|
tsec_t *regs = priv->regs;
|
||||||
|
int ret;
|
||||||
|
|
||||||
/* Make sure the controller is stopped */
|
/* Make sure the controller is stopped */
|
||||||
tsec_halt(dev);
|
tsec_halt(dev);
|
||||||
|
@ -511,7 +512,12 @@ static int tsec_init(struct eth_device *dev, bd_t * bd)
|
||||||
startup_tsec(dev);
|
startup_tsec(dev);
|
||||||
|
|
||||||
/* Start up the PHY */
|
/* Start up the PHY */
|
||||||
phy_startup(priv->phydev);
|
ret = phy_startup(priv->phydev);
|
||||||
|
if (ret) {
|
||||||
|
printf("Could not initialize PHY %s\n",
|
||||||
|
priv->phydev->dev->name);
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
adjust_link(priv, priv->phydev);
|
adjust_link(priv, priv->phydev);
|
||||||
|
|
||||||
|
|
|
@ -272,7 +272,11 @@ static int setup_phy(struct eth_device *dev)
|
||||||
phydev->advertising = phydev->supported;
|
phydev->advertising = phydev->supported;
|
||||||
priv->phydev = phydev;
|
priv->phydev = phydev;
|
||||||
phy_config(phydev);
|
phy_config(phydev);
|
||||||
phy_startup(phydev);
|
if (phy_startup(phydev)) {
|
||||||
|
printf("axiemac: could not initialize PHY %s\n",
|
||||||
|
phydev->dev->name);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
switch (phydev->speed) {
|
switch (phydev->speed) {
|
||||||
case 1000:
|
case 1000:
|
||||||
|
|
|
@ -232,6 +232,7 @@ static void ll_temac_halt(struct eth_device *dev)
|
||||||
static int ll_temac_init(struct eth_device *dev, bd_t *bis)
|
static int ll_temac_init(struct eth_device *dev, bd_t *bis)
|
||||||
{
|
{
|
||||||
struct ll_temac *ll_temac = dev->priv;
|
struct ll_temac *ll_temac = dev->priv;
|
||||||
|
int ret;
|
||||||
|
|
||||||
printf("%s: Xilinx XPS LocalLink Tri-Mode Ether MAC #%d at 0x%08X.\n",
|
printf("%s: Xilinx XPS LocalLink Tri-Mode Ether MAC #%d at 0x%08X.\n",
|
||||||
dev->name, dev->index, dev->iobase);
|
dev->name, dev->index, dev->iobase);
|
||||||
|
@ -240,7 +241,12 @@ static int ll_temac_init(struct eth_device *dev, bd_t *bis)
|
||||||
return -1;
|
return -1;
|
||||||
|
|
||||||
/* Start up the PHY */
|
/* Start up the PHY */
|
||||||
phy_startup(ll_temac->phydev);
|
ret = phy_startup(ll_temac->phydev);
|
||||||
|
if (ret) {
|
||||||
|
printf("%s: Could not initialize PHY %s\n",
|
||||||
|
dev->name, ll_temac->phydev->dev->name);
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
if (!ll_temac_adjust_link(dev)) {
|
if (!ll_temac_adjust_link(dev)) {
|
||||||
ll_temac_halt(dev);
|
ll_temac_halt(dev);
|
||||||
|
|
Loading…
Reference in New Issue