This has different semantics in different places. Go with the bootm method and put it in a common function so that the behaviour is consistent in U-Boot. Update the docs.
Signed-off-by: Simon Glass <s...@chromium.org> Suggested-by: Wolfgang Denk <w...@denx.de> --- Changes in v6: - Add new patch to tidy up use of autostart env var cmd/bootm.c | 4 +--- cmd/elf.c | 3 +-- common/bootm_os.c | 5 +---- doc/usage/environment.rst | 4 ++-- env/common.c | 7 +++++++ include/env.h | 7 +++++++ 6 files changed, 19 insertions(+), 11 deletions(-) diff --git a/cmd/bootm.c b/cmd/bootm.c index 92468d09a1f..b82a872a86c 100644 --- a/cmd/bootm.c +++ b/cmd/bootm.c @@ -140,9 +140,7 @@ int do_bootm(struct cmd_tbl *cmdtp, int flag, int argc, char *const argv[]) int bootm_maybe_autostart(struct cmd_tbl *cmdtp, const char *cmd) { - const char *ep = env_get("autostart"); - - if (ep && !strcmp(ep, "yes")) { + if (env_get_autostart()) { char *local_args[2]; local_args[0] = (char *)cmd; local_args[1] = NULL; diff --git a/cmd/elf.c b/cmd/elf.c index d75b21461c2..2b33c50bd02 100644 --- a/cmd/elf.c +++ b/cmd/elf.c @@ -41,7 +41,6 @@ int do_bootelf(struct cmd_tbl *cmdtp, int flag, int argc, char *const argv[]) unsigned long addr; /* Address of the ELF image */ unsigned long rc; /* Return value from user code */ char *sload = NULL; - const char *ep = env_get("autostart"); int rcode = 0; /* Consume 'bootelf' */ @@ -69,7 +68,7 @@ int do_bootelf(struct cmd_tbl *cmdtp, int flag, int argc, char *const argv[]) else addr = load_elf_image_shdr(addr); - if (ep && !strcmp(ep, "no")) + if (!env_get_autostart()) return rcode; printf("## Starting application at 0x%08lx ...\n", addr); diff --git a/common/bootm_os.c b/common/bootm_os.c index 39623f9126b..f30dcebbf7d 100644 --- a/common/bootm_os.c +++ b/common/bootm_os.c @@ -26,12 +26,9 @@ DECLARE_GLOBAL_DATA_PTR; static int do_bootm_standalone(int flag, int argc, char *const argv[], bootm_headers_t *images) { - char *s; int (*appl)(int, char *const[]); - /* Don't start if "autostart" is set to "no" */ - s = env_get("autostart"); - if ((s != NULL) && !strcmp(s, "no")) { + if (!env_get_autostart()) { env_set_hex("filesize", images->os.image_len); return 0; } diff --git a/doc/usage/environment.rst b/doc/usage/environment.rst index ef9cd20715a..99285115f29 100644 --- a/doc/usage/environment.rst +++ b/doc/usage/environment.rst @@ -144,8 +144,8 @@ autostart be automatically started (by internally calling "bootm") - If set to "no", a standalone image passed to the - "bootm" command will be copied to the load address + If unset, or set to anything other than "yes", a standalone image passed to + the "bootm" command will be copied to the load address (and eventually uncompressed), but NOT be started. This can be used to load and uncompress arbitrary data. diff --git a/env/common.c b/env/common.c index 81e9e0b2aaf..ef9502a34f7 100644 --- a/env/common.c +++ b/env/common.c @@ -47,6 +47,13 @@ int env_get_yesno(const char *var) 1 : 0; } +bool env_get_autostart(void) +{ + const char *val = env_get("autostart"); + + return val && !strcmp(val, "yes"); +} + /* * Look up the variable from the default environment */ diff --git a/include/env.h b/include/env.h index d5e2bcb530f..fdad495691f 100644 --- a/include/env.h +++ b/include/env.h @@ -143,6 +143,13 @@ int env_get_f(const char *name, char *buf, unsigned int len); */ int env_get_yesno(const char *var); +/** + * env_get_autostart() - Check if autostart is enabled + * + * @return true if the "autostart" env var exists and is set to "yes" + */ +bool env_get_autostart(void); + /** * env_set() - set an environment variable * -- 2.33.0.1079.g6e70778dc9-goog