forked from OERV-BSP/u-boot
bootm: Pass SMP core ID and DTB address for ELF-formatted kernels
When booting RISC-V ELF-formatted kernel images (IH_TYPE_KERNEL + IH_OS_ELF), explicitly pass SMP hart ID (via a0/argc) and DTB address (via a1/argv) to comply with modern SMP-enabled kernels' boot protocol requirements. See https://www.kernel.org/doc/html/latest/arch/riscv/boot.html#register-state Signed-off-by: Zone.N <zone.niuzh@hotmail.com>
This commit is contained in:
@@ -402,6 +402,17 @@ static int do_bootm_elf(int flag, struct bootm_info *bmi)
|
||||
if (flag != BOOTM_STATE_OS_GO)
|
||||
return 0;
|
||||
|
||||
/*
|
||||
* Required per RISC-V boot protocol:
|
||||
* a0(argc) = hartid of the current core
|
||||
* a1(argv) = address of the devicetree in memory
|
||||
* https://www.kernel.org/doc/html/latest/arch/riscv/boot.html#register-state
|
||||
*/
|
||||
#if defined(CONFIG_RISCV)
|
||||
bmi->argc = gd->arch.boot_hart;
|
||||
bmi->argv = (char **)bmi->images->ft_addr;
|
||||
#endif
|
||||
|
||||
bootelf(bmi->images->ep, flags, bmi->argc, bmi->argv);
|
||||
|
||||
return 1;
|
||||
|
||||
Reference in New Issue
Block a user