summaryrefslogtreecommitdiffstats
path: root/drivers/of
diff options
context:
space:
mode:
authorSascha Hauer <s.hauer@pengutronix.de>2020-04-16 18:40:42 +0200
committerSascha Hauer <s.hauer@pengutronix.de>2020-04-16 18:40:42 +0200
commit049a1415c609a1134a15c5f8c4b0a4fe09514f10 (patch)
treedb5de9a483a2a421d3604e1e8b183b05252cfd24 /drivers/of
parenta142fa62b8d3c82f8da95dfb136ca986e7d31dd4 (diff)
parent46312a239f193d41b2862a0b9e57e7bae3ec2f03 (diff)
downloadbarebox-049a1415c609a1134a15c5f8c4b0a4fe09514f10.tar.gz
barebox-049a1415c609a1134a15c5f8c4b0a4fe09514f10.tar.xz
Merge branch 'for-next/misc'
Diffstat (limited to 'drivers/of')
-rw-r--r--drivers/of/base.c33
-rw-r--r--drivers/of/overlay.c2
-rw-r--r--drivers/of/resolver.c4
3 files changed, 24 insertions, 15 deletions
diff --git a/drivers/of/base.c b/drivers/of/base.c
index cf3bdbfe8c..72a3df4e6f 100644
--- a/drivers/of/base.c
+++ b/drivers/of/base.c
@@ -2044,6 +2044,8 @@ int of_set_property(struct device_node *np, const char *name, const void *val, i
return 0;
}
+static int mem_bank_num;
+
int of_add_memory(struct device_node *node, bool dump)
{
const char *device_type;
@@ -2055,14 +2057,13 @@ int of_add_memory(struct device_node *node, bool dump)
return -ENXIO;
while (!of_address_to_resource(node, n, &res)) {
- if (!resource_size(&res)) {
- n++;
+ n++;
+ if (!resource_size(&res))
continue;
- }
- of_add_memory_bank(node, dump, n,
+ of_add_memory_bank(node, dump, mem_bank_num,
res.start, resource_size(&res));
- n++;
+ mem_bank_num++;
}
return 0;
@@ -2086,9 +2087,23 @@ const struct of_device_id of_default_bus_match_table[] = {
}
};
+static void of_probe_memory(void)
+{
+ struct device_node *memory = root_node;
+
+ /* Parse all available node with "memory" device_type */
+ while (1) {
+ memory = of_find_node_by_type(memory, "memory");
+ if (!memory)
+ break;
+
+ of_add_memory(memory, false);
+ }
+}
+
int of_probe(void)
{
- struct device_node *memory, *firmware;
+ struct device_node *firmware;
if(!root_node)
return -ENODEV;
@@ -2099,11 +2114,7 @@ int of_probe(void)
if (of_model)
barebox_set_model(of_model);
- memory = of_find_node_by_path("/memory");
- if (!memory)
- memory = of_find_node_by_type(root_node, "memory");
- if (memory)
- of_add_memory(memory, false);
+ of_probe_memory();
firmware = of_find_node_by_path("/firmware");
if (firmware)
diff --git a/drivers/of/overlay.c b/drivers/of/overlay.c
index a35eddfa08..b79dbff94d 100644
--- a/drivers/of/overlay.c
+++ b/drivers/of/overlay.c
@@ -162,7 +162,7 @@ int of_overlay_apply_tree(struct device_node *root,
{
struct device_node *resolved;
struct device_node *fragment;
- int err;
+ int err = 0;
resolved = of_resolve_phandles(root, overlay);
if (!resolved)
diff --git a/drivers/of/resolver.c b/drivers/of/resolver.c
index 9107c1fbb6..4f720cf860 100644
--- a/drivers/of/resolver.c
+++ b/drivers/of/resolver.c
@@ -160,9 +160,7 @@ static int adjust_local_phandle_references(struct device_node *local_fixups,
}
for_each_child_of_node(local_fixups, child) {
- for_each_child_of_node(overlay, overlay_child)
- if (!of_node_cmp(child->name, overlay_child->name))
- break;
+ overlay_child = of_get_child_by_name(overlay, child->name);
if (!overlay_child)
return -EINVAL;