diff options
author | Sascha Hauer <s.hauer@pengutronix.de> | 2020-04-16 18:40:42 +0200 |
---|---|---|
committer | Sascha Hauer <s.hauer@pengutronix.de> | 2020-04-16 18:40:42 +0200 |
commit | 049a1415c609a1134a15c5f8c4b0a4fe09514f10 (patch) | |
tree | db5de9a483a2a421d3604e1e8b183b05252cfd24 /drivers/of | |
parent | a142fa62b8d3c82f8da95dfb136ca986e7d31dd4 (diff) | |
parent | 46312a239f193d41b2862a0b9e57e7bae3ec2f03 (diff) | |
download | barebox-049a1415c609a1134a15c5f8c4b0a4fe09514f10.tar.gz barebox-049a1415c609a1134a15c5f8c4b0a4fe09514f10.tar.xz |
Merge branch 'for-next/misc'
Diffstat (limited to 'drivers/of')
-rw-r--r-- | drivers/of/base.c | 33 | ||||
-rw-r--r-- | drivers/of/overlay.c | 2 | ||||
-rw-r--r-- | drivers/of/resolver.c | 4 |
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; |