#include <linux/init.h> #include <linux/device.h> #include <linux/kernel.h> #include <linux/of.h> #include <linux/of_address.h> #include "board.h" static bool find_by_address(u64 base_address) { struct device_node *dn = of_find_all_nodes(NULL); struct resource res; while (dn) { if (of_can_translate_address(dn) && !of_address_to_resource(dn, 0, &res)) { if (res.start == base_address) { of_node_put(dn); return true; } } dn = of_find_all_nodes(dn); } return false; } bool __init board_staging_dt_node_available(const struct resource *resource, unsigned int num_resources) { unsigned int i; for (i = 0; i < num_resources; i++) { const struct resource *r = resource + i; if (resource_type(r) == IORESOURCE_MEM) if (find_by_address(r->start)) return true; /* DT node available */ } return false; /* Nothing found */ }