Commit 20248a71 authored by Andrew Lunn's avatar Andrew Lunn Committed by Paolo Abeni
Browse files

net: ftgmac100: Move DT probe into a helper



By moving all the DT probe code into a helper, the complex if else if
else structure can be simplified. No functional change intended.

Signed-off-by: default avatarAndrew Lunn <andrew@lunn.ch>
Reviewed-by: default avatarSimon Horman <horms@kernel.org>
Signed-off-by: default avatarJacky Chou <jacky_chou@aspeedtech.com>
Link: https://patch.msgid.link/20260206-ftgmac-cleanup-v5-11-ad28a9067ea7@aspeedtech.com


Signed-off-by: default avatarPaolo Abeni <pabeni@redhat.com>
parent 3e523741
Loading
Loading
Loading
Loading
+54 −33
Original line number Diff line number Diff line
@@ -1886,6 +1886,58 @@ static int ftgmac100_probe_ncsi(struct net_device *netdev,
	return err;
}

static int ftgmac100_probe_dt(struct net_device *netdev,
			      struct platform_device *pdev,
			      struct ftgmac100 *priv,
			      struct device_node *np)
{
	struct phy_device *phy;
	int err;

	if (of_get_property(np, "use-ncsi", NULL))
		return ftgmac100_probe_ncsi(netdev, priv, pdev);

	if (of_phy_is_fixed_link(np) ||
	    of_get_property(np, "phy-handle", NULL)) {
		/* Support "mdio"/"phy" child nodes for ast2400/2500
		 * with an embedded MDIO controller. Automatically
		 * scan the DTS for available PHYs and register
		 * them. 2600 has an independent MDIO controller, not
		 * part of the MAC.
		 */
		phy = of_phy_get_and_connect(priv->netdev, np,
					     &ftgmac100_adjust_link);
		if (!phy) {
			dev_err(&pdev->dev, "Failed to connect to phy\n");
			return -EINVAL;
		}

		/* Indicate that we support PAUSE frames (see comment in
		 * Documentation/networking/phy.rst)
		 */
		phy_support_asym_pause(phy);

		/* Display what we found */
		phy_attached_info(phy);
		return 0;
	}

	if (!ftgmac100_has_child_node(np, "mdio")) {
		/* Support legacy ASPEED devicetree descriptions that
		 * decribe a MAC with an embedded MDIO controller but
		 * have no "mdio" child node. Automatically scan the
		 * MDIO bus for available PHYs.
		 */
		err = ftgmac100_mii_probe(netdev);
		if (err) {
			dev_err(priv->dev, "MII probe failed!\n");
			return err;
		}
	}

	return 0;
}

static int ftgmac100_probe(struct platform_device *pdev)
{
	const struct ftgmac100_match_data *match_data;
@@ -1981,41 +2033,10 @@ static int ftgmac100_probe(struct platform_device *pdev)
			return err;
	}

	if (np && of_get_property(np, "use-ncsi", NULL)) {
		err = ftgmac100_probe_ncsi(netdev, priv, pdev);
	if (np) {
		err = ftgmac100_probe_dt(netdev, pdev, priv, np);
		if (err)
			goto err;
	} else if (np && (of_phy_is_fixed_link(np) ||
			  of_get_property(np, "phy-handle", NULL))) {
		struct phy_device *phy;

		phy = of_phy_get_and_connect(priv->netdev, np,
					     &ftgmac100_adjust_link);
		if (!phy) {
			dev_err(&pdev->dev, "Failed to connect to phy\n");
			err = -EINVAL;
			goto err;
		}

		/* Indicate that we support PAUSE frames (see comment in
		 * Documentation/networking/phy.rst)
		 */
		phy_support_asym_pause(phy);

		/* Display what we found */
		phy_attached_info(phy);
	} else if (np && !ftgmac100_has_child_node(np, "mdio")) {
		/* Support legacy ASPEED devicetree descriptions that decribe a
		 * MAC with an embedded MDIO controller but have no "mdio"
		 * child node. Automatically scan the MDIO bus for available
		 * PHYs.
		 */
		err = ftgmac100_mii_probe(netdev);
		if (err) {
			dev_err(priv->dev, "MII probe failed!\n");
			goto err;
		}

	}

	priv->rst = devm_reset_control_get_optional_exclusive(priv->dev, NULL);