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