Loading drivers/of/resolver.c +17 −31 Original line number Diff line number Diff line Loading @@ -136,8 +136,8 @@ static int update_usages_of_a_phandle_reference(struct device_node *overlay, err = -EINVAL; goto err_fail; } *s++ = '\0'; err = kstrtoint(s, 10, &offset); if (err) goto err_fail; Loading Loading @@ -219,13 +219,11 @@ static int adjust_local_phandle_references(struct device_node *local_fixups, if (off >= prop->length || (off + 4) > prop->length) return -EINVAL; if (phandle_delta) { phandle = be32_to_cpu(*(__be32 *)(prop->value + off)); phandle += phandle_delta; *(__be32 *)(prop->value + off) = cpu_to_be32(phandle); } } } for_each_child_of_node(local_fixups, child) { Loading Loading @@ -267,48 +265,36 @@ int of_resolve_phandles(struct device_node *overlay) phandle phandle, phandle_delta; int err; if (!overlay) pr_err("%s: null overlay\n", __func__); if (overlay && !of_node_check_flag(overlay, OF_DETACHED)) pr_err("%s: node %s not detached\n", __func__, overlay->full_name); if (!overlay || !of_node_check_flag(overlay, OF_DETACHED)) if (!overlay) { pr_err("null overlay\n"); return -EINVAL; } if (!of_node_check_flag(overlay, OF_DETACHED)) { pr_err("overlay not detached\n"); return -EINVAL; } phandle_delta = live_tree_max_phandle() + 1; adjust_overlay_phandles(overlay, phandle_delta); local_fixups = NULL; for_each_child_of_node(overlay, local_fixups) if (!of_node_cmp(local_fixups->name, "__local_fixups__")) break; if (local_fixups != NULL) { err = adjust_local_phandle_references(local_fixups, overlay, 0); err = adjust_local_phandle_references(local_fixups, overlay, phandle_delta); if (err) return err; BUG_ON(adjust_local_phandle_references(local_fixups, overlay, phandle_delta)); } tree_symbols = NULL; overlay_symbols = NULL; overlay_fixups = NULL; tree_symbols = of_find_node_by_path("/__symbols__"); for_each_child_of_node(overlay, child) { if (!overlay_symbols && !of_node_cmp(child->name, "__symbols__")) if (!of_node_cmp(child->name, "__symbols__")) overlay_symbols = child; if (!overlay_fixups && !of_node_cmp(child->name, "__fixups__")) if (!of_node_cmp(child->name, "__fixups__")) overlay_fixups = child; if (overlay_symbols && overlay_fixups) break; } if (!overlay_fixups) { Loading @@ -317,7 +303,7 @@ int of_resolve_phandles(struct device_node *overlay) } if (!tree_symbols) { pr_err("%s: no symbols in root of device tree.\n", __func__); pr_err("no symbols in root of device tree.\n"); err = -EINVAL; goto out; } Loading Loading
drivers/of/resolver.c +17 −31 Original line number Diff line number Diff line Loading @@ -136,8 +136,8 @@ static int update_usages_of_a_phandle_reference(struct device_node *overlay, err = -EINVAL; goto err_fail; } *s++ = '\0'; err = kstrtoint(s, 10, &offset); if (err) goto err_fail; Loading Loading @@ -219,13 +219,11 @@ static int adjust_local_phandle_references(struct device_node *local_fixups, if (off >= prop->length || (off + 4) > prop->length) return -EINVAL; if (phandle_delta) { phandle = be32_to_cpu(*(__be32 *)(prop->value + off)); phandle += phandle_delta; *(__be32 *)(prop->value + off) = cpu_to_be32(phandle); } } } for_each_child_of_node(local_fixups, child) { Loading Loading @@ -267,48 +265,36 @@ int of_resolve_phandles(struct device_node *overlay) phandle phandle, phandle_delta; int err; if (!overlay) pr_err("%s: null overlay\n", __func__); if (overlay && !of_node_check_flag(overlay, OF_DETACHED)) pr_err("%s: node %s not detached\n", __func__, overlay->full_name); if (!overlay || !of_node_check_flag(overlay, OF_DETACHED)) if (!overlay) { pr_err("null overlay\n"); return -EINVAL; } if (!of_node_check_flag(overlay, OF_DETACHED)) { pr_err("overlay not detached\n"); return -EINVAL; } phandle_delta = live_tree_max_phandle() + 1; adjust_overlay_phandles(overlay, phandle_delta); local_fixups = NULL; for_each_child_of_node(overlay, local_fixups) if (!of_node_cmp(local_fixups->name, "__local_fixups__")) break; if (local_fixups != NULL) { err = adjust_local_phandle_references(local_fixups, overlay, 0); err = adjust_local_phandle_references(local_fixups, overlay, phandle_delta); if (err) return err; BUG_ON(adjust_local_phandle_references(local_fixups, overlay, phandle_delta)); } tree_symbols = NULL; overlay_symbols = NULL; overlay_fixups = NULL; tree_symbols = of_find_node_by_path("/__symbols__"); for_each_child_of_node(overlay, child) { if (!overlay_symbols && !of_node_cmp(child->name, "__symbols__")) if (!of_node_cmp(child->name, "__symbols__")) overlay_symbols = child; if (!overlay_fixups && !of_node_cmp(child->name, "__fixups__")) if (!of_node_cmp(child->name, "__fixups__")) overlay_fixups = child; if (overlay_symbols && overlay_fixups) break; } if (!overlay_fixups) { Loading @@ -317,7 +303,7 @@ int of_resolve_phandles(struct device_node *overlay) } if (!tree_symbols) { pr_err("%s: no symbols in root of device tree.\n", __func__); pr_err("no symbols in root of device tree.\n"); err = -EINVAL; goto out; } Loading