The loop ends up converting fwnode to device_node anyway. While at it, handle return value of of_get_mac_address in case of NVMEM. Simplify while loop iteration. Signed-off-by: Rosen Penev --- .../net/ethernet/cavium/thunder/thunder_bgx.c | 27 ++++++++----------- 1 file changed, 11 insertions(+), 16 deletions(-) diff --git a/drivers/net/ethernet/cavium/thunder/thunder_bgx.c b/drivers/net/ethernet/cavium/thunder/thunder_bgx.c index 21495b5dce25..eb5525c1482e 100644 --- a/drivers/net/ethernet/cavium/thunder/thunder_bgx.c +++ b/drivers/net/ethernet/cavium/thunder/thunder_bgx.c @@ -1468,27 +1468,23 @@ static int bgx_init_acpi_phy(struct bgx *bgx) static int bgx_init_of_phy(struct bgx *bgx) { - struct fwnode_handle *fwn; - struct device_node *node = NULL; + struct device_node *node = bgx->pdev->dev.of_node; + struct device_node *child; u8 lmac = 0; - device_for_each_child_node(&bgx->pdev->dev, fwn) { + for_each_child_of_node(node, child) { struct phy_device *pd; struct device_node *phy_np; + int err; - /* Should always be an OF node. But if it is not, we - * cannot handle it, so exit the loop. - */ - node = to_of_node(fwn); - if (!node) - break; - - of_get_mac_address(node, bgx->lmac[lmac].mac); + err = of_get_mac_address(child, bgx->lmac[lmac].mac); + if (err == -EPROBE_DEFER) + goto defer; SET_NETDEV_DEV(bgx->lmac[lmac].netdev, &bgx->pdev->dev); bgx->lmac[lmac].lmacid = lmac; - phy_np = of_parse_phandle(node, "phy-handle", 0); + phy_np = of_parse_phandle(child, "phy-handle", 0); /* If there is no phy or defective firmware presents * this cortina phy, for which there is no driver * support, ignore it. @@ -1504,7 +1500,7 @@ static int bgx_init_of_phy(struct bgx *bgx) lmac++; if (lmac == bgx->max_lmac) { - of_node_put(node); + of_node_put(child); break; } } @@ -1514,14 +1510,13 @@ static int bgx_init_of_phy(struct bgx *bgx) /* We are bailing out, try not to leak device reference counts * for phy devices we may have already found. */ - while (lmac) { + while (lmac--) { if (bgx->lmac[lmac].phydev) { put_device(&bgx->lmac[lmac].phydev->mdio.dev); bgx->lmac[lmac].phydev = NULL; } - lmac--; } - of_node_put(node); + of_node_put(child); return -EPROBE_DEFER; } -- 2.51.0