Re: [RFC PATCH 09/77] dtc: Introduce mark_local_phandles()
Herve Codina <[email protected]> Fri, 16 Jan 2026 14:09:12 +0100
| Newsgroups | org.kernel.vger.devicetree-spec,org.kernel.vger.devicetree-compiler,org.kernel.vger.linux-devicetree,org.kernel.vger.linux-kernel |
|---|---|
| Organization | Bootlin |
| Message-ID | <[email protected]> |
Hi David, On Thu, 15 Jan 2026 11:48:44 +1100 David Gibson <[email protected]> wrote: > 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? Well, I can't find any strong case. I would like to avoid passing the full dti (struct dt_info) to flatten_tree() in order to determine if the ref is local or not to set a FDT_REF_LOCAL or a FDT_REF_PHANDLE tag. Also, this flag, set when a FDT_REF_LOCAL tag is parsed from a dtb, is useful later when the ref has to be found based on the phandle value. Indeed, because the is_local flag is set, the phandle value available in the property *must* reference an existing node in the dtb. In other word, in update_phandles_ref_internal(), --- 8< --- if (m->is_local) { phandle = propval_cell_n(prop, m->offset / sizeof(cell_t)); refnode = dti_get_node_by_phandle(dti, phandle); if (!refnode) die("Node not found for phandle 0x%"PRIx32"\n", phandle); m->ref = refnode->fullpath; continue; } else { ... --- 8< --- Best regards, Hervé