From: "Luca Ceresoli" <luca.ceresoli@bootlin.com>
To: "Herve Codina" <herve.codina@bootlin.com>,
"David Gibson" <david@gibson.dropbear.id.au>,
"Rob Herring" <robh@kernel.org>,
"Krzysztof Kozlowski" <krzk@kernel.org>,
"Conor Dooley" <conor+dt@kernel.org>
Cc: "Ayush Singh" <ayush@beagleboard.org>,
"Geert Uytterhoeven" <geert@linux-m68k.org>,
<devicetree-compiler@vger.kernel.org>,
<devicetree@vger.kernel.org>, <linux-kernel@vger.kernel.org>,
<devicetree-spec@vger.kernel.org>,
"Hui Pu" <hui.pu@gehealthcare.com>,
"Ian Ray" <ian.ray@gehealthcare.com>,
"Thomas Petazzoni" <thomas.petazzoni@bootlin.com>
Subject: Re: [RFC PATCH 09/15] Introduce structured tag value definition
Date: Wed, 01 Apr 2026 17:11:35 +0200 [thread overview]
Message-ID: <DHHWXWJD78XO.5RNDZHYZE0U4@bootlin.com> (raw)
In-Reply-To: <20260210173349.636766-10-herve.codina@bootlin.com>
On Tue Feb 10, 2026 at 6:33 PM CET, Herve Codina wrote:
> The goal of structured tag values is to ease the introduction of new
> tags in future releases with the capability for an already existing
> release to ignore those structured tags. In order to do that data length
> related to the unknown tag needs to be identify.
^
identified
> Also a flag is present
"Also add a flag"
> to tell an old release if this tag can be simply skipped or must lead to
> an error.
>
> Structured tag value is defined on 32bit and is defined as follow:
>
> Bits | 31 | 30 | 29 28 | 27 0|
> ------+----+----------+-------------------+--------+
> Fields| 1 | CAN_SKIP | DATA_LNG_ENCODING | TAG_ID |
> ------+----+----------+-------------------+--------+
>
> Bit 31 is always set to 1 to identified a structured tag value.
^
identify
> Bit 30 (CAN_SKIP) is set to 1 if the tag can be safely ignore when its
^
ignored
> TAG_ID value is not a known value (unknown tag). If the CAN_SKIP bit is
> set to 0 this tag must not be ignored and an error should be reported
> when its TAG_ID value is not a known value (unknown tag).
>
> Bits 29..28 (DATA_LNG_ENCODING) indicates the length of the data related
I think "LEN" is more common than "LNG".
> to the tag. Following values are possible:
> - 0b00: No data.
> The tag is followed by the next tag value.
>
> - 0b01: 1 cell data
> The tag is followed by a 1 cell (u32) data. The next tag is
> available after this cell.
>
> - 0b10: 2 cells data
> The tag is followed by a 2 cells (2 * u32) data. The next tag
> is available after those two cells.
>
> - 0b11: Data length encoding
> The tag is followed by a cell (u32) indicating the size of the
> data. This size is given in bytes. Data are available right
> after this cell.
>
> The next tag is available after the data. Padding is present
> after the data in order to have the next tag aligned on 32bits.
> This padding is not included in the size of the data.
>
> Bits 27..0 (TAG_ID) is the tag identifier defining a specific tag.
>
> Introduce the structured tag values definition and some specific tags
> reserved for tests based on this structure definition.
>
> Signed-off-by: Herve Codina <herve.codina@bootlin.com>
> ---
> libfdt/fdt.h | 23 +++++++++++++++++++++++
> 1 file changed, 23 insertions(+)
>
> diff --git a/libfdt/fdt.h b/libfdt/fdt.h
> index a07abfc..2e07599 100644
> --- a/libfdt/fdt.h
> +++ b/libfdt/fdt.h
> @@ -49,6 +49,7 @@ struct fdt_property {
>
> #define FDT_MAGIC 0xd00dfeed /* 4: version, 4: total size */
> #define FDT_TAGSIZE sizeof(fdt32_t)
> +#define FDT_CELLSIZE sizeof(fdt32_t)
>
> #define FDT_BEGIN_NODE 0x1 /* Start node: full name */
> #define FDT_END_NODE 0x2 /* End node */
> @@ -57,6 +58,28 @@ struct fdt_property {
> #define FDT_NOP 0x4 /* nop */
> #define FDT_END 0x9
>
> +/* Tag values flags */
> +#define FDT_TAG_STRUCTURED (1<<31)
> +#define FDT_TAG_SKIP_SAFE (1<<30)
This is called CAN_SKIP in the commit message and SKIP_SAFE here. Using a
consistent name would be better IMO.
> +#define FDT_TAG_DATA_MASK (3<<28)
> +#define FDT_TAG_DATA_NONE (0<<28)
> +#define FDT_TAG_DATA_1CELL (1<<28)
> +#define FDT_TAG_DATA_2CELLS (2<<28)
> +#define FDT_TAG_DATA_LNG (3<<28)
I find _LNG (or _LEN) misleading: this is not the length, but rather an
enum value telling you the length is stored in the next cell. What about
FDT_TAG_DATA_VARLEN?
Otherwise looks good.
Luca
--
Luca Ceresoli, Bootlin
Embedded Linux and Kernel engineering
https://bootlin.com
next prev parent reply other threads:[~2026-04-01 15:11 UTC|newest]
Thread overview: 44+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-02-10 17:33 [RFC PATCH 00/15] Add support for structured tags and v18 dtb version Herve Codina
2026-02-10 17:33 ` [RFC PATCH 01/15] dtc: Use a consistent type for basenamelen Herve Codina
2026-02-13 6:14 ` David Gibson
2026-02-10 17:33 ` [RFC PATCH 02/15] fdtdump: Remove dtb version check Herve Codina
2026-02-14 2:12 ` David Gibson
2026-02-10 17:33 ` [RFC PATCH 03/15] fdtdump: Return an error code on wrong tag value Herve Codina
2026-02-23 5:38 ` David Gibson
2026-02-23 8:39 ` Herve Codina
2026-02-24 5:57 ` David Gibson
2026-02-10 17:33 ` [RFC PATCH 04/15] libfdt: fdt_rw: Introduce fdt_downgrade_version() Herve Codina
2026-02-24 6:09 ` David Gibson
2026-02-10 17:33 ` [RFC PATCH 05/15] libfdt: Introduce fdt_first_node() Herve Codina
2026-04-01 15:11 ` Luca Ceresoli
2026-04-03 7:07 ` Herve Codina
2026-02-10 17:33 ` [RFC PATCH 06/15] libfdt: Don't assume that a FDT_BEGIN_NODE tag is available at offset 0 Herve Codina
2026-04-01 15:11 ` Luca Ceresoli
2026-04-07 8:51 ` Herve Codina
2026-02-10 17:33 ` [RFC PATCH 07/15] libfdt: fdt_check_full: Handle FDT_NOP when FDT_END is expected Herve Codina
2026-03-04 10:08 ` David Gibson
2026-02-10 17:33 ` [RFC PATCH 08/15] tests: asm: Introduce treehdr_vers macro Herve Codina
2026-02-10 17:33 ` [RFC PATCH 09/15] Introduce structured tag value definition Herve Codina
2026-04-01 15:11 ` Luca Ceresoli [this message]
2026-04-07 11:42 ` Herve Codina
2026-02-10 17:33 ` [RFC PATCH 10/15] fdtdump: Handle unknown tags Herve Codina
2026-04-01 15:15 ` Luca Ceresoli
2026-04-07 14:03 ` Herve Codina
2026-04-07 15:46 ` Luca Ceresoli
2026-02-10 17:33 ` [RFC PATCH 11/15] flattree: " Herve Codina
2026-04-01 15:15 ` Luca Ceresoli
2026-02-10 17:33 ` [RFC PATCH 12/15] libfdt: Handle unknown tags in fdt_get_next() Herve Codina
2026-04-01 15:17 ` Luca Ceresoli
2026-04-07 14:29 ` Herve Codina
2026-02-10 17:33 ` [RFC PATCH 13/15] libfdt: Introduce fdt_ptr_offset_ Herve Codina
2026-04-01 15:18 ` Luca Ceresoli
2026-02-10 17:33 ` [RFC PATCH 14/15] libfdt: Handle unknown tags on dtb modifications Herve Codina
2026-04-01 15:18 ` Luca Ceresoli
2026-04-07 15:41 ` Herve Codina
2026-02-10 17:33 ` [RFC PATCH 15/15] Introduce v18 dtb version Herve Codina
2026-04-01 15:19 ` Luca Ceresoli
2026-04-07 16:44 ` Herve Codina
2026-04-08 7:55 ` Luca Ceresoli
2026-03-12 7:54 ` [RFC PATCH 00/15] Add support for structured tags and " Herve Codina
2026-03-12 10:21 ` David Gibson
2026-03-16 16:16 ` 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=DHHWXWJD78XO.5RNDZHYZE0U4@bootlin.com \
--to=luca.ceresoli@bootlin.com \
--cc=ayush@beagleboard.org \
--cc=conor+dt@kernel.org \
--cc=david@gibson.dropbear.id.au \
--cc=devicetree-compiler@vger.kernel.org \
--cc=devicetree-spec@vger.kernel.org \
--cc=devicetree@vger.kernel.org \
--cc=geert@linux-m68k.org \
--cc=herve.codina@bootlin.com \
--cc=hui.pu@gehealthcare.com \
--cc=ian.ray@gehealthcare.com \
--cc=krzk@kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=robh@kernel.org \
--cc=thomas.petazzoni@bootlin.com \
/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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.