aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSimon Glass2023-01-17 10:47:56 -0700
committerTom Rini2023-01-23 18:11:40 -0500
commit7638c85190dccc2dfacb86fc3b70deb165337b4b (patch)
tree75c5ef7a384c65309bdfeb2d7b1904a5ce662b10
parent3e18860e3f3425bd2649e62cd2635bd008fe5f4d (diff)
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>
-rw-r--r--boot/bootflow.c1
-rw-r--r--cmd/bootflow.c6
-rw-r--r--include/bootflow.h6
-rw-r--r--test/boot/bootflow.c1
4 files changed, 14 insertions, 0 deletions
diff --git a/boot/bootflow.c b/boot/bootflow.c
index 0345755f58f..52cc2f9d548 100644
--- a/boot/bootflow.c
+++ b/boot/bootflow.c
@@ -355,6 +355,7 @@ void bootflow_free(struct bootflow *bflow)
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 2b6ed26fdcb..56dd35b69cf 100644
--- a/cmd/bootflow.c
+++ b/cmd/bootflow.c
@@ -344,6 +344,12 @@ static int do_bootflow_info(struct cmd_tbl *cmdtp, int flag, int argc,
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 8ff9e332b1f..bf71b09edad 100644
--- a/include/bootflow.h
+++ b/include/bootflow.h
@@ -60,6 +60,9 @@ enum bootflow_state_t {
* @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 @@ struct bootflow {
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 f852b6e9b6f..b71ec52eb7a 100644
--- a/test/boot/bootflow.c
+++ b/test/boot/bootflow.c
@@ -199,6 +199,7 @@ static int bootflow_cmd_info(struct unit_test_state *uts)
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();