This is an RFC as it will break ALL current users! See below for details. This series consolidates the current RISC-V kernel loading impelementation while also adding support for the -bios option and more advanced kernel image types.
After consolidating the kernel loading we can extend the boot loader to support a -bios option. We can also extend the kernel loading options to support not just ELF files but other standard formats. Finally we can include the OpenSBI firmware by default for QEMU users. At the end of this series we are in the good place of no longer requiring users to build firmware to boot a kernel. Instead users can just run QEMu with the -kernel option and everything will work. They can also override the firmware with their own using the -bios option. Using "-bios none" will result in no firmware being loaded (as it is today). !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! Unfortunately this series (patch 5 specifically) results in all current Linux boots being broken as users are already loading in their own firmware, which overlaps with the now included default. They will see this error: rom: requested regions overlap (rom phdr #0: ./images/qemuriscv64/fw_jump.elf. free=0x0000000080008090, addr=0x0000000080000000) qemu-system-riscv64: rom check and register reset failed If a current user specieifies "-bios none" their flow will continue working. A user can instead no longer load their firmware and use the default or they can load their firmware with the -bios option. At the moment the best idea I have to not break all users is to only include the default firmware if the user specifies "-bios opensbi". That is change the default to not loading the firmware. Then we can work on updating documentation and maybe in future change the default to include a firmware and anyone who doesn't want a default firmware can specify "-bios none". Any other ideas on how to not break everything? Alistair Francis (5): hw/riscv: Split out the boot functions hw/riscv: Add support for loading a firmware hw/riscv: Extend the kernel loading support roms: Add OpenSBI version 0.3 hw/riscv: Load OpenSBI as the default firmware .gitmodules | 3 + Makefile | 3 +- configure | 1 + hw/riscv/Makefile.objs | 1 + hw/riscv/boot.c | 143 ++++++++++++++++++++++++++++ hw/riscv/sifive_e.c | 17 +--- hw/riscv/sifive_u.c | 19 +--- hw/riscv/spike.c | 21 +--- hw/riscv/virt.c | 54 ++--------- include/hw/riscv/boot.h | 30 ++++++ pc-bios/opensbi-riscv32-fw_jump.elf | Bin 0 -> 197988 bytes pc-bios/opensbi-riscv64-fw_jump.elf | Bin 0 -> 200192 bytes roms/Makefile | 17 ++++ roms/opensbi | 1 + 14 files changed, 216 insertions(+), 94 deletions(-) create mode 100644 hw/riscv/boot.c create mode 100644 include/hw/riscv/boot.h create mode 100644 pc-bios/opensbi-riscv32-fw_jump.elf create mode 100644 pc-bios/opensbi-riscv64-fw_jump.elf create mode 160000 roms/opensbi -- 2.22.0