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

Commit 5a89394a authored by Johan Hovold's avatar Johan Hovold Committed by David S. Miller
Browse files

net: ethernet: altera: fix fixed-link phydev leaks



Make sure to deregister and free any fixed-link PHY registered using
of_phy_register_fixed_link() on probe errors and on driver unbind.

Fixes: 7cdbc6f7 ("altera tse: add support for fixed-links.")
Signed-off-by: default avatarJohan Hovold <johan@kernel.org>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 3f65047c
Loading
Loading
Loading
Loading
+8 −1
Original line number Original line Diff line number Diff line
@@ -819,6 +819,8 @@ static int init_phy(struct net_device *dev)


	if (!phydev) {
	if (!phydev) {
		netdev_err(dev, "Could not find the PHY\n");
		netdev_err(dev, "Could not find the PHY\n");
		if (fixed_link)
			of_phy_deregister_fixed_link(priv->device->of_node);
		return -ENODEV;
		return -ENODEV;
	}
	}


@@ -1545,10 +1547,15 @@ static int altera_tse_probe(struct platform_device *pdev)
static int altera_tse_remove(struct platform_device *pdev)
static int altera_tse_remove(struct platform_device *pdev)
{
{
	struct net_device *ndev = platform_get_drvdata(pdev);
	struct net_device *ndev = platform_get_drvdata(pdev);
	struct altera_tse_private *priv = netdev_priv(ndev);


	if (ndev->phydev)
	if (ndev->phydev) {
		phy_disconnect(ndev->phydev);
		phy_disconnect(ndev->phydev);


		if (of_phy_is_fixed_link(priv->device->of_node))
			of_phy_deregister_fixed_link(priv->device->of_node);
	}

	platform_set_drvdata(pdev, NULL);
	platform_set_drvdata(pdev, NULL);
	altera_tse_mdio_destroy(ndev);
	altera_tse_mdio_destroy(ndev);
	unregister_netdev(ndev);
	unregister_netdev(ndev);