1#include <linux/init.h>
2#include <linux/device.h>
3#include <linux/kernel.h>
4#include <linux/of.h>
5#include <linux/of_address.h>
6#include "board.h"
7
8static bool find_by_address(u64 base_address)
9{
10	struct device_node *dn = of_find_all_nodes(NULL);
11	struct resource res;
12
13	while (dn) {
14		if (!of_address_to_resource(dn, 0, &res)) {
15			if (res.start == base_address) {
16				of_node_put(dn);
17				return true;
18			}
19		}
20		dn = of_find_all_nodes(dn);
21	}
22
23	return false;
24}
25
26bool __init board_staging_dt_node_available(const struct resource *resource,
27					    unsigned int num_resources)
28{
29	unsigned int i;
30
31	for (i = 0; i < num_resources; i++) {
32		const struct resource *r = resource + i;
33
34		if (resource_type(r) == IORESOURCE_MEM)
35			if (find_by_address(r->start))
36				return true; /* DT node available */
37	}
38
39	return false; /* Nothing found */
40}
41