Thoughts about U-boot binary size increase

Dear Community,
I'd like to share with you some thoughts about growth of u-boot's binary size for SPL and u-boot proper.
Board: XEA SoC : imx287 (still in active production) Problem: SPL size constrained to ~55 KiB (This cannot be exceeded). Board design constraints u-boot proper size to less than ~448 KiB
When XEA was added (2019.07): - u-boot.sb (SPL): 37 KiB - u-boot.img : 401 KiB
Now (2024.04): - u-boot.sb (SPL): 40 KiB - u-boot.img : 427 KiB
(With a _lot_ of effort put to reduce the size)
Hence, the question - would it be possible to take more concern about the binary size growth?
Maybe CI could catch patches, which enable by default some features and the size is unintentionally increased?
I'm open for any feedback and thoughts on "stopping" the binary size increase.
Best regards,
Lukasz Majewski
--
DENX Software Engineering GmbH, Managing Director: Erika Unter HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany Phone: (+49)-8142-66989-59 Fax: (+49)-8142-66989-80 Email: lukma@denx.de

On 3/28/24 10:20 AM, Lukasz Majewski wrote:
Dear Community,
I'd like to share with you some thoughts about growth of u-boot's binary size for SPL and u-boot proper.
Board: XEA SoC : imx287 (still in active production) Problem: SPL size constrained to ~55 KiB (This cannot be exceeded). Board design constraints u-boot proper size to less than ~448 KiB
When XEA was added (2019.07):
- u-boot.sb (SPL): 37 KiB
- u-boot.img : 401 KiB
Now (2024.04):
- u-boot.sb (SPL): 40 KiB
Do you know which symbol(s) grew in here ?
- u-boot.img : 427 KiB
(With a _lot_ of effort put to reduce the size)
Hence, the question - would it be possible to take more concern about the binary size growth?
Maybe CI could catch patches, which enable by default some features and the size is unintentionally increased?
Try and set CONFIG_BOARD_SIZE_LIMIT and CONFIG_SPL_SIZE_LIMIT for this board, that would trip build error if the size grows too large.

Hi Marek,
On 3/28/24 10:20 AM, Lukasz Majewski wrote:
Dear Community,
I'd like to share with you some thoughts about growth of u-boot's binary size for SPL and u-boot proper.
Board: XEA SoC : imx287 (still in active production) Problem: SPL size constrained to ~55 KiB (This cannot be exceeded). Board design constraints u-boot proper size to less than ~448 KiB
When XEA was added (2019.07):
- u-boot.sb (SPL): 37 KiB
- u-boot.img : 401 KiB
Now (2024.04):
- u-boot.sb (SPL): 40 KiB
Do you know which symbol(s) grew in here ?
I will need to check it.
- u-boot.img : 427 KiB
(With a _lot_ of effort put to reduce the size)
Hence, the question - would it be possible to take more concern about the binary size growth?
Maybe CI could catch patches, which enable by default some features and the size is unintentionally increased?
Try and set CONFIG_BOARD_SIZE_LIMIT and CONFIG_SPL_SIZE_LIMIT for this board, that would trip build error if the size grows too large.
I think that setting CONFIG_BOARD_SIZE_LIMIT and CONFIG_SPL_SIZE_LIMIT would help for rising the "red flag" of the size limit.
However, I would like to signal that there is a problem with u-boot size increase.
Best regards,
Lukasz Majewski
--
DENX Software Engineering GmbH, Managing Director: Erika Unter HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany Phone: (+49)-8142-66989-59 Fax: (+49)-8142-66989-80 Email: lukma@denx.de

On Thu, Mar 28, 2024 at 10:20:49AM +0100, Lukasz Majewski wrote:
Dear Community,
I'd like to share with you some thoughts about growth of u-boot's binary size for SPL and u-boot proper.
Board: XEA SoC : imx287 (still in active production) Problem: SPL size constrained to ~55 KiB (This cannot be exceeded). Board design constraints u-boot proper size to less than ~448 KiB
When XEA was added (2019.07):
- u-boot.sb (SPL): 37 KiB
- u-boot.img : 401 KiB
Now (2024.04):
- u-boot.sb (SPL): 40 KiB
- u-boot.img : 427 KiB
(With a _lot_ of effort put to reduce the size)
Hence, the question - would it be possible to take more concern about the binary size growth?
Maybe CI could catch patches, which enable by default some features and the size is unintentionally increased?
I'm open for any feedback and thoughts on "stopping" the binary size increase.
I think that's pretty amazingly small growth for nearly 5 years of bug fixes and feature enhancements that it's likely minor to make granular. If LTO is not enabled on this platform you should be able to use buildman to give you a "bloat" list from v2019.07 to v2024.04 and see if anything sticks out as being something that can be addressed. But that little growth seems pretty good to me at first glance.

