]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
net: ftgmac100: Move NCSI probe code into a helper
authorAndrew Lunn <andrew@lunn.ch>
Fri, 6 Feb 2026 03:17:48 +0000 (11:17 +0800)
committerPaolo Abeni <pabeni@redhat.com>
Tue, 10 Feb 2026 12:40:50 +0000 (13:40 +0100)
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>
drivers/net/ethernet/faraday/ftgmac100.c

index e511d6d5f7c2e6cd3ab895e097581469753b65ee..c9d25b9e650213b7841f1e031661137b7c0c75f4 100644 (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;