mirror of
				https://xff.cz/git/u-boot/
				synced 2025-10-31 18:35:42 +01:00 
			
		
		
		
	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>
			
			
This commit is contained in:
		| @@ -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)); | ||||
|   | ||||
| @@ -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: | ||||
|   | ||||
		Reference in New Issue
	
	Block a user