@samitouri / QOSamiQemu / commits / 6b88e7f9f7

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>

Bibo Mao committed Aug 7, 2026 at 15:00 UTC 6b88e7f9f78a54e8a81ffbeeada7b5400f39d045
1 file changed +27
hw/loongarch/virt-fdt-build.c
+27
@@ -25,6 +25,7 @@ static void create_fdt(LoongArchVirtMachineState *lvms)
25 {
26 MachineState *ms = MACHINE(lvms);
27 uint8_t rng_seed[32];
28 + int ret;
29
30 ms->fdt = create_device_tree(&lvms->fdt_size);
31 if (!ms->fdt) {
@@ -39,6 +40,32 @@ static void create_fdt(LoongArchVirtMachineState *lvms)
40 qemu_fdt_setprop_cell(ms->fdt, "/", "#size-cells", 0x2);
41 qemu_fdt_add_subnode(ms->fdt, "/chosen");
42
43 + if (ms->kernel_cmdline && *ms->kernel_cmdline) {
44 + ret = qemu_fdt_setprop_string(ms->fdt, "/chosen", "bootargs",
45 + ms->kernel_cmdline);
46 + if (ret < 0) {
47 + error_report("set /chosen/bootargs failed");
48 + exit(1);
49 + }
50 + }
51 +
52 + if (lvms->bootinfo.initrd_addr) {
53 + ret = qemu_fdt_setprop_cell(ms->fdt, "/chosen", "linux,initrd-start",
54 + lvms->bootinfo.initrd_addr);
55 + if (ret < 0) {
56 + error_report("set /chosen/linux,initrd-start failed");
57 + exit(1);
58 + }
59 +
60 + ret = qemu_fdt_setprop_cell(ms->fdt, "/chosen", "linux,initrd-end",
61 + lvms->bootinfo.initrd_addr +
62 + lvms->bootinfo.initrd_size);
63 + if (ret < 0) {
64 + error_report("set /chosen/linux,initrd-end failed");
65 + exit(1);
66 + }
67 + }
68 +
69 /* Pass seed to RNG */
70 qemu_guest_getrandom_nofail(rng_seed, sizeof(rng_seed));
71 qemu_fdt_setprop(ms->fdt, "/chosen", "rng-seed", rng_seed, sizeof(rng_seed));