Index: kernel/genarch/include/ofw/ofw_tree.h
===================================================================
--- kernel/genarch/include/ofw/ofw_tree.h	(revision 34bd143ee4c95bdedc6565a0e2150902184b4a44)
+++ kernel/genarch/include/ofw/ofw_tree.h	(revision 36db5ac1d5864f5e63a519565d7d97f7fc18c184)
@@ -134,4 +134,5 @@
 extern ofw_tree_node_t *ofw_tree_find_child_by_device_type(ofw_tree_node_t *node, const char *device_type);
 extern ofw_tree_node_t *ofw_tree_find_peer_by_device_type(ofw_tree_node_t *node, const char *device_type);
+extern ofw_tree_node_t *ofw_tree_find_node_by_handle(ofw_tree_node_t *root, uint32_t handle);
 
 extern bool ofw_fhc_apply_ranges(ofw_tree_node_t *node, ofw_fhc_reg_t *reg, uintptr_t *pa);
Index: kernel/genarch/src/ofw/ofw_tree.c
===================================================================
--- kernel/genarch/src/ofw/ofw_tree.c	(revision 34bd143ee4c95bdedc6565a0e2150902184b4a44)
+++ kernel/genarch/src/ofw/ofw_tree.c	(revision 36db5ac1d5864f5e63a519565d7d97f7fc18c184)
@@ -148,4 +148,33 @@
 }
 
+/** Lookup node with matching node_handle.
+ *
+ * @param root Root of the searched subtree.
+ * @param handle OpenFirmware handle.
+ *
+ * @return NULL if there is no such node or pointer to the matching node.
+ */
+ofw_tree_node_t *ofw_tree_find_node_by_handle(ofw_tree_node_t *root, uint32_t handle)
+{
+	ofw_tree_node_t *node;
+
+	if (root->node_handle == handle)
+		return root;
+
+	if (root->peer) {
+		node = ofw_tree_find_node_by_handle(root->peer, handle);
+		if (node)
+			return node;
+	}
+		
+	if (root->child) {
+		node = ofw_tree_find_node_by_handle(root->child, handle);
+		if (node)
+			return node;
+	}
+	
+	return NULL;	
+}
+
 /** Lookup first peer of given device type.
  *
