summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/include/device_tree.h1
-rw-r--r--src/lib/device_tree.c16
-rw-r--r--src/lib/fit.c9
3 files changed, 21 insertions, 5 deletions
diff --git a/src/include/device_tree.h b/src/include/device_tree.h
index 7f725e4d74..4c1a37c00c 100644
--- a/src/include/device_tree.h
+++ b/src/include/device_tree.h
@@ -158,6 +158,7 @@ void dt_add_bin_prop(struct device_tree_node *node, const char *name, void *data
size_t size);
void dt_add_string_prop(struct device_tree_node *node, const char *name, char *str);
void dt_add_u32_prop(struct device_tree_node *node, const char *name, u32 val);
+void dt_add_u64_prop(struct device_tree_node *node, const char *name, u64 val);
void dt_add_reg_prop(struct device_tree_node *node, u64 *addrs, u64 *sizes,
int count, u32 addr_cells, u32 size_cells);
int dt_set_bin_prop_by_path(struct device_tree *tree, const char *path,
diff --git a/src/lib/device_tree.c b/src/lib/device_tree.c
index a905dbf893..89387ffdbf 100644
--- a/src/lib/device_tree.c
+++ b/src/lib/device_tree.c
@@ -882,6 +882,22 @@ void dt_add_u32_prop(struct device_tree_node *node, const char *name, u32 val)
}
/*
+ * Add a 64-bit integer property to a node, or update it if it already exists.
+ *
+ * @param node The device tree node to add to.
+ * @param name The name of the new property.
+ * @param val The integer to be stored in the property.
+ */
+void dt_add_u64_prop(struct device_tree_node *node, const char *name, u64 val)
+{
+ u64 *val_ptr = malloc(sizeof(val));
+ if (!val_ptr)
+ return;
+ *val_ptr = htobe64(val);
+ dt_add_bin_prop(node, name, val_ptr, sizeof(*val_ptr));
+}
+
+/*
* Add a 'reg' address list property to a node, or update it if it exists.
*
* @param node The device tree node to add to.
diff --git a/src/lib/fit.c b/src/lib/fit.c
index fe8a82ef97..68f5bed2b8 100644
--- a/src/lib/fit.c
+++ b/src/lib/fit.c
@@ -212,12 +212,11 @@ void fit_add_ramdisk(struct device_tree *tree, void *ramdisk_addr,
struct device_tree_node *node;
node = dt_find_node(tree->root, path, NULL, NULL, 1);
- /* Warning: this assumes the ramdisk is currently located below 4GiB. */
- u32 start = (uintptr_t)ramdisk_addr;
- u32 end = start + ramdisk_size;
+ u64 start = (uintptr_t)ramdisk_addr;
+ u64 end = start + ramdisk_size;
- dt_add_u32_prop(node, "linux,initrd-start", start);
- dt_add_u32_prop(node, "linux,initrd-end", end);
+ dt_add_u64_prop(node, "linux,initrd-start", start);
+ dt_add_u64_prop(node, "linux,initrd-end", end);
}
static void update_reserve_map(uint64_t start, uint64_t end,