It's found that BINMAN_SYMBOLS_OK always evaluates to false on RISC-V,
because our linkerscripts don't define symbol __image_copy_start, on
which binman depends for determining the base address of an entry.
Binman simply bails out in case of missing the symbol.

This series first defaults SPL_BINMAN_UBOOT_SYMBOLS to N on RISC-V to
prevent binman from looking for a plain proper U-Boot image, which
isn't desired since binman configuration on RISC-V wraps proper U-Boot
in a FIT image. Then we define __image_copy_start and the paired
__image_copy_end to really fix binman_sym's functionality.

I've tested building with
  - ae350_rv64_defconfig
  - ae350_rv64_spl_defconfig
  - bananapi-f3_defconfig
  - k230_canmv_defconfig
  - microchip_mpfs_icicle_defconfig

and booting successfully on
  - milkv_duo_defconfig
  - qemu-riscv64_smode_defconfig
  - qemu-riscv64_defconfig
  - sifive_unleashed_defconfig
  - starfive_visionfive2_defconfig
with either real hardware or QEMU.

Thanks for your time and review.

Yao Zi (2):
  spl: riscv: Disable SPL_BINMAN_UBOOT_SYMBOLS by default
  riscv: Provide __image_copy_{start_end} symbols in linkerscript

 arch/riscv/cpu/u-boot-spl.lds | 2 ++
 arch/riscv/cpu/u-boot.lds     | 3 +++
 common/spl/Kconfig            | 2 ++
 3 files changed, 7 insertions(+)

-- 
2.49.0

Reply via email to