]> git.sur5r.net Git - u-boot/blobdiff - scripts/dtc/livetree.c
efi_loader: updating the cursor position
[u-boot] / scripts / dtc / livetree.c
index aecd27875fdde5690fe3a0259d333e0ca3cdf7e5..57b7db2ed1534873ea8f382c958d19038ba86916 100644 (file)
@@ -216,6 +216,29 @@ struct node *merge_nodes(struct node *old_node, struct node *new_node)
        return old_node;
 }
 
+struct node * add_orphan_node(struct node *dt, struct node *new_node, char *ref)
+{
+       static unsigned int next_orphan_fragment = 0;
+       struct node *node;
+       struct property *p;
+       struct data d = empty_data;
+       char *name;
+
+       d = data_add_marker(d, REF_PHANDLE, ref);
+       d = data_append_integer(d, 0xffffffff, 32);
+
+       p = build_property("target", d);
+
+       xasprintf(&name, "fragment@%u",
+                       next_orphan_fragment++);
+       name_node(new_node, "__overlay__");
+       node = build_node(p, new_node);
+       name_node(node, name);
+
+       add_child(dt, node);
+       return dt;
+}
+
 struct node *chain_node(struct node *first, struct node *list)
 {
        assert(first->next_sibling == NULL);
@@ -396,6 +419,12 @@ cell_t propval_cell(struct property *prop)
        return fdt32_to_cpu(*((fdt32_t *)prop->val.val));
 }
 
+cell_t propval_cell_n(struct property *prop, int n)
+{
+       assert(prop->val.len / sizeof(cell_t) >= n);
+       return fdt32_to_cpu(*((fdt32_t *)prop->val.val + n));
+}
+
 struct property *get_property_by_label(struct node *tree, const char *label,
                                       struct node **node)
 {
@@ -479,7 +508,7 @@ struct node *get_node_by_path(struct node *tree, const char *path)
 
        for_each_child(tree, child) {
                if (p && (strlen(child->name) == p-path) &&
-                               strneq(path, child->name, p-path))
+                   strprefixeq(path, p - path, child->name))
                        return get_node_by_path(child, p+1);
                else if (!p && streq(path, child->name))
                        return child;
@@ -512,7 +541,10 @@ struct node *get_node_by_phandle(struct node *tree, cell_t phandle)
 {
        struct node *child, *node;
 
-       assert((phandle != 0) && (phandle != -1));
+       if ((phandle == 0) || (phandle == -1)) {
+               assert(generate_fixups);
+               return NULL;
+       }
 
        if (tree->phandle == phandle) {
                if (tree->deleted)