Building u-boot from mainline repo

Noticed that the 2013.10 upstream u-boot release will contain support for the Visionfive 2. I’m trying the current RC2 build. This build fails at the very end. Cross-compiling on Debian bookworm. The error report is:

binman: Filename 'fw_dynamic.bin' not found in input path (.,.,./board/starfive/visionfive2,arch/riscv/dts) (cwd='/home/vf2build/u-boot')
make: *** [Makefile:1111: .binman_stamp] Error 1

This is odd: opensbi needs u-boot to build, and u-boot needs opensbi to build. Building opensbi with the partial u-boot build works, and then copying ‘fw_dynamic.bin’ to the u-boot root allows the u-boot build to complete without errors on second try.

Is this supposed to work like this?

Related to this: is the 2023.10 upstream u-boot build interchangeable with the u-boot build in v3.4.5 ?

All tips for correctly building upstream u-boot for VF2 are welcome.

1 Like

I can reply to my own question. Just tried RC3 which was released today. The error report now is more informative:

Image 'itb' is missing external blobs and is non-functional: opensbi

/binman/itb/fit/images/opensbi/opensbi (fw_dynamic.bin):
   See the documentation for your board. The OpenSBI git repo is at
   https://github.com/riscv/opensbi.git
   You may need to build fw_dynamic.bin first and re-build u-boot with
   OPENSBI=/path/to/fw_dynamic.bin

Some images are invalid
make: *** [Makefile:1115: .binman_stamp] Error 103

So, yes, it is supposed to work like this.

You need to clone&build opensbi to get that bin… It is needed to make system work correctly. Besides, currently there’s a bug need to fix through this patch series, please apply or boot would fail. Also you could check this series if you want to try to use usb/nvme in u-boot.

1 Like

Thank you!

I have placed my build notes & scripts up on gitlab: pnr / VF2_boot · GitLab

As the patch is accepted, probably by the time RC4 arrives the separate patch step in the script can be dropped.

1 Like

Already accepted now.

paul63,

Your build notes produce a fw_dynamic.bin but the starfive-dev Makefile works with fw_payload.bin. Did you run into any issues? Here is the difference:

OpenSBI provides several types of reference firmware, all platform-specific
– FW_PAYLOAD
• Firmware with the next booting stage as a payload
• Default firmware being used in Linux capable RISC-V hardware
– FW_JUMP
• Firmware with fixed jump address to the next booting stage
• Default method for QEMU
– FW_DYNAMIC
• Firmware with dynamic information on the next booting stage
• U-Boot SPL/Coreboot is using FW_DYNAMIC

ref: https://riscv.org/wp-content/uploads/2019/12/Summit_bootflow.pdf