aboutsummaryrefslogtreecommitdiff
path: root/core/arch/arm/kernel
diff options
context:
space:
mode:
Diffstat (limited to 'core/arch/arm/kernel')
-rw-r--r--core/arch/arm/kernel/generic_boot.c33
1 files changed, 20 insertions, 13 deletions
diff --git a/core/arch/arm/kernel/generic_boot.c b/core/arch/arm/kernel/generic_boot.c
index 557866d8..dd77bbf9 100644
--- a/core/arch/arm/kernel/generic_boot.c
+++ b/core/arch/arm/kernel/generic_boot.c
@@ -760,21 +760,28 @@ static uint64_t get_dt_val_and_advance(const void *data, size_t *offs,
static int add_res_mem_dt_node(struct dt_descriptor *dt, const char *name,
paddr_t pa, size_t size)
{
- int offs;
- int ret;
- int addr_size = 2;
- int len_size = 2;
- char subnode_name[80];
+ int offs = 0;
+ int ret = 0;
+ int addr_size = -1;
+ int len_size = -1;
+ bool found = true;
+ char subnode_name[80] = { 0 };
offs = fdt_path_offset(dt->blob, "/reserved-memory");
- if (offs >= 0) {
- addr_size = fdt_address_cells(dt->blob, offs);
- if (addr_size < 0)
- return -1;
- len_size = fdt_size_cells(dt->blob, offs);
- if (len_size < 0)
- return -1;
- } else {
+
+ if (offs < 0) {
+ found = false;
+ offs = 0;
+ }
+
+ len_size = fdt_size_cells(dt->blob, offs);
+ if (len_size < 0)
+ return -1;
+ addr_size = fdt_address_cells(dt->blob, offs);
+ if (addr_size < 0)
+ return -1;
+
+ if (!found) {
offs = add_dt_path_subnode(dt, "/", "reserved-memory");
if (offs < 0)
return -1;