[RFC PATCH 09/77] dtc: Introduce mark_local_phandles()
Herve Codina <[email protected]> Mon, 12 Jan 2026 15:18:59 +0100
| Newsgroups | org.kernel.vger.devicetree-spec,org.kernel.vger.devicetree-compiler,org.kernel.vger.linux-devicetree,org.kernel.vger.linux-kernel |
|---|---|
| Message-ID | <[email protected]> |
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. Signed-off-by: Herve Codina <[email protected]> --- 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