On Sat, Nov 16, 2024 at 08:30:19PM +0530, Ayush Singh wrote: > Enable generating fixups entries for path references. These are the same > as the entries for phandles. > > Path properties have empty value in generated overlay. This allows easy > differentiation between path references (size > 0) and path references > (size == 0). > > Signed-off-by: Ayush Singh <ayush@xxxxxxxxxxxxxxx> > --- > checks.c | 6 ++++-- > livetree.c | 19 +++++++++++++++++-- > 2 files changed, 21 insertions(+), 4 deletions(-) > > diff --git a/checks.c b/checks.c > index 6e06aeab5503f78c8a969f8d1d0e96be7b91749e..1ec59c6a1be375e1695b68203a0782cf23ee33fa 100644 > --- a/checks.c > +++ b/checks.c > @@ -651,8 +651,10 @@ static void fixup_path_references(struct check *c, struct dt_info *dti, > > refnode = get_node_by_ref(dt, m->ref); > if (!refnode) { > - FAIL(c, dti, node, "Reference to non-existent node or label \"%s\"\n", > - m->ref); > + if (!(dti->dtsflags & DTSF_PLUGIN)) > + FAIL(c, dti, node, > + "Reference to non-existent node or label \"%s\"\n", > + m->ref); > continue; > } > > diff --git a/livetree.c b/livetree.c > index 49f723002f855764452b30b5a979b6096730a33b..4e26d378e09407d6a395c2f1bbd73c1874de4ae0 100644 > --- a/livetree.c > +++ b/livetree.c > @@ -908,6 +908,13 @@ static bool any_fixup_tree(struct dt_info *dti, struct node *node) > if (!get_node_by_ref(dti->dt, m->ref)) > return true; > } > + m = prop->val.markers; > + for_each_marker_of_type(m, REF_PATH) > + { Opening brace goes on the same line as the for_each() > + if (m->ref) { As for phandle references, you don't need to emit a fixup if the reference can be resolved within the current tree, so you want a get_node_by_ref() before returning true. > + return true; > + } No braces around single statements in dtc style. > + } > } > > for_each_child(node, c) { > @@ -924,8 +931,8 @@ static void add_fixup_entry(struct dt_info *dti, struct node *fn, > { > char *entry; > > - /* m->ref can only be a REF_PHANDLE, but check anyway */ > - assert(m->type == REF_PHANDLE); > + /* m->ref can only be a REF_PHANDLE or REF_PATH, but check anyway */ > + assert(m->type == REF_PHANDLE || m->type == REF_PATH); > > /* The format only permits fixups for references to label, not > * references to path */ > @@ -961,6 +968,14 @@ static void generate_fixups_tree_internal(struct dt_info *dti, > if (!refnode) > add_fixup_entry(dti, fn, node, prop, m); > } > + > + m = prop->val.markers; > + for_each_marker_of_type(m, REF_PATH) > + { > + refnode = get_node_by_ref(dt, m->ref); > + if (!refnode) > + add_fixup_entry(dti, fn, node, prop, m); > + } I don't see how phandle fixups are distinguished from path fixups. > } > > for_each_child(node, c) > -- David Gibson (he or they) | I'll have my music baroque, and my code david AT gibson.dropbear.id.au | minimalist, thank you, not the other way | around. http://www.ozlabs.org/~dgibson
Attachment:
signature.asc
Description: PGP signature