/* Returns a node pointer with refcount incremented, use of_node_put() on it when done. Caller should hold a reference to np.  */
struct device_node* of_find_next_cache_node(struct device_node *np)
/* Returns a node pointer with refcount incremented, use of_node_put() on it when done. Caller should hold a reference to np.  */
struct device_node* of_find_next_cache_node(struct device_node *np)
{
	struct device_node *child;
	const phandle *handle;
	handle = of_get_property(np, "l2-cache", NULL);
	if (!handle)
		handle = of_get_property(np, "next-level-cache", NULL);
	if (handle)
		return of_find_node_by_phandle(*handle);
	if (!strcmp(np->type, "cpu"))
		for_each_child_of_node(np, child)
			if (!strcmp(child->type, "cache"))
				return child;
	return NULL;
}