From: Herve Codina <herve.codina@bootlin.com>
To: Simon Glass <sjg@chromium.org>
Cc: Devicetree Compiler <devicetree-compiler@vger.kernel.org>,
David Gibson <david@gibson.dropbear.id.au>
Subject: Re: [PATCH 02/13] dtc: Add a list for the top-level fragments of a dts file
Date: Tue, 3 Nov 2026 18:07:14 +0100 [thread overview]
Message-ID: <20261103180714.4b987a45@bootlin.com> (raw)
In-Reply-To: <20261101163721.2458982-3-sjg@chromium.org>
On Sun, 1 Nov 2026 09:36:56 -0700
Simon Glass <sjg@chromium.org> wrote:
> A dts file is made up of top-level fragments: the root node, later
> definitions of a node by label or path, and /delete-node/ or
> /omit-if-no-ref/ with a reference. We would like to deal with each
> fragment on its own before it is merged, for example to apply deletes
> consistently or to run some checks on each one, but that requires
> keeping the fragments apart. At present the parser merges each one into
> the tree as soon as it is parsed.
>
> Add a struct fragment to hold one of these, functions to build one, to
> append it to a list and to free it, and a list of them in struct dt_info
>
> These are not used yet.
>
> Assisted-by: Claude:claude-opus-5-5
> Signed-off-by: Simon Glass <sjg@chromium.org>
> ---
>
> dtc.h | 47 ++++++++++++++++++++++++++++++++++++++++++
> livetree.c | 60 ++++++++++++++++++++++++++++++++++++++++++++++++++++++
> 2 files changed, 107 insertions(+)
>
> diff --git a/dtc.h b/dtc.h
> index 473552e..c0d8e8f 100644
> --- a/dtc.h
> +++ b/dtc.h
> @@ -322,12 +322,59 @@ struct reserve_info *chain_reserve_entry(struct reserve_info *first,
> struct reserve_info *add_reserve_entry(struct reserve_info *list,
> struct reserve_info *new);
>
> +/*
> + * A fragment is one top-level part of a dts file, after the header and any
> + * memory reservations: the root node, a later definition of a node which
> + * refers to it by label or path, or a /delete-node/ or /omit-if-no-ref/ with
> + * a reference. Fragments are kept apart until they are merged into a single
> + * tree.
> + *
> + * This is not the same as an overlay fragment (a fragment@N node), although
> + * in a plugin a fragment may become one when it is merged.
> + */
> +
> +enum fragment_type {
> + FRAGMENT_ROOT, /* / { ... }; */
> + FRAGMENT_REF, /* [label:] &ref { ... }; */
> + FRAGMENT_DELETE_NODE, /* /delete-node/ &ref; */
> + FRAGMENT_OMIT_IF_NO_REF, /* /omit-if-no-ref/ &ref; */
> +};
> +
> +/*
> + * Which fields are used depends on the type:
> + *
> + * FRAGMENT_ROOT node
> + * FRAGMENT_REF ref, path_ref, ref_srcpos and node, plus label
> + * and label_srcpos if there is a label
> + * FRAGMENT_DELETE_NODE ref, path_ref and ref_srcpos
> + * FRAGMENT_OMIT_IF_NO_REF ref, path_ref and ref_srcpos
> + *
> + * Unused fields are NULL or false.
> + */
> +struct fragment {
> + enum fragment_type type;
> + char *ref; /* label or path referred to */
> + bool path_ref; /* ref is a path, i.e. &{...} */
> + struct srcpos *ref_srcpos; /* position of ref */
> + char *label; /* label to add to the target */
> + struct srcpos *label_srcpos; /* position of label */
> + struct node *node; /* the node definition */
> +
> + struct fragment *next; /* NULL at the end of the list */
> +};
> +
> +struct fragment *build_fragment(enum fragment_type type, struct node *node);
> +struct fragment *build_fragment_ref(char *ref, bool path_ref,
> + struct srcpos *srcpos);
> +struct fragment *append_fragment(struct fragment *list, struct fragment *new);
> +void free_fragment(struct fragment *f);
>
> struct dt_info {
> unsigned int dtsflags;
> struct reserve_info *reservelist;
> uint32_t boot_cpuid_phys;
> struct node *dt; /* the device tree */
> + struct fragment *fragments; /* not yet merged into dt */
Why to we need the fragment list in struct dt_info ?
This list is a temporary list built_dt_info() could have the list as parameter and
handle it leading to the struct node *dt fully updated.
Other function using the struct dt_info should never see the temporary fragment
list and so, IMHO, there is no reason to store it in the struct dt_info.
Best regards,
Hervé
next prev parent reply other threads:[~2026-11-03 17:07 UTC|newest]
Thread overview: 44+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-11-01 16:36 [PATCH 00/13] dtc: Merge the fragments of a dts file after parsing Simon Glass
2026-11-01 16:36 ` [PATCH 01/13] tests: Check each error when merging a dts file Simon Glass
2026-11-02 6:32 ` David Gibson
2026-11-04 15:15 ` Simon Glass
2026-11-01 16:36 ` [PATCH 02/13] dtc: Add a list for the top-level fragments of " Simon Glass
2026-11-02 9:49 ` David Gibson
2026-11-03 17:56 ` Herve Codina
2026-11-04 6:32 ` David Gibson
2026-11-04 8:29 ` Herve Codina
2026-11-04 9:34 ` David Gibson
2026-11-04 15:18 ` Simon Glass
2026-11-03 17:07 ` Herve Codina [this message]
2026-11-04 6:28 ` David Gibson
2026-11-01 16:36 ` [PATCH 03/13] dtc: Move the /delete-node/ handling out of the grammar Simon Glass
2026-11-02 9:55 ` David Gibson
2026-11-04 15:15 ` Simon Glass
2026-11-01 16:36 ` [PATCH 04/13] dtc: Move the /omit-if-no-ref/ " Simon Glass
2026-11-02 10:03 ` David Gibson
2026-11-01 16:36 ` [PATCH 05/13] dtc: Move is_ref_relative() to livetree.c Simon Glass
2026-11-02 10:04 ` David Gibson
2026-11-01 16:37 ` [PATCH 06/13] dtc: Move label-reference handling out of the grammar Simon Glass
2026-11-03 7:25 ` David Gibson
2026-11-01 16:37 ` [PATCH 07/13] dtc: Move path-reference " Simon Glass
2026-11-03 7:27 ` David Gibson
2026-11-04 15:16 ` Simon Glass
2026-11-01 16:37 ` [PATCH 08/13] dtc: Move labelled-reference " Simon Glass
2026-11-03 7:29 ` David Gibson
2026-11-04 15:16 ` Simon Glass
2026-11-01 16:37 ` [PATCH 09/13] dtc: Move first-reference " Simon Glass
2026-11-01 16:37 ` [PATCH 10/13] dtc: Add merge_fragment() to merge any fragment Simon Glass
2026-11-01 16:37 ` [PATCH 11/13] dtc: Add helpers for the errors when merging a fragment Simon Glass
2026-11-03 17:23 ` Herve Codina
2026-11-04 6:49 ` David Gibson
2026-11-04 8:55 ` Herve Codina
2026-11-01 16:37 ` [PATCH 12/13] dtc: Merge the fragments of a dts file after parsing Simon Glass
2026-11-03 17:07 ` Herve Codina
2026-11-04 6:50 ` David Gibson
2026-11-04 15:18 ` Simon Glass
2026-11-01 16:37 ` [PATCH 13/13] dtc: Merge the fragments of a dts file in main() Simon Glass
2026-11-03 17:08 ` Herve Codina
2026-11-04 6:51 ` David Gibson
2026-11-04 8:40 ` Herve Codina
2026-11-04 9:47 ` David Gibson
2026-11-04 13:23 ` Herve Codina
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20261103180714.4b987a45@bootlin.com \
--to=herve.codina@bootlin.com \
--cc=david@gibson.dropbear.id.au \
--cc=devicetree-compiler@vger.kernel.org \
--cc=sjg@chromium.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox