From ccf24a9d7739241c08e17b45d7fbe74b9baa3dcc Mon Sep 17 00:00:00 2001 From: Simon Glass Date: Wed, 27 Apr 2022 13:47:57 -0600 Subject: sandbox: Avoid binman error when run without device tree With sandbox, U-Boot can be run without a device tree (i.e. no -d or -T parameter). In this case an empty device tree is created for convenience. With a recent change this causes an error due to the missing '/binman' node. Add this node to avoid the problem, as well as a test that U-Boot can be run without a device tree. Fixes: 059df5624b ("arch: Kconfig: imply BINMAN for SANDBOX") Fixes: https://source.denx.de/u-boot/u-boot/-/issues/11 Signed-off-by: Simon Glass --- arch/sandbox/cpu/cpu.c | 27 ++++++++++++++++++++++++++- 1 file changed, 26 insertions(+), 1 deletion(-) (limited to 'arch/sandbox/cpu/cpu.c') diff --git a/arch/sandbox/cpu/cpu.c b/arch/sandbox/cpu/cpu.c index ff0fa8a6853..7a82798c36d 100644 --- a/arch/sandbox/cpu/cpu.c +++ b/arch/sandbox/cpu/cpu.c @@ -291,6 +291,31 @@ void invalidate_dcache_range(unsigned long start, unsigned long stop) { } +/** + * setup_auto_tree() - Set up a basic device tree to allow sandbox to work + * + * This is used when no device tree is provided. It creates a simple tree with + * just a /binman node. + * + * @blob: Place to put the created device tree + * Returns: 0 on success, -ve FDT error code on failure + */ +static int setup_auto_tree(void *blob) +{ + int err; + + err = fdt_create_empty_tree(blob, 256); + if (err) + return err; + + /* Create a /binman node in case CONFIG_BINMAN is enabled */ + err = fdt_add_subnode(blob, 0, "binman"); + if (err < 0) + return err; + + return 0; +} + void *board_fdt_blob_setup(int *ret) { struct sandbox_state *state = state_get_current(); @@ -303,7 +328,7 @@ void *board_fdt_blob_setup(int *ret) blob = map_sysmem(CONFIG_SYS_FDT_LOAD_ADDR, 0); *ret = 0; if (!state->fdt_fname) { - err = fdt_create_empty_tree(blob, 256); + err = setup_auto_tree(blob); if (!err) goto done; printf("Unable to create empty FDT: %s\n", fdt_strerror(err)); -- cgit v1.2.3