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