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)
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
* 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;
}
}
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)
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;
}