|
@@ -577,6 +577,24 @@ int of_address_to_resource(struct device_node *dev, int index,
|
|
|
}
|
|
|
EXPORT_SYMBOL_GPL(of_address_to_resource);
|
|
|
|
|
|
+struct device_node *of_find_matching_node_by_address(struct device_node *from,
|
|
|
+ const struct of_device_id *matches,
|
|
|
+ u64 base_address)
|
|
|
+{
|
|
|
+ struct device_node *dn = of_find_matching_node(from, matches);
|
|
|
+ struct resource res;
|
|
|
+
|
|
|
+ while (dn) {
|
|
|
+ if (of_address_to_resource(dn, 0, &res))
|
|
|
+ continue;
|
|
|
+ if (res.start == base_address)
|
|
|
+ return dn;
|
|
|
+ dn = of_find_matching_node(dn, matches);
|
|
|
+ }
|
|
|
+
|
|
|
+ return NULL;
|
|
|
+}
|
|
|
+
|
|
|
|
|
|
/**
|
|
|
* of_iomap - Maps the memory mapped IO for a given device_node
|