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>
This commit is contained in:
Simon Glass 2023-01-17 10:47:56 -07:00 committed by Tom Rini
parent 3e18860e3f
commit 7638c85190
4 changed files with 14 additions and 0 deletions

View file

@ -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)

View file

@ -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 */

View file

@ -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;
};
/**

View file

@ -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();