Commit 4305fe23 authored by Liu Jian's avatar Liu Jian Committed by Paolo Abeni
Browse files

net: sparx5: fix error handling in sparx5_port_open()



If phylink_of_phy_connect() fails, the port should be disabled.
If sparx5_serdes_set()/phy_power_on() fails, the port should be
disabled and the phylink should be stopped and disconnected.

Fixes: 946e7fd5 ("net: sparx5: add port module support")
Fixes: f3cad261 ("net: sparx5: add hostmode with phylink support")
Signed-off-by: default avatarLiu Jian <liujian56@huawei.com>
Tested-by: default avatarBjarni Jonasson <bjarni.jonasson@microchip.com>
Reviewed-by: default avatarSteen Hegelund <steen.hegelund@microchip.com>
Link: https://lore.kernel.org/r/20221117125918.203997-1-liujian56@huawei.com


Signed-off-by: default avatarPaolo Abeni <pabeni@redhat.com>
parent aad98abd
Loading
Loading
Loading
Loading
+12 −2
Original line number Diff line number Diff line
@@ -104,7 +104,7 @@ static int sparx5_port_open(struct net_device *ndev)
	err = phylink_of_phy_connect(port->phylink, port->of_node, 0);
	if (err) {
		netdev_err(ndev, "Could not attach to PHY\n");
		return err;
		goto err_connect;
	}

	phylink_start(port->phylink);
@@ -116,9 +116,19 @@ static int sparx5_port_open(struct net_device *ndev)
			err = sparx5_serdes_set(port->sparx5, port, &port->conf);
		else
			err = phy_power_on(port->serdes);
		if (err)
		if (err) {
			netdev_err(ndev, "%s failed\n", __func__);
			goto out_power;
		}
	}

	return 0;

out_power:
	phylink_stop(port->phylink);
	phylink_disconnect_phy(port->phylink);
err_connect:
	sparx5_port_enable(port, false);

	return err;
}