Hi Tom,
On Thu, Mar 28, 2024 at 10:20:49AM +0100, Lukasz Majewski wrote:
Dear Community,
I'd like to share with you some thoughts about growth of u-boot's binary size for SPL and u-boot proper.
Board: XEA SoC : imx287 (still in active production) Problem: SPL size constrained to ~55 KiB (This cannot be exceeded). Board design constraints u-boot proper size to less than ~448 KiB
When XEA was added (2019.07):
- u-boot.sb (SPL): 37 KiB
- u-boot.img : 401 KiB
Now (2024.04):
- u-boot.sb (SPL): 40 KiB
- u-boot.img : 427 KiB
(With a _lot_ of effort put to reduce the size)
Hence, the question - would it be possible to take more concern about the binary size growth?
Maybe CI could catch patches, which enable by default some features and the size is unintentionally increased?
I'm open for any feedback and thoughts on "stopping" the binary size increase.
I think that's pretty amazingly small growth for nearly 5 years of bug fixes and feature enhancements that it's likely minor to make granular.
Those results are after using OF_PLATDATA in SPL and other tricks - like compression of DTB in u-boot proper, so this caused some extra effort to keep small.
If LTO is not enabled on this platform
As Fabio pointed out - I shall check if LTO can be (safely) enabled for imx287.
you should be able to use buildman to give you a "bloat" list from v2019.07 to v2024.04 and see if anything sticks out as being something that can be addressed. But that little growth seems pretty good to me at first glance.
Best regards,
Lukasz Majewski
--
DENX Software Engineering GmbH, Managing Director: Erika Unter HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany Phone: (+49)-8142-66989-59 Fax: (+49)-8142-66989-80 Email: lukma@denx.de

On Thu, Mar 28, 2024 at 01:55:22PM +0100, Lukasz Majewski wrote:
Hi Tom,
On Thu, Mar 28, 2024 at 10:20:49AM +0100, Lukasz Majewski wrote:
Dear Community,
I'd like to share with you some thoughts about growth of u-boot's binary size for SPL and u-boot proper.
Board: XEA SoC : imx287 (still in active production) Problem: SPL size constrained to ~55 KiB (This cannot be exceeded). Board design constraints u-boot proper size to less than ~448 KiB
When XEA was added (2019.07):
- u-boot.sb (SPL): 37 KiB
- u-boot.img : 401 KiB
Now (2024.04):
- u-boot.sb (SPL): 40 KiB
- u-boot.img : 427 KiB
(With a _lot_ of effort put to reduce the size)
Hence, the question - would it be possible to take more concern about the binary size growth?
Maybe CI could catch patches, which enable by default some features and the size is unintentionally increased?
I'm open for any feedback and thoughts on "stopping" the binary size increase.
I think that's pretty amazingly small growth for nearly 5 years of bug fixes and feature enhancements that it's likely minor to make granular.
Those results are after using OF_PLATDATA in SPL and other tricks - like compression of DTB in u-boot proper, so this caused some extra effort to keep small.
Yes, and I'm still pretty happy with that. I would encourage you to do what I suggested, before turning on LTO (as that makes it hard to see symbol size changes due to the nature of LTO) as what you asked for in your original email is what I do, and have done for a very long time now, with 99% of every pull request / branch merge. I'm not saying I didn't miss anything, but I am saying it's a matter of specific changes and not a general problem. And if you hadn't previously set the options to enforce failure to build if hard size constraints are missed, please do so.

Hi Tom,
On Thu, Mar 28, 2024 at 01:55:22PM +0100, Lukasz Majewski wrote:
Hi Tom,
On Thu, Mar 28, 2024 at 10:20:49AM +0100, Lukasz Majewski wrote:
Dear Community,
I'd like to share with you some thoughts about growth of u-boot's binary size for SPL and u-boot proper.
Board: XEA SoC : imx287 (still in active production) Problem: SPL size constrained to ~55 KiB (This cannot be exceeded). Board design constraints u-boot proper size to less than ~448 KiB
When XEA was added (2019.07):
- u-boot.sb (SPL): 37 KiB
- u-boot.img : 401 KiB
Now (2024.04):
- u-boot.sb (SPL): 40 KiB
- u-boot.img : 427 KiB
(With a _lot_ of effort put to reduce the size)
Hence, the question - would it be possible to take more concern about the binary size growth?
Maybe CI could catch patches, which enable by default some features and the size is unintentionally increased?
I'm open for any feedback and thoughts on "stopping" the binary size increase.
I think that's pretty amazingly small growth for nearly 5 years of bug fixes and feature enhancements that it's likely minor to make granular.
Those results are after using OF_PLATDATA in SPL and other tricks - like compression of DTB in u-boot proper, so this caused some extra effort to keep small.
Yes, and I'm still pretty happy with that.
Ok :-)
I would encourage you to do what I suggested, before turning on LTO (as that makes it hard to see symbol size changes due to the nature of LTO) as what you asked for in your original email is what I do, and have done for a very long time now, with 99% of every pull request / branch merge. I'm not saying I didn't miss anything, but I am saying it's a matter of specific changes and not a general problem.
Ok. I will check binman's output for symbol sizes changes.
And if you hadn't previously set the options to enforce failure to build if hard size constraints are missed, please do so.
I will.
Thanks for input and help.
Best regards,
Lukasz Majewski
--
DENX Software Engineering GmbH, Managing Director: Erika Unter HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany Phone: (+49)-8142-66989-59 Fax: (+49)-8142-66989-80 Email: lukma@denx.de

