devicetree-compiler.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH 0/3] libfdt: A few more size improvements
@ 2025-12-09 21:50 Tom Rini
  2025-12-09 21:50 ` [PATCH 1/3] libfdt: libfdt_internal.h correct final comment in ASSUME block Tom Rini
                   ` (2 more replies)
  0 siblings, 3 replies; 7+ messages in thread
From: Tom Rini @ 2025-12-09 21:50 UTC (permalink / raw)
  To: devicetree-compiler

Hey all,

Over on the U-Boot list we're talking about re-syncing our copy of
libfdt with the Linux Kernel again (and so with upstream dtc)[1][2].
While we've worked out most of the size increase with the upgrade, there
are still a few places we can do more. This series is three patches. The
first patch fixes a comment from back when Simon was iterating on the
whole assume framework and one spot wasn't updated. The second patch
updates the FDT_RO_PROBE macro to optimize out quicker when we assume a
valid DTB and the third patch brings in one more assume check that
U-Boot has had for ages, but wasn't upstreamed. I did not see if there
was old discussion about it, but it's something U-Boot really needs.

The end result of this series, when applied on top of [2] and some other
fixes U-Boot itself needed is that our SPL size shrinks by 12 bytes on
aarch64 without LTO.

I've run a meson build and test cycle in dtc and everything continues to
pass. I've also thrown all of this through U-Boot and things are fine
there as well.

[1]: https://lore.kernel.org/u-boot/20251113122145.949112-1-marek.vasut+renesas@mailbox.org/
[2]: https://lore.kernel.org/u-boot/20251202193310.149861-1-marek.vasut+renesas@mailbox.org/
-- 
Tom


^ permalink raw reply	[flat|nested] 7+ messages in thread

* [PATCH 1/3] libfdt: libfdt_internal.h correct final comment in ASSUME block
  2025-12-09 21:50 [PATCH 0/3] libfdt: A few more size improvements Tom Rini
@ 2025-12-09 21:50 ` Tom Rini
  2025-12-10  6:42   ` David Gibson
  2025-12-09 21:50 ` [PATCH 2/3] libfdt: Improve size savings in FDT_RO_PROBE slightly Tom Rini
  2025-12-09 21:50 ` [PATCH 3/3] libfdt: fdt_get_name: Add can_assume(VALID_DTB) check Tom Rini
  2 siblings, 1 reply; 7+ messages in thread
From: Tom Rini @ 2025-12-09 21:50 UTC (permalink / raw)
  To: devicetree-compiler

The value "ASSUME_SANE" was never used in the project here, only
ASSUME_PERFECT was used. Update the comment to reflect the correct name.

Fixes: 464962489dcc ("Add a way to control the level of checks in the code")
Signed-off-by: Tom Rini <trini@konsulko.com>
---
 libfdt/libfdt_internal.h | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/libfdt/libfdt_internal.h b/libfdt/libfdt_internal.h
index b60b5456f596..9eb32394eb79 100644
--- a/libfdt/libfdt_internal.h
+++ b/libfdt/libfdt_internal.h
@@ -92,7 +92,7 @@ static inline uint64_t fdt64_ld_(const fdt64_t *p)
  * signature or hash check before using libfdt.
  *
  * For situations where security is not a concern it may be safe to enable
