libfdt update increase boot time

Hi All
Since the last sync of libfdt [1], boot time increase of 2.3 seconds on STM32MP1 dk2 board
On v2020.1 tag:
STM32MP> bootstage report Timer summary in microseconds (9 records): Mark Elapsed Stage 0 0 reset 571,804 571,804 board_init_f 3,535,935 2,964,131 board_init_r 3,954,721 418,786 id=64 4,006,006 51,285 id=65 4,006,708 702 main_loop 4,559,423 552,715 id=175
After reverting 'f0921f5098d8 (dt: Sync up to the latest libfdt)', boot time was restored:
STM32MP> bootstage report Timer summary in microseconds (9 records): Mark Elapsed Stage 0 0 reset 568,918 568,918 board_init_f 1,801,471 1,232,553 board_init_r 2,074,570 273,099 id=64 2,101,242 26,672 id=65 2,101,944 702 main_loop 3,229,354 1,127,410 id=175
After some investigation, the new implementation of fdt32_ld() is responsible of this time consuming.
Same issue has been already encountered on TF-A side [2]. TF-A community has decided to not update libfdt with v1.4.7
and stayed on the previous one v1.4.6 to avoid similar regression.
Thanks
Patrice

On Thu, Jan 16, 2020 at 05:56:27PM +0000, Patrice CHOTARD wrote:
Hi All
Since the last sync of libfdt [1], boot time increase of 2.3 seconds on STM32MP1 dk2 board
On v2020.1 tag:
STM32MP> bootstage report Timer summary in microseconds (9 records): Mark Elapsed Stage 0 0 reset 571,804 571,804 board_init_f 3,535,935 2,964,131 board_init_r 3,954,721 418,786 id=64 4,006,006 51,285 id=65 4,006,708 702 main_loop 4,559,423 552,715 id=175
After reverting 'f0921f5098d8 (dt: Sync up to the latest libfdt)', boot time was restored:
STM32MP> bootstage report Timer summary in microseconds (9 records): Mark Elapsed Stage 0 0 reset 568,918 568,918 board_init_f 1,801,471 1,232,553 board_init_r 2,074,570 273,099 id=64 2,101,242 26,672 id=65 2,101,944 702 main_loop 3,229,354 1,127,410 id=175
After some investigation, the new implementation of fdt32_ld() is responsible of this time consuming.
Same issue has been already encountered on TF-A side [2]. TF-A community has decided to not update libfdt with v1.4.7
and stayed on the previous one v1.4.6 to avoid similar regression.
Thanks
Patrice
Ugh, this looks to be related to https://www.spinics.net/lists/devicetree-compiler/msg02230.html and thus the platform doing something wrong. I'm going to chime in. As an interim step can you please post a patch that reverts the two upstream changes and brings back the old behavior? That way I'll hopefully not let this slip my mind to make sure gets fixed here. Thanks!

Hi Patrice,
On Fri, 17 Jan 2020 at 06:56, Patrice CHOTARD patrice.chotard@st.com wrote:
Hi All
Since the last sync of libfdt [1], boot time increase of 2.3 seconds on STM32MP1 dk2 board
On v2020.1 tag:
STM32MP> bootstage report Timer summary in microseconds (9 records): Mark Elapsed Stage 0 0 reset 571,804 571,804 board_init_f 3,535,935 2,964,131 board_init_r 3,954,721 418,786 id=64 4,006,006 51,285 id=65 4,006,708 702 main_loop 4,559,423 552,715 id=175
After reverting 'f0921f5098d8 (dt: Sync up to the latest libfdt)', boot time was restored:
STM32MP> bootstage report Timer summary in microseconds (9 records): Mark Elapsed Stage 0 0 reset 568,918 568,918 board_init_f 1,801,471 1,232,553 board_init_r 2,074,570 273,099 id=64 2,101,242 26,672 id=65 2,101,944 702 main_loop 3,229,354 1,127,410 id=175
After some investigation, the new implementation of fdt32_ld() is responsible of this time consuming.
Same issue has been already encountered on TF-A side [2]. TF-A community has decided to not update libfdt with v1.4.7
and stayed on the previous one v1.4.6 to avoid similar regression.
I think it would be worth having an option to use a simple read instead of the unaligned handling of fdt32_ld. We could have it as an assumption, e.g. fdt_chk_alignment().
Regards, Simon
Thanks
Patrice
participants (3)
-
Patrice CHOTARD
-
Simon Glass
-
Tom Rini