Skip to content

Commit

Permalink
Altera TSE: Add missing phydev
Browse files Browse the repository at this point in the history
Altera network device doesn't come up after

ifconfig eth0 down
ifconfig eth0 up

The reason behind is clearing priv->phydev during tse_shutdown().
The phydev is not restored back at tse_open().

Resubmiting as to follow Tobias Klauser suggestion.
phy_start/phy_stop are called on each ifup/ifdown and
phy_disconnect is called once during the module removal.

Signed-off-by: Kostya Belezko <bkostya@hotmail.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
  • Loading branch information
Kostya Belezko authored and David S. Miller committed Jan 2, 2015
1 parent 2b972ac commit c484994
Showing 1 changed file with 6 additions and 9 deletions.
15 changes: 6 additions & 9 deletions drivers/net/ethernet/altera/altera_tse_main.c
Original file line number Diff line number Diff line change
Expand Up @@ -1170,10 +1170,6 @@ static int tse_open(struct net_device *dev)
init_error:
free_skbufs(dev);
alloc_skbuf_error:
if (priv->phydev) {
phy_disconnect(priv->phydev);
priv->phydev = NULL;
}
phy_error:
return ret;
}
Expand All @@ -1186,12 +1182,9 @@ static int tse_shutdown(struct net_device *dev)
int ret;
unsigned long int flags;

/* Stop and disconnect the PHY */
if (priv->phydev) {
/* Stop the PHY */
if (priv->phydev)
phy_stop(priv->phydev);
phy_disconnect(priv->phydev);
priv->phydev = NULL;
}

netif_stop_queue(dev);
napi_disable(&priv->napi);
Expand Down Expand Up @@ -1525,6 +1518,10 @@ static int altera_tse_probe(struct platform_device *pdev)
static int altera_tse_remove(struct platform_device *pdev)
{
struct net_device *ndev = platform_get_drvdata(pdev);
struct altera_tse_private *priv = netdev_priv(ndev);

if (priv->phydev)
phy_disconnect(priv->phydev);

platform_set_drvdata(pdev, NULL);
altera_tse_mdio_destroy(ndev);
Expand Down

0 comments on commit c484994

Please sign in to comment.