net: ftgmac100: Move NCSI probe code into a helper

To help reduce the complexity of the probe function, move the NCSI
probe code into a helper.

The refactoring results in improved cleanup of the fixed PHY in
error paths.

Signed-off-by: Andrew Lunn <andrew@lunn.ch>
Reviewed-by: Simon Horman <horms@kernel.org>
Signed-off-by: Jacky Chou <jacky_chou@aspeedtech.com>
Link: https://patch.msgid.link/20260206-ftgmac-cleanup-v5-8-ad28a9067ea7@aspeedtech.com
Signed-off-by: Paolo Abeni <pabeni@redhat.com>
This commit is contained in:
Andrew Lunn 2026-02-06 11:17:48 +08:00 committed by Paolo Abeni
parent d1d8392883
commit 7535d70ba0

View File

@ -1839,6 +1839,48 @@ static bool ftgmac100_has_child_node(struct device_node *np, const char *name)
return ret;
}
static int ftgmac100_probe_ncsi(struct net_device *netdev,
struct ftgmac100 *priv,
struct platform_device *pdev)
{
struct device_node *np = pdev->dev.of_node;
struct phy_device *phydev;
int err;
if (!IS_ENABLED(CONFIG_NET_NCSI)) {
dev_err(&pdev->dev, "NCSI stack not enabled\n");
return -EINVAL;
}
dev_info(&pdev->dev, "Using NCSI interface\n");
priv->use_ncsi = true;
priv->ndev = ncsi_register_dev(netdev, ftgmac100_ncsi_handler);
if (!priv->ndev)
return -EINVAL;
phydev = fixed_phy_register(&ncsi_phy_status, np);
if (IS_ERR(phydev)) {
dev_err(&pdev->dev, "failed to register fixed PHY device\n");
err = PTR_ERR(phydev);
goto err_register_ndev;
}
err = phy_connect_direct(netdev, phydev, ftgmac100_adjust_link,
PHY_INTERFACE_MODE_RMII);
if (err) {
dev_err(&pdev->dev, "Connecting PHY failed\n");
goto err_register_phy;
}
return 0;
err_register_phy:
fixed_phy_unregister(phydev);
err_register_ndev:
if (priv->ndev)
ncsi_unregister_dev(priv->ndev);
priv->ndev = NULL;
return err;
}
static int ftgmac100_probe(struct platform_device *pdev)
{
const struct ftgmac100_match_data *match_data;
@ -1846,7 +1888,6 @@ static int ftgmac100_probe(struct platform_device *pdev)
struct resource *res;
int irq;
struct net_device *netdev;
struct phy_device *phydev;
struct ftgmac100 *priv;
struct device_node *np;
int err = 0;
@ -1928,32 +1969,9 @@ static int ftgmac100_probe(struct platform_device *pdev)
}
if (np && of_get_property(np, "use-ncsi", NULL)) {
if (!IS_ENABLED(CONFIG_NET_NCSI)) {
dev_err(&pdev->dev, "NCSI stack not enabled\n");
err = -EINVAL;
goto err_phy_connect;
}
dev_info(&pdev->dev, "Using NCSI interface\n");
priv->use_ncsi = true;
priv->ndev = ncsi_register_dev(netdev, ftgmac100_ncsi_handler);
if (!priv->ndev) {
err = -EINVAL;
goto err_phy_connect;
}
phydev = fixed_phy_register(&ncsi_phy_status, np);
if (IS_ERR(phydev)) {
dev_err(&pdev->dev, "failed to register fixed PHY device\n");
err = PTR_ERR(phydev);
goto err_phy_connect;
}
err = phy_connect_direct(netdev, phydev, ftgmac100_adjust_link,
PHY_INTERFACE_MODE_RMII);
if (err) {
dev_err(&pdev->dev, "Connecting PHY failed\n");
goto err_phy_connect;
}
err = ftgmac100_probe_ncsi(netdev, priv, pdev);
if (err)
goto err_setup_mdio;
} else if (np && (of_phy_is_fixed_link(np) ||
of_get_property(np, "phy-handle", NULL))) {
struct phy_device *phy;