summaryrefslogtreecommitdiff
path: root/common/fdt_support.c
diff options
context:
space:
mode:
authorTom Rini <trini@konsulko.com>2017-11-26 18:10:21 -0500
committerTom Rini <trini@konsulko.com>2017-11-26 18:10:21 -0500
commit0931b6f20e19f6c412d6ad1ba8e3b50b2a70c3c0 (patch)
tree750f9b3523d6189093164e5aa1037a157008d43f /common/fdt_support.c
parent93a51d301ad051ec6f8c6016862c7719b8b434d3 (diff)
parente5ee24dda20af5dc87971b497268f9fb1c83027e (diff)
Merge git://git.denx.de/u-boot-rockchip
Diffstat (limited to 'common/fdt_support.c')
-rw-r--r--common/fdt_support.c39
1 files changed, 39 insertions, 0 deletions
diff --git a/common/fdt_support.c b/common/fdt_support.c
index f4f9543d547..6896dcb285a 100644
--- a/common/fdt_support.c
+++ b/common/fdt_support.c
@@ -410,6 +410,45 @@ static int fdt_pack_reg(const void *fdt, void *buf, u64 *address, u64 *size,
return p - (char *)buf;
}
+int fdt_record_loadable(void *blob, u32 index, const char *name,
+ uintptr_t load_addr, u32 size, uintptr_t entry_point,
+ const char *type, const char *os)
+{
+ int err, node;
+
+ err = fdt_check_header(blob);
+ if (err < 0) {
+ printf("%s: %s\n", __func__, fdt_strerror(err));
+ return err;
+ }
+
+ /* find or create "/fit-images" node */
+ node = fdt_find_or_add_subnode(blob, 0, "fit-images");
+ if (node < 0)
+ return node;
+
+ /* find or create "/fit-images/<name>" node */
+ node = fdt_find_or_add_subnode(blob, node, name);
+ if (node < 0)
+ return node;
+
+ /*
+ * We record these as 32bit entities, possibly truncating addresses.
+ * However, spl_fit.c is not 64bit safe either: i.e. we should not
+ * have an issue here.
+ */
+ fdt_setprop_u32(blob, node, "load-addr", load_addr);
+ if (entry_point != -1)
+ fdt_setprop_u32(blob, node, "entry-point", entry_point);
+ fdt_setprop_u32(blob, node, "size", size);
+ if (type)
+ fdt_setprop_string(blob, node, "type", type);
+ if (os)
+ fdt_setprop_string(blob, node, "os", os);
+
+ return node;
+}
+
#ifdef CONFIG_NR_DRAM_BANKS
#define MEMORY_BANKS_MAX CONFIG_NR_DRAM_BANKS
#else