Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit c484994e authored by Kostya Belezko's avatar Kostya Belezko Committed by David S. Miller
Browse files

Altera TSE: Add missing phydev



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: default avatarKostya Belezko <bkostya@hotmail.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 2b972acb
Loading
Loading
Loading
Loading
+6 −9
Original line number Diff line number Diff line
@@ -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;
}
@@ -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);
@@ -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);