aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSimon Glass <sjg@chromium.org>2022-04-27 13:47:57 -0600
committerTom Rini <trini@konsulko.com>2022-05-05 09:29:57 -0400
commitccf24a9d7739241c08e17b45d7fbe74b9baa3dcc (patch)
treeb338cb1732254e3f240ce68b6f4679609f4f671e
parentee93f6129d0851b8667efaa5dc91ee201cce24b8 (diff)
downloadu-boot-ccf24a9d7739241c08e17b45d7fbe74b9baa3dcc.zip
u-boot-ccf24a9d7739241c08e17b45d7fbe74b9baa3dcc.tar.gz
u-boot-ccf24a9d7739241c08e17b45d7fbe74b9baa3dcc.tar.bz2
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 <sjg@chromium.org>
-rw-r--r--arch/sandbox/cpu/cpu.c27
-rw-r--r--test/py/tests/test_help.py12
2 files changed, 38 insertions, 1 deletions
diff --git a/arch/sandbox/cpu/cpu.c b/arch/sandbox/cpu/cpu.c
index ff0fa8a..7a82798 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));
diff --git a/test/py/tests/test_help.py b/test/py/tests/test_help.py
index bac0a29..153133c 100644
--- a/test/py/tests/test_help.py
+++ b/test/py/tests/test_help.py
@@ -9,6 +9,18 @@ def test_help(u_boot_console):
u_boot_console.run_command('help')
+@pytest.mark.boardspec('sandbox')
+def test_help_no_devicetree(u_boot_console):
+ try:
+ cons = u_boot_console
+ cons.restart_uboot_with_flags([], use_dtb=False)
+ cons.run_command('help')
+ output = cons.get_spawn_output().replace('\r', '')
+ assert 'print command description/usage' in output
+ finally:
+ # Restart afterward to get the normal device tree back
+ u_boot_console.restart_uboot()
+
@pytest.mark.boardspec('sandbox_vpl')
def test_vpl_help(u_boot_console):
try: