mirror of
https://github.com/torvalds/linux.git
synced 2026-05-31 10:33:41 +02:00
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:
parent
d1d8392883
commit
7535d70ba0
|
|
@ -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;
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user