diff options
| -rw-r--r-- | drivers/net/ethernet/faraday/ftgmac100.c | 45 |
1 files changed, 20 insertions, 25 deletions
diff --git a/drivers/net/ethernet/faraday/ftgmac100.c b/drivers/net/ethernet/faraday/ftgmac100.c index c9d25b9e6502..c33726e7bff6 100644 --- a/drivers/net/ethernet/faraday/ftgmac100.c +++ b/drivers/net/ethernet/faraday/ftgmac100.c @@ -1483,6 +1483,11 @@ static int ftgmac100_mii_probe(struct net_device *netdev) phy_interface_t phy_intf; int err; + if (!priv->mii_bus) { + dev_err(priv->dev, "No MDIO bus available\n"); + return -ENODEV; + } + /* Default to RGMII. It's a gigabit part after all */ err = of_get_phy_mode(np, &phy_intf); if (err) @@ -1968,32 +1973,28 @@ static int ftgmac100_probe(struct platform_device *pdev) priv->txdes0_edotr_mask = BIT(15); } + if (priv->mac_id == FTGMAC100_FARADAY || + priv->mac_id == FTGMAC100_AST2400 || + priv->mac_id == FTGMAC100_AST2500) { + err = ftgmac100_setup_mdio(netdev); + if (err) + return err; + } + if (np && of_get_property(np, "use-ncsi", NULL)) { err = ftgmac100_probe_ncsi(netdev, priv, pdev); if (err) - goto err_setup_mdio; + goto err; } else if (np && (of_phy_is_fixed_link(np) || of_get_property(np, "phy-handle", NULL))) { struct phy_device *phy; - /* Support "mdio"/"phy" child nodes for ast2400/2500 with - * an embedded MDIO controller. Automatically scan the DTS for - * available PHYs and register them. - */ - if (of_get_property(np, "phy-handle", NULL) && - (priv->mac_id == FTGMAC100_AST2400 || - priv->mac_id == FTGMAC100_AST2500)) { - err = ftgmac100_setup_mdio(netdev); - if (err) - goto err_setup_mdio; - } - 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_phy_connect; + goto err; } /* Indicate that we support PAUSE frames (see comment in @@ -2010,14 +2011,11 @@ static int ftgmac100_probe(struct platform_device *pdev) * PHYs. */ priv->use_ncsi = false; - err = ftgmac100_setup_mdio(netdev); - if (err) - goto err_setup_mdio; err = ftgmac100_mii_probe(netdev); if (err) { dev_err(priv->dev, "MII probe failed!\n"); - goto err_ncsi_dev; + goto err; } } @@ -2025,13 +2023,13 @@ static int ftgmac100_probe(struct platform_device *pdev) priv->rst = devm_reset_control_get_optional_exclusive(priv->dev, NULL); if (IS_ERR(priv->rst)) { err = PTR_ERR(priv->rst); - goto err_phy_connect; + goto err; } if (priv->is_aspeed) { err = ftgmac100_setup_clk(priv); if (err) - goto err_phy_connect; + goto err; /* Disable ast2600 problematic HW arbitration */ if (priv->mac_id == FTGMAC100_AST2600) @@ -2067,21 +2065,18 @@ static int ftgmac100_probe(struct platform_device *pdev) err = register_netdev(netdev); if (err) { dev_err(&pdev->dev, "Failed to register netdev\n"); - goto err_register_netdev; + goto err; } netdev_info(netdev, "irq %d, mapped at %p\n", netdev->irq, priv->base); return 0; -err_register_netdev: -err_phy_connect: +err: ftgmac100_phy_disconnect(netdev); -err_ncsi_dev: if (priv->ndev) ncsi_unregister_dev(priv->ndev); ftgmac100_destroy_mdio(netdev); -err_setup_mdio: return err; } |