Hi Lukasz,
On Thu, Mar 28, 2024 at 6:20 AM Lukasz Majewski lukma@denx.de wrote:
Dear Community,
I'd like to share with you some thoughts about growth of u-boot's binary size for SPL and u-boot proper.
Board: XEA SoC : imx287 (still in active production) Problem: SPL size constrained to ~55 KiB (This cannot be exceeded). Board design constraints u-boot proper size to less than ~448 KiB
When XEA was added (2019.07): - u-boot.sb (SPL): 37 KiB - u-boot.img : 401 KiB
Now (2024.04): - u-boot.sb (SPL): 40 KiB - u-boot.img : 427 KiB
(With a _lot_ of effort put to reduce the size)
Hence, the question - would it be possible to take more concern about the binary size growth?
Maybe CI could catch patches, which enable by default some features and the size is unintentionally increased?
I'm open for any feedback and thoughts on "stopping" the binary size increase.
In addition to adding CONFIG_BOARD_SIZE_LIMIT and CONFIG_SPL_SIZE_LIMIT checks, could you try the change below?
diff --git a/arch/arm/mach-imx/mxs/Kconfig b/arch/arm/mach-imx/mxs/Kconfig index d2e4205c5ce5..ee8c23d0e04f 100644 --- a/arch/arm/mach-imx/mxs/Kconfig +++ b/arch/arm/mach-imx/mxs/Kconfig @@ -32,6 +32,7 @@ if ARCH_MX28
config MX28 bool + select LTO default y
I did a quick imx28_xea_defconfig build test here:
U-Boot mainline ---------------
$ ls -al u-boot.img -rw-rw-r-- 1 fabio fabio 444128 mar 28 09:11 u-boot.img
$ ls -al spl/u-boot-spl.bin -rwxrwxr-x 1 fabio fabio 39800 mar 28 09:12 spl/u-boot-spl.bin
U-Boot mainline + LTO ---------------------
$ ls -al u-boot.img -rw-rw-r-- 1 fabio fabio 424144 mar 28 09:14 u-boot.img
$ ls -al spl/u-boot-spl.bin -rw-rw-r-- 1 fabio fabio 37664 mar 28 09:14 spl/u-boot-spl.bin

Hi Fabio,
Hi Lukasz,
On Thu, Mar 28, 2024 at 6:20 AM Lukasz Majewski lukma@denx.de wrote:
Dear Community,
I'd like to share with you some thoughts about growth of u-boot's binary size for SPL and u-boot proper.
Board: XEA SoC : imx287 (still in active production) Problem: SPL size constrained to ~55 KiB (This cannot be exceeded). Board design constraints u-boot proper size to less than ~448 KiB
When XEA was added (2019.07): - u-boot.sb (SPL): 37 KiB - u-boot.img : 401 KiB
Now (2024.04): - u-boot.sb (SPL): 40 KiB - u-boot.img : 427 KiB
(With a _lot_ of effort put to reduce the size)
Hence, the question - would it be possible to take more concern about the binary size growth?
Maybe CI could catch patches, which enable by default some features and the size is unintentionally increased?
I'm open for any feedback and thoughts on "stopping" the binary size increase.
In addition to adding CONFIG_BOARD_SIZE_LIMIT and CONFIG_SPL_SIZE_LIMIT checks, could you try the change below?
diff --git a/arch/arm/mach-imx/mxs/Kconfig b/arch/arm/mach-imx/mxs/Kconfig index d2e4205c5ce5..ee8c23d0e04f 100644 --- a/arch/arm/mach-imx/mxs/Kconfig +++ b/arch/arm/mach-imx/mxs/Kconfig @@ -32,6 +32,7 @@ if ARCH_MX28
config MX28 bool
select LTO default y
I did a quick imx28_xea_defconfig build test here:
U-Boot mainline
$ ls -al u-boot.img -rw-rw-r-- 1 fabio fabio 444128 mar 28 09:11 u-boot.img
$ ls -al spl/u-boot-spl.bin -rwxrwxr-x 1 fabio fabio 39800 mar 28 09:12 spl/u-boot-spl.bin
U-Boot mainline + LTO
$ ls -al u-boot.img -rw-rw-r-- 1 fabio fabio 424144 mar 28 09:14 u-boot.img
$ ls -al spl/u-boot-spl.bin -rw-rw-r-- 1 fabio fabio 37664 mar 28 09:14 spl/u-boot-spl.bin
Thanks for the tip - I will check if enabling LTO is not causing any regressions.
Best regards,
Lukasz Majewski
--
DENX Software Engineering GmbH, Managing Director: Erika Unter HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany Phone: (+49)-8142-66989-59 Fax: (+49)-8142-66989-80 Email: lukma@denx.de
participants (4)
-
Fabio Estevam
-
Lukasz Majewski
-
Marek Vasut
-
Tom Rini