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));