bootstd: Include the device tree in the bootflow
Some bootmeths provide a way to load a device tree as well as the base
OS image. Add a way to store this in the bootflow. Update the
'bootflow info' command to show this information.
Note that the device tree is not allocated, but instead is stored at
an address provided by an environment variable. This may need to be
adjusted at some point, but for now it works well and fits in with the
existing distro-boot scripts.
Signed-off-by: Simon Glass <sjg@chromium.org>
diff --git a/boot/bootflow.c b/boot/bootflow.c
index 0345755..52cc2f9 100644
--- a/boot/bootflow.c
+++ b/boot/bootflow.c
@@ -355,6 +355,7 @@
free(bflow->fname);
free(bflow->buf);
free(bflow->os_name);
+ free(bflow->fdt_fname);
}
void bootflow_remove(struct bootflow *bflow)
diff --git a/cmd/bootflow.c b/cmd/bootflow.c
index 2b6ed26..56dd35b 100644
--- a/cmd/bootflow.c
+++ b/cmd/bootflow.c
@@ -344,6 +344,12 @@
printf("Logo size: %x (%d bytes)\n", bflow->logo_size,
bflow->logo_size);
}
+ printf("FDT: %s\n", bflow->fdt_fname);
+ if (bflow->fdt_fname) {
+ printf("FDT size: %x (%d bytes)\n", bflow->fdt_size,
+ bflow->fdt_size);
+ printf("FDT addr: %lx\n", bflow->fdt_addr);
+ }
printf("Error: %d\n", bflow->err);
if (dump && bflow->buf) {
/* Set some sort of maximum on the size */
diff --git a/include/bootflow.h b/include/bootflow.h
index 8ff9e33..bf71b09 100644
--- a/include/bootflow.h
+++ b/include/bootflow.h
@@ -60,6 +60,9 @@
* @err: Error number received (0 if OK)
* @os_name: Name of the OS / distro being booted, or NULL if not known
* (allocated)
+ * @fdt_fname: Filename of FDT file
+ * @fdt_size: Size of FDT file
+ * @fdt_addr: Address of loaded fdt
*/
struct bootflow {
struct list_head bm_node;
@@ -79,6 +82,9 @@
int size;
int err;
char *os_name;
+ char *fdt_fname;
+ int fdt_size;
+ ulong fdt_addr;
};
/**
diff --git a/test/boot/bootflow.c b/test/boot/bootflow.c
index f852b6e..b71ec52 100644
--- a/test/boot/bootflow.c
+++ b/test/boot/bootflow.c
@@ -199,6 +199,7 @@
ut_assert_nextline("Size: 253 (595 bytes)");
ut_assert_nextline("OS: Fedora-Workstation-armhfp-31-1.9 (5.3.7-301.fc31.armv7hl)");
ut_assert_nextline("Logo: (none)");
+ ut_assert_nextline("FDT: <NULL>");
ut_assert_nextline("Error: 0");
ut_assert_console_end();