|
@@ -194,8 +194,11 @@ static int xgene_mdio_reset(struct xgene_mdio_pdata *pdata)
|
|
|
}
|
|
|
|
|
|
ret = xgene_enet_ecc_init(pdata);
|
|
|
- if (ret)
|
|
|
+ if (ret) {
|
|
|
+ if (pdata->dev->of_node)
|
|
|
+ clk_disable_unprepare(pdata->clk);
|
|
|
return ret;
|
|
|
+ }
|
|
|
xgene_gmac_reset(pdata);
|
|
|
|
|
|
return 0;
|
|
@@ -388,8 +391,10 @@ static int xgene_mdio_probe(struct platform_device *pdev)
|
|
|
return ret;
|
|
|
|
|
|
mdio_bus = mdiobus_alloc();
|
|
|
- if (!mdio_bus)
|
|
|
- return -ENOMEM;
|
|
|
+ if (!mdio_bus) {
|
|
|
+ ret = -ENOMEM;
|
|
|
+ goto out_clk;
|
|
|
+ }
|
|
|
|
|
|
mdio_bus->name = "APM X-Gene MDIO bus";
|
|
|
|
|
@@ -418,7 +423,7 @@ static int xgene_mdio_probe(struct platform_device *pdev)
|
|
|
mdio_bus->phy_mask = ~0;
|
|
|
ret = mdiobus_register(mdio_bus);
|
|
|
if (ret)
|
|
|
- goto out;
|
|
|
+ goto out_mdiobus;
|
|
|
|
|
|
acpi_walk_namespace(ACPI_TYPE_DEVICE, ACPI_HANDLE(dev), 1,
|
|
|
acpi_register_phy, NULL, mdio_bus, NULL);
|
|
@@ -426,16 +431,20 @@ static int xgene_mdio_probe(struct platform_device *pdev)
|
|
|
}
|
|
|
|
|
|
if (ret)
|
|
|
- goto out;
|
|
|
+ goto out_mdiobus;
|
|
|
|
|
|
pdata->mdio_bus = mdio_bus;
|
|
|
xgene_mdio_status = true;
|
|
|
|
|
|
return 0;
|
|
|
|
|
|
-out:
|
|
|
+out_mdiobus:
|
|
|
mdiobus_free(mdio_bus);
|
|
|
|
|
|
+out_clk:
|
|
|
+ if (dev->of_node)
|
|
|
+ clk_disable_unprepare(pdata->clk);
|
|
|
+
|
|
|
return ret;
|
|
|
}
|
|
|
|