qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Qemu-devel] [RFC 2/3] ARM: boot: Add option to skip FDT memory node upd


From: marcin.krzeminski
Subject: [Qemu-devel] [RFC 2/3] ARM: boot: Add option to skip FDT memory node update
Date: Fri, 16 Dec 2016 14:22:38 +0100

From: Marcin Krzeminski <address@hidden>

When Qemu boots directly ARM kernel the memory node in device
tree is automatically updated to mach guest RAM size assigned
to Qemu. This commit allow use case when user do not
want to pass all guest RAM to linux kernel by skipping
device tree mmory node update.

Signed-off-by: Marcin Krzeminski <address@hidden>
---
 hw/arm/boot.c        | 29 ++++++++++++++++-------------
 include/hw/arm/arm.h |  5 +++++
 2 files changed, 21 insertions(+), 13 deletions(-)

diff --git a/hw/arm/boot.c b/hw/arm/boot.c
index ff621e4..0af72bd 100644
--- a/hw/arm/boot.c
+++ b/hw/arm/boot.c
@@ -489,21 +489,24 @@ static int load_dtb(hwaddr addr, const struct 
arm_boot_info *binfo,
     } else {
         Error *err = NULL;
 
-        rc = fdt_path_offset(fdt, "/memory");
-        if (rc < 0) {
-            qemu_fdt_add_subnode(fdt, "/memory");
-        }
+        if (!binfo->skip_fdt_mem_node) {
 
-        if (!qemu_fdt_getprop(fdt, "/memory", "device_type", NULL, &err)) {
-            qemu_fdt_setprop_string(fdt, "/memory", "device_type", "memory");
-        }
+            rc = fdt_path_offset(fdt, "/memory");
+            if (rc < 0) {
+                qemu_fdt_add_subnode(fdt, "/memory");
+            }
 
-        rc = qemu_fdt_setprop_sized_cells(fdt, "/memory", "reg",
-                                          acells, binfo->loader_start,
-                                          scells, binfo->ram_size);
-        if (rc < 0) {
-            fprintf(stderr, "couldn't set /memory/reg\n");
-            goto fail;
+            if (!qemu_fdt_getprop(fdt, "/memory", "device_type", NULL, &err)) {
+                qemu_fdt_setprop_string(fdt, "/memory", "device_type", 
"memory");
+            }
+
+            rc = qemu_fdt_setprop_sized_cells(fdt, "/memory", "reg",
+                                              acells, binfo->loader_start,
+                                              scells, binfo->ram_size);
+            if (rc < 0) {
+                fprintf(stderr, "couldn't set /memory/reg\n");
+                goto fail;
+            }
         }
     }
 
diff --git a/include/hw/arm/arm.h b/include/hw/arm/arm.h
index aeeebfe..e237930 100644
--- a/include/hw/arm/arm.h
+++ b/include/hw/arm/arm.h
@@ -112,6 +112,11 @@ struct arm_boot_info {
     bool secure_board_setup;
 
     arm_endianness endianness;
+
+    /* Do not override memory node in device tree - useful when
+     * not whole guest memory is under Linux control.
+     */
+    bool skip_fdt_mem_node;
 };
 
 /**
-- 
2.7.4




reply via email to

[Prev in Thread] Current Thread [Next in Thread]