On Mon, Jan 12, 2026 at 03:18:59PM +0100, Herve Codina wrote: > In order to have the new FDT_REF_LOCAL tag present in a dtb, the phandle > reference needs to be identify as a local reference. > > This is the purpose of mark_local_phandles(). > > It identifies a phandle reference as a local reference when this > reference points to a local node. > > With that node, the related FDT_REF_LOCAL tag is set in the dtb. I dislike caching redundant information (whether the ref is local) - it's an opportunity for them to get out of sync and cause bugs. Is there a strong case that you can't just determine whether it's local only when you actually go to use it? > > Signed-off-by: Herve Codina > --- > dtc.c | 1 + > dtc.h | 1 + > livetree.c | 26 ++++++++++++++++++++++++++ > 3 files changed, 28 insertions(+) > > diff --git a/dtc.c b/dtc.c > index 88f03ff..d0b4de3 100644 > --- a/dtc.c > +++ b/dtc.c > @@ -334,6 +334,7 @@ int main(int argc, char *argv[]) > } > > update_phandles_ref(dti); > + mark_local_phandles(dti); > > process_checks(force, dti); > > diff --git a/dtc.h b/dtc.h > index 351fe41..08c9f07 100644 > --- a/dtc.h > +++ b/dtc.h > @@ -346,6 +346,7 @@ void generate_fixups_tree(struct dt_info *dti, const char *name); > void generate_local_fixups_tree(struct dt_info *dti, const char *name); > > void update_phandles_ref(struct dt_info *dti); > +void mark_local_phandles(struct dt_info *dti); > > /* Checks */ > > diff --git a/livetree.c b/livetree.c > index 9e30a63..2a0a7ed 100644 > --- a/livetree.c > +++ b/livetree.c > @@ -1196,3 +1196,29 @@ void update_phandles_ref(struct dt_info *dti) > { > update_phandles_ref_internal(dti, dti->dt); > } > + > +static void mark_local_phandles_internal(struct dt_info *dti, > + struct node *node) > +{ > + struct node *c; > + struct property *prop; > + struct marker *m; > + struct node *refnode; > + > + for_each_property(node, prop) { > + m = prop->val.markers; > + for_each_marker_of_type(m, REF_PHANDLE) { > + refnode = get_node_by_ref(dti->dt, m->ref); > + if (refnode) > + m->is_local = true; > + } > + } > + > + for_each_child(node, c) > + mark_local_phandles_internal(dti, c); > +} > + > +void mark_local_phandles(struct dt_info *dti) > +{ > + mark_local_phandles_internal(dti, dti->dt); > +} > -- > 2.52.0 > > -- 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