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 find_by_address(u64 base_address)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_can_translate_address(dn) 15 && !of_address_to_resource(dn, 0, &res)) { 16 if (res.start == base_address) { 17 of_node_put(dn); 18 return true; 19 } 20 } 21 dn = of_find_all_nodes(dn); 22 } 23 24 return false; 25 } 26 board_staging_dt_node_available(const struct resource * resource,unsigned int num_resources)27bool __init board_staging_dt_node_available(const struct resource *resource, 28 unsigned int num_resources) 29 { 30 unsigned int i; 31 32 for (i = 0; i < num_resources; i++) { 33 const struct resource *r = resource + i; 34 35 if (resource_type(r) == IORESOURCE_MEM) 36 if (find_by_address(r->start)) 37 return true; /* DT node available */ 38 } 39 40 return false; /* Nothing found */ 41 } 42