Boot failure on Rock-pi-4-a when compiling with clang.

Ying-Chun Liu (PaulLiu) paulliu at debian.org
Thu Aug 3 02:30:20 CEST 2023


Hi all,

I'd like to have some ideas for debugging this conditions.
When compiling with default gnu toolchain. It works great.

When compiling with clang (clang-14 or clang-15),
I'll get hang sometimes.
The following are two boot logs:

1.
   U-Boot SPL 2023.10-rc1-00207-g38dedebc54-dirty (Aug 03 2023 - 08:08:00 +0800)
   Trying to boot from MMC1
   ## Checking hash(es) for config config-1 ... OK
   ## Checking hash(es) for Image atf-1 ... sha256+ OK
   ## Checking hash(es) for Image u-boot ... sha256+ OK
   ## Checking hash(es) for Image fdt-1 ... sha256+ OK
   ## Checking hash(es) for Image atf-2 ... sha256+ OK
   ## Checking hash(es) for Image atf-3 ... sha256+ OK
   ## Checking hash(es) for Image atf-4 ... sha256+ OK
   spl_load_fit_image: Skip load 'atf-5': image size is 0!


   U-Boot 2023.10-rc1-00207-g38dedebc54-dirty (Aug 03 2023 - 08:08:00 +0800)

   SoC: Rockchip rk3399
   Reset cause: POR
   Model: Radxa ROCK Pi 4A
   DRAM:  initcall sequence 00000000002aeb80 failed at call 00000000002042a8 (err=-
   19)
   ### ERROR ### Please RESET the board ###

2.
   U-Boot TPL 2023.04-maybe-dirty (Jan 01 1970 - 00:00:00)
   lpddr4_set_rate: change freq to 400MHz 0, 1
   Channel 0: LPDDR4, 400MHz
   BW=32 Col=10 Bk=8 CS0 Row=16/15 CS=1 Die BW=16 Size=2048MB
   Channel 1: LPDDR4, 400MHz
   BW=32 Col=10 Bk=8 CS0 Row=16/15 CS=1 Die BW=16 Size=2048MB
   256B stride
   lpddr4_set_rate: change freq to 800MHz 1, 0
   Trying to boot from BOOTROM
   Returning to boot ROM...

   U-Boot SPL 2023.04-maybe-dirty (Jan 01 1970 - 00:00:00 +0000)
   Trying to boot from MMC1
   fdt_addr: 0x2e9c88
   Device tree error at node '__symbols__'
   Some drivers failed to bind
   initcall sequence 00000000002a95f8 failed at call 0000000000224138 (err=-11)
   ### ERROR ### Please RESET the board ###

As you can see, the bug happened at difference places. For the difference of 1 and 2, I just turn on 
the "fastboot over UDP" function.

Bisect is not working. Because if I keep turn on/off more extra functions (like fastboot over USB) 
it can boot sometimes. It seems to me that this could be some alignment or size of code problem 
because if I turn on something, the size of the binaries will be different. And some of it works, 
some not.

Now I only know that v2023.01 works well. And v2023.04 is unstable. I tried to bisect between them 
but found an unrelated commit. Because some bad commit could runs good just because of the probability.

Any ideas on how to debug this further?

I'm building U-boot by.
make O="/tmp/a1" \
      CROSS_COMPILE="aarch64-linux-gnu-" \
      CC="clang -target aarch64-linux-gnu" \
      HOSTCC="clang" \
      rock-pi-4-rk3399_defconfig
make O="/tmp/a1" \
      CROSS_COMPILE="aarch64-linux-gnu-" \
      CC="clang -target aarch64-linux-gnu" \
      HOSTCC="clang"
In Debian Trixie.

Yours,
Paul



-------------- next part --------------
A non-text attachment was scrubbed...
Name: OpenPGP_0x44173FA13D058888.asc
Type: application/pgp-keys
Size: 6234 bytes
Desc: OpenPGP public key
URL: <https://lists.denx.de/pipermail/u-boot/attachments/20230803/bbdef3c7/attachment.key>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: OpenPGP_signature
Type: application/pgp-signature
Size: 840 bytes
Desc: OpenPGP digital signature
URL: <https://lists.denx.de/pipermail/u-boot/attachments/20230803/bbdef3c7/attachment.sig>


More information about the U-Boot mailing list