}
        data->mac_control = prop;
 
-       for_each_child_of_node(node, slave_node) {
+       for_each_node_by_name(slave_node, "slave") {
                struct cpsw_slave_data *slave_data = data->slave_data + i;
                const char *phy_id = NULL;
                const void *mac_addr = NULL;
                i++;
        }
 
+       /*
+        * Populate all the child nodes here...
+        */
+       ret = of_platform_populate(node, NULL, NULL, &pdev->dev);
+       /* We do not want to force this, as in some cases may not have child */
+       if (ret)
+               pr_warn("Doesn't have any child node\n");
+
        return 0;
 
 error_ret:
        priv->msg_enable = netif_msg_init(debug_level, CPSW_DEBUG);
        priv->rx_packet_max = max(rx_packet_max, 128);
 
+       /*
+        * This may be required here for child devices.
+        */
+       pm_runtime_enable(&pdev->dev);
+
        if (cpsw_probe_dt(&priv->data, pdev)) {
                pr_err("cpsw: platform data missing\n");
                ret = -ENODEV;
        for (i = 0; i < data->slaves; i++)
                priv->slaves[i].slave_num = i;
 
-       pm_runtime_enable(&pdev->dev);
        priv->clk = clk_get(&pdev->dev, "fck");
        if (IS_ERR(priv->clk)) {
                dev_err(&pdev->dev, "fck is not found\n");