]> git.dujemihanovic.xyz Git - u-boot.git/commitdiff
bootm: Tidy up use of autostart env var
authorSimon Glass <sjg@chromium.org>
Fri, 22 Oct 2021 03:08:52 +0000 (21:08 -0600)
committerTom Rini <trini@konsulko.com>
Tue, 16 Nov 2021 19:35:09 +0000 (14:35 -0500)
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.

To be clear, this changes the way that 'bootelf' and standalone boot
work. Before, if autostart was set to "fred" or "YES", for example, they
would consider that a "yes". This may change behaviour for some boards,
but the only in-tree boards which mention autostart use "no" to disable
it, which will still work.

Signed-off-by: Simon Glass <sjg@chromium.org>
Suggested-by: Wolfgang Denk <wd@denx.de>
boot/bootm_os.c
cmd/bootm.c
cmd/elf.c
doc/usage/environment.rst
env/common.c
include/env.h

index e635c72709ccd5a19e06a8a8897bcb87ddc7ddfd..f31820cd07ef00d440f3fb2454c0f0eb028193ee 100644 (file)
@@ -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;
        }
index 92468d09a1f9ff75461f58f6815f6ce3fa672432..b82a872a86c4b548ac7d26f901126efcbbaeda11 100644 (file)
@@ -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;
index d75b21461c2096f5b4deb1d9211d4c485947ed22..2b33c50bd026b31ea359d323d783a44d89e8a2a1 100644 (file)
--- 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);
index 8ddc672d4672967b2f9e74227501a3274eb17bf7..d295cc898785961298c3bd2cac9f97a7d038450d 100644 (file)
@@ -179,8 +179,9 @@ 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 "1"/"yes"/"true" (case insensitive, just the first
+    character is enough), 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.
index 208e2adaa012f8cf7db9ac57d587055974f6b6c3..ee957c0a8c00c0681623e7ac7ab9c9211a94bbc7 100644 (file)
@@ -235,6 +235,11 @@ int env_get_yesno(const char *var)
                1 : 0;
 }
 
+bool env_get_autostart(void)
+{
+       return env_get_yesno("autostart") == 1;
+}
+
 /*
  * Look up the variable from the default environment
  */
index ee5e30d036d401ce81a1fc157cf1c702cb8c29c9..ff8943ed96c62284afd724d5a7f0513573b91eab 100644 (file)
@@ -133,6 +133,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
  *