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:
parent
ee93f6129d
commit
ccf24a9d77
@ -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)
|
void *board_fdt_blob_setup(int *ret)
|
||||||
{
|
{
|
||||||
struct sandbox_state *state = state_get_current();
|
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);
|
blob = map_sysmem(CONFIG_SYS_FDT_LOAD_ADDR, 0);
|
||||||
*ret = 0;
|
*ret = 0;
|
||||||
if (!state->fdt_fname) {
|
if (!state->fdt_fname) {
|
||||||
err = fdt_create_empty_tree(blob, 256);
|
err = setup_auto_tree(blob);
|
||||||
if (!err)
|
if (!err)
|
||||||
goto done;
|
goto done;
|
||||||
printf("Unable to create empty FDT: %s\n", fdt_strerror(err));
|
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')
|
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')
|
@pytest.mark.boardspec('sandbox_vpl')
|
||||||
def test_vpl_help(u_boot_console):
|
def test_vpl_help(u_boot_console):
|
||||||
try:
|
try:
|
||||||
|
Loading…
Reference in New Issue
Block a user