- * ASSUME_SANE.
+ * ASSUME_PERFECT.
  */
 enum {
 	/*
-- 
2.43.0


^ permalink raw reply related	[flat|nested] 7+ messages in thread

* [PATCH 2/3] libfdt: Improve size savings in FDT_RO_PROBE slightly
  2025-12-09 21:50 [PATCH 0/3] libfdt: A few more size improvements Tom Rini
  2025-12-09 21:50 ` [PATCH 1/3] libfdt: libfdt_internal.h correct final comment in ASSUME block Tom Rini
@ 2025-12-09 21:50 ` Tom Rini
  2025-12-10  6:46   ` David Gibson
  2025-12-09 21:50 ` [PATCH 3/3] libfdt: fdt_get_name: Add can_assume(VALID_DTB) check Tom Rini
  2 siblings, 1 reply; 7+ messages in thread
From: Tom Rini @ 2025-12-09 21:50 UTC (permalink / raw)
  To: devicetree-compiler

In the case where we have set FDT_ASSUME_MASK to disable
ASSUME_VALID_DTB checks, we can improve the FDT_RO_PROBE macro slightly.
The first thing that fdt_ro_probe_() does when we can_assume(VALID_DTB)
is true is to return whatever the contents of the totalsize field of the
DTB is. Since the FDT_RO_PROBE macro only cares about a negative value
there, we can optimize this check such that we are to assume it's a
valid DTB, we don't need to do anything here.

Signed-off-by: Tom Rini <trini@konsulko.com>
---
In the case of U-Boot SPL (and similar very early stages) we are
extremely concerned with binary size, and also assume the device tree is
valid. This patch here is not a huge savings for us, but every little
bit helps when talking about something that impacts more than half our
build configurations.
---
 libfdt/libfdt_internal.h | 12 +++++++-----
 1 file changed, 7 insertions(+), 5 deletions(-)

diff --git a/libfdt/libfdt_internal.h b/libfdt/libfdt_internal.h
index 9eb32394eb79..0e103cafa714 100644
--- a/libfdt/libfdt_internal.h
+++ b/libfdt/libfdt_internal.h
@@ -11,11 +11,13 @@
 #define FDT_TAGALIGN(x)		(FDT_ALIGN((x), FDT_TAGSIZE))
 
 int32_t fdt_ro_probe_(const void *fdt);
-#define FDT_RO_PROBE(fdt)					\
-	{							\
-		int32_t totalsize_;				\
-		if ((totalsize_ = fdt_ro_probe_(fdt)) < 0)	\
-			return totalsize_;			\
+#define FDT_RO_PROBE(fdt)						\
+	{								\
+		if (!can_assume(VALID_DTB)) {				\
+			int32_t totalsize_;				\
+			if ((totalsize_ = fdt_ro_probe_(fdt)) < 0)	\
+				return totalsize_;			\
+		}							\
 	}
 
 int fdt_check_node_offset_(const void *fdt, int offset);
-- 
2.43.0


^ permalink raw reply related	[flat|nested] 7+ messages in thread

* [PATCH 3/3] libfdt: fdt_get_name: Add can_assume(VALID_DTB) check
  2025-12-09 21:50 [PATCH 0/3] libfdt: A few more size improvements Tom Rini
  2025-12-09 21:50 ` [PATCH 1/3] libfdt: libfdt_internal.h correct final comment in ASSUME block Tom Rini
  2025-12-09 21:50 ` [PATCH 2/3] libfdt: Improve size savings in FDT_RO_PROBE slightly Tom Rini
@ 2025-12-09 21:50 ` Tom Rini
  2025-12-10  6:47   ` David Gibson
  2 siblings, 1 reply; 7+ messages in thread
From: Tom Rini @ 2025-12-09 21:50 UTC (permalink / raw)
  To: devicetree-compiler

In this function from fdt_ro.c we have (reasonably) some checks of the
DTB before we begin work. However, we do this in a way that we cannot
make use of the normal FDT_RO_PROBE macro and instead have a direct call
to fdt_ro_probe_(). Add a test for !can_assume(VALID_DTB) here first so
that in cases where we are assuming a valid DTB we can omit the checks.

Signed-off-by: Tom Rini <trini@konsulko.com>
---
This is another case which we see in U-Boot SPL, and for the last 6
years now have had the equivalent check. This change ends up being a
noticeable size win for us.
---
 libfdt/fdt_ro.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/libfdt/fdt_ro.c b/libfdt/fdt_ro.c
index b78c4e48f1cb..63494fb7ad90 100644
--- a/libfdt/fdt_ro.c
+++ b/libfdt/fdt_ro.c
@@ -306,8 +306,8 @@ const char *fdt_get_name(const void *fdt, int nodeoffset, int *len)
 	const char *nameptr;
 	int err;
 
-	if (((err = fdt_ro_probe_(fdt)) < 0)
-	    || ((err = fdt_check_node_offset_(fdt, nodeoffset)) < 0))
+	if (!can_assume(VALID_DTB) && (((err = fdt_ro_probe_(fdt)) < 0)
+	    || ((err = fdt_check_node_offset_(fdt, nodeoffset)) < 0)))
 			goto fail;
 
 	nameptr = nh->name;
-- 
2.43.0


^ permalink raw reply related	[flat|nested] 7+ messages in thread

* Re: [PATCH 1/3] libfdt: libfdt_internal.h correct final comment in ASSUME block
  2025-12-09 21:50 ` [PATCH 1/3] libfdt: libfdt_internal.h correct final comment in ASSUME block Tom Rini
@ 2025-12-10  6:42   ` David Gibson
  0 siblings, 0 replies; 7+ messages in thread
From: David Gibson @ 2025-12-10  6:42 UTC (permalink / raw)
  To: Tom Rini; +Cc: devicetree-compiler

[-- Attachment #1: Type: text/plain, Size: 1139 bytes --]

On Tue, Dec 09, 2025 at 03:50:51PM -0600, Tom Rini wrote:
> The value "ASSUME_SANE" was never used in the project here, only
> ASSUME_PERFECT was used. Update the comment to reflect the correct name.
> 
> Fixes: 464962489dcc ("Add a way to control the level of checks in the code")
> Signed-off-by: Tom Rini <trini@konsulko.com>

Appplied, thanks.


> ---
>  libfdt/libfdt_internal.h | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
> 
> diff --git a/libfdt/libfdt_internal.h b/libfdt/libfdt_internal.h
> index b60b5456f596..9eb32394eb79 100644
> --- a/libfdt/libfdt_internal.h
> +++ b/libfdt/libfdt_internal.h
> @@ -92,7 +92,7 @@ static inline uint64_t fdt64_ld_(const fdt64_t *p)
>   * signature or hash check before using libfdt.
>   *
>   * For situations where security is not a concern it may be safe to enable
> - * ASSUME_SANE.
> + * ASSUME_PERFECT.
>   */
>  enum {
>  	/*
> -- 
> 2.43.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

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 833 bytes --]

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [PATCH 2/3] libfdt: Improve size savings in FDT_RO_PROBE slightly
  2025-12-09 21:50 ` [PATCH 2/3] libfdt: Improve size savings in FDT_RO_PROBE slightly Tom Rini
@ 2025-12-10  6:46   ` David Gibson
  0 siblings, 0 replies; 7+ messages in thread
From: David Gibson @ 2025-12-10  6:46 UTC (permalink / raw)
  To: Tom Rini; +Cc: devicetree-compiler

[-- Attachment #1: Type: text/plain, Size: 2041 bytes --]

On Tue, Dec 09, 2025 at 03:50:52PM -0600, Tom Rini wrote:
> In the case where we have set FDT_ASSUME_MASK to disable
> ASSUME_VALID_DTB checks, we can improve the FDT_RO_PROBE macro slightly.
> The first thing that fdt_ro_probe_() does when we can_assume(VALID_DTB)
> is true is to return whatever the contents of the totalsize field of the
> DTB is. Since the FDT_RO_PROBE macro only cares about a negative value
> there, we can optimize this check such that we are to assume it's a
> valid DTB, we don't need to do anything here.
> 
> Signed-off-by: Tom Rini <trini@konsulko.com>

Applied, thanks.

> ---
> In the case of U-Boot SPL (and similar very early stages) we are
> extremely concerned with binary size, and also assume the device tree is
> valid. This patch here is not a huge savings for us, but every little
> bit helps when talking about something that impacts more than half our
> build configurations.
> ---
>  libfdt/libfdt_internal.h | 12 +++++++-----
>  1 file changed, 7 insertions(+), 5 deletions(-)
> 
> diff --git a/libfdt/libfdt_internal.h b/libfdt/libfdt_internal.h
> index 9eb32394eb79..0e103cafa714 100644
> --- a/libfdt/libfdt_internal.h
> +++ b/libfdt/libfdt_internal.h
> @@ -11,11 +11,13 @@
>  #define FDT_TAGALIGN(x)		(FDT_ALIGN((x), FDT_TAGSIZE))
>  
>  int32_t fdt_ro_probe_(const void *fdt);
> -#define FDT_RO_PROBE(fdt)					\
> -	{							\
> -		int32_t totalsize_;				\
> -		if ((totalsize_ = fdt_ro_probe_(fdt)) < 0)	\
> -			return totalsize_;			\
> +#define FDT_RO_PROBE(fdt)						\
> +	{								\
> +		if (!can_assume(VALID_DTB)) {				\
> +			int32_t totalsize_;				\
> +			if ((totalsize_ = fdt_ro_probe_(fdt)) < 0)	\
> +				return totalsize_;			\
> +		}							\
>  	}
>  
>  int fdt_check_node_offset_(const void *fdt, int offset);
> -- 
> 2.43.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

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 833 bytes --]

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [PATCH 3/3] libfdt: fdt_get_name: Add can_assume(VALID_DTB) check
  2025-12-09 21:50 ` [PATCH 3/3] libfdt: fdt_get_name: Add can_assume(VALID_DTB) check Tom Rini
@ 2025-12-10  6:47   ` David Gibson
  0 siblings, 0 replies; 7+ messages in thread
From: David Gibson @ 2025-12-10  6:47 UTC (permalink / raw)
  To: Tom Rini; +Cc: devicetree-compiler

[-- Attachment #1: Type: text/plain, Size: 1596 bytes --]

On Tue, Dec 09, 2025 at 03:50:53PM -0600, Tom Rini wrote:
11;rgb:ffff/ffff/ffff> In this function from fdt_ro.c we have (reasonably) some checks of the
> DTB before we begin work. However, we do this in a way that we cannot
> make use of the normal FDT_RO_PROBE macro and instead have a direct call
> to fdt_ro_probe_(). Add a test for !can_assume(VALID_DTB) here first so
> that in cases where we are assuming a valid DTB we can omit the checks.
> 
> Signed-off-by: Tom Rini <trini@konsulko.com>

Applied, thanks.

> ---
> This is another case which we see in U-Boot SPL, and for the last 6
> years now have had the equivalent check. This change ends up being a
> noticeable size win for us.
> ---
>  libfdt/fdt_ro.c | 4 ++--
>  1 file changed, 2 insertions(+), 2 deletions(-)
> 
> diff --git a/libfdt/fdt_ro.c b/libfdt/fdt_ro.c
> index b78c4e48f1cb..63494fb7ad90 100644
> --- a/libfdt/fdt_ro.c
> +++ b/libfdt/fdt_ro.c
> @@ -306,8 +306,8 @@ const char *fdt_get_name(const void *fdt, int nodeoffset, int *len)
>  	const char *nameptr;
>  	int err;
>  
> -	if (((err = fdt_ro_probe_(fdt)) < 0)
> -	    || ((err = fdt_check_node_offset_(fdt, nodeoffset)) < 0))
> +	if (!can_assume(VALID_DTB) && (((err = fdt_ro_probe_(fdt)) < 0)
> +	    || ((err = fdt_check_node_offset_(fdt, nodeoffset)) < 0)))
>  			goto fail;
>  
>  	nameptr = nh->name;
> -- 
> 2.43.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

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 833 bytes --]

^ permalink raw reply	[flat|nested] 7+ messages in thread

end of thread, other threads:[~2025-12-10  6:50 UTC | newest]

Thread overview: 7+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2025-12-09 21:50 [PATCH 0/3] libfdt: A few more size improvements Tom Rini
2025-12-09 21:50 ` [PATCH 1/3] libfdt: libfdt_internal.h correct final comment in ASSUME block Tom Rini
2025-12-10  6:42   ` David Gibson
2025-12-09 21:50 ` [PATCH 2/3] libfdt: Improve size savings in FDT_RO_PROBE slightly Tom Rini
2025-12-10  6:46   ` David Gibson
2025-12-09 21:50 ` [PATCH 3/3] libfdt: fdt_get_name: Add can_assume(VALID_DTB) check Tom Rini
2025-12-10  6:47   ` David Gibson

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).