return NULL;
 }
 
+struct device_node *__of_find_node_by_full_path(struct device_node *node,
+                                               const char *path)
+{
+       const char *separator = strchr(path, ':');
+
+       while (node && *path == '/') {
+               struct device_node *tmp = node;
+
+               path++; /* Increment past '/' delimiter */
+               node = __of_find_node_by_path(node, path);
+               of_node_put(tmp);
+               path = strchrnul(path, '/');
+               if (separator && separator < path)
+                       break;
+       }
+       return node;
+}
+
 /**
  *     of_find_node_opts_by_path - Find a node matching a full OF path
  *     @path: Either the full path to match, or if the path does not
        raw_spin_lock_irqsave(&devtree_lock, flags);
        if (!np)
                np = of_node_get(of_root);
-       while (np && *path == '/') {
-               struct device_node *tmp = np;
-
-               path++; /* Increment past '/' delimiter */
-               np = __of_find_node_by_path(np, path);
-               of_node_put(tmp);
-               path = strchrnul(path, '/');
-               if (separator && separator < path)
-                       break;
-       }
+       np = __of_find_node_by_full_path(np, path);
        raw_spin_unlock_irqrestore(&devtree_lock, flags);
        return np;
 }
 
 struct property *__of_prop_dup(const struct property *prop, gfp_t allocflags);
 __printf(2, 3) struct device_node *__of_node_dup(const struct device_node *np, const char *fmt, ...);
 
+struct device_node *__of_find_node_by_full_path(struct device_node *node,
+                                               const char *path);
+
 extern const void *__of_get_property(const struct device_node *np,
                                     const char *name, int *lenp);
 extern int __of_add_property(struct device_node *np, struct property *prop);
 
 #include <linux/errno.h>
 #include <linux/slab.h>
 
+#include "of_private.h"
+
 /* illegal phandle value (set when unresolved) */
 #define OF_PHANDLE_ILLEGAL     0xdeadbeef
 
-/**
- * Find a node with the give full name by recursively following any of
- * the child node links.
- */
-static struct device_node *find_node_by_full_name(struct device_node *node,
-               const char *full_name)
-{
-       struct device_node *child, *found;
-
-       if (!node)
-               return NULL;
-
-       if (!of_node_cmp(node->full_name, full_name))
-               return of_node_get(node);
-
-       for_each_child_of_node(node, child) {
-               found = find_node_by_full_name(child, full_name);
-               if (found != NULL) {
-                       of_node_put(child);
-                       return found;
-               }
-       }
-
-       return NULL;
-}
-
 static phandle live_tree_max_phandle(void)
 {
        struct device_node *node;
                if (err)
                        goto err_fail;
 
-               refnode = find_node_by_full_name(overlay, node_path);
+               refnode = __of_find_node_by_full_path(of_node_get(overlay), node_path);
                if (!refnode)
                        continue;