Commit 6b88e7f9f7 for qemu.org
commit 6b88e7f9f78a54e8a81ffbeeada7b5400f39d045
Author: Bibo Mao <maobibo@loongson.cn>
Date: Fri Aug 7 15:00:29 2026 +0800
hw/loongarch/virt: Add bootargs and initrd to device-tree
Add bootarg and initrd information in fdt tree.
Signed-off-by: Bibo Mao <maobibo@loongson.cn>
Reviewed-by: Song Gao <gaosong@loongson.cn>
Message-ID: <20260807070029.1171348-3-maobibo@loongson.cn>
Signed-off-by: Song Gao <gaosong@loongson.cn>
diff --git a/hw/loongarch/virt-fdt-build.c b/hw/loongarch/virt-fdt-build.c
index 6c06b36fca..c6f5d022c5 100644
--- a/hw/loongarch/virt-fdt-build.c
+++ b/hw/loongarch/virt-fdt-build.c
@@ -25,6 +25,7 @@ static void create_fdt(LoongArchVirtMachineState *lvms)
{
MachineState *ms = MACHINE(lvms);
uint8_t rng_seed[32];
+ int ret;
ms->fdt = create_device_tree(&lvms->fdt_size);
if (!ms->fdt) {
@@ -39,6 +40,32 @@ static void create_fdt(LoongArchVirtMachineState *lvms)
qemu_fdt_setprop_cell(ms->fdt, "/", "#size-cells", 0x2);
qemu_fdt_add_subnode(ms->fdt, "/chosen");
+ if (ms->kernel_cmdline && *ms->kernel_cmdline) {
+ ret = qemu_fdt_setprop_string(ms->fdt, "/chosen", "bootargs",
+ ms->kernel_cmdline);
+ if (ret < 0) {
+ error_report("set /chosen/bootargs failed");
+ exit(1);
+ }
+ }
+
+ if (lvms->bootinfo.initrd_addr) {
+ ret = qemu_fdt_setprop_cell(ms->fdt, "/chosen", "linux,initrd-start",
+ lvms->bootinfo.initrd_addr);
+ if (ret < 0) {
+ error_report("set /chosen/linux,initrd-start failed");
+ exit(1);
+ }
+
+ ret = qemu_fdt_setprop_cell(ms->fdt, "/chosen", "linux,initrd-end",
+ lvms->bootinfo.initrd_addr +
+ lvms->bootinfo.initrd_size);
+ if (ret < 0) {
+ error_report("set /chosen/linux,initrd-end failed");
+ exit(1);
+ }
+ }
+
/* Pass seed to RNG */
qemu_guest_getrandom_nofail(rng_seed, sizeof(rng_seed));
qemu_fdt_setprop(ms->fdt, "/chosen", "rng-seed", rng_seed, sizeof(rng_seed));