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>
diff --git a/boot/bootm_os.c b/boot/bootm_os.c
index a3c7cb5..88f7c18 100644
--- a/boot/bootm_os.c
+++ b/boot/bootm_os.c
@@ -402,6 +402,17 @@
 	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;