]> git.dujemihanovic.xyz Git - u-boot.git/commitdiff
cmd: env: check real location for env info command
authorPatrick Delaunay <patrick.delaunay@st.com>
Fri, 19 Jun 2020 12:03:35 +0000 (14:03 +0200)
committerTom Rini <trini@konsulko.com>
Sun, 26 Jul 2020 18:35:30 +0000 (14:35 -0400)
Check the current ENV location, dynamically provided by the weak
function env_get_location to be sure that the environment can be
persistent.

The compilation flag ENV_IS_IN_DEVICE is not enough when the board
dynamically select the available storage location (according boot
device for example).

This patch solves issue for stm32mp1 platform, when the boot device
is USB.

Signed-off-by: Patrick Delaunay <patrick.delaunay@st.com>
Reviewed-by: Simon Glass <sjg@chromium.org>
Reviewed-by: Tom Rini <trini@konsulko.com>
cmd/nvedit.c
include/env_internal.h

index 6d7da0979000133bc56ca192fcde51204dd958c7..acd9f826676005f39fd72048e5a452fe3a403dc5 100644 (file)
@@ -1233,6 +1233,9 @@ static int do_env_info(struct cmd_tbl *cmdtp, int flag,
        int eval_flags = 0;
        int eval_results = 0;
        bool quiet = false;
+#if defined(CONFIG_CMD_SAVEENV) && defined(ENV_IS_IN_DEVICE)
+       enum env_location loc;
+#endif
 
        /* display environment information */
        if (argc <= 1)
@@ -1274,9 +1277,15 @@ static int do_env_info(struct cmd_tbl *cmdtp, int flag,
        /* evaluate whether environment can be persisted */
        if (eval_flags & ENV_INFO_IS_PERSISTED) {
 #if defined(CONFIG_CMD_SAVEENV) && defined(ENV_IS_IN_DEVICE)
-               if (!quiet)
-                       printf("Environment can be persisted\n");
-               eval_results |= ENV_INFO_IS_PERSISTED;
+               loc = env_get_location(ENVOP_SAVE, gd->env_load_prio);
+               if (ENVL_NOWHERE != loc && ENVL_UNKNOWN != loc) {
+                       if (!quiet)
+                               printf("Environment can be persisted\n");
+                       eval_results |= ENV_INFO_IS_PERSISTED;
+               } else {
+                       if (!quiet)
+                               printf("Environment cannot be persisted\n");
+               }
 #else
                if (!quiet)
                        printf("Environment cannot be persisted\n");
index e89fbdb1b75bbbc82aa812e2c31ca5703b033ea5..66550434c3f97a8423e21b3dc8623f1c957e3c5e 100644 (file)
@@ -211,6 +211,17 @@ struct env_driver {
 
 extern struct hsearch_data env_htab;
 
+/**
+ * env_get_location()- Provide the best location for the U-Boot environment
+ *
+ * It is a weak function allowing board to overidde the environment location
+ *
+ * @op: operations performed on the environment
+ * @prio: priority between the multiple environments, 0 being the
+ *        highest priority
+ * @return  an enum env_location value on success, or -ve error code.
+ */
+enum env_location env_get_location(enum env_operation op, int prio);
 #endif /* DO_DEPS_ONLY */
 
 #endif /* _ENV_INTERNAL_H_ */