]> git.dujemihanovic.xyz Git - u-boot.git/commitdiff
arm: mvebu: turris_{omnia, mox}: ensure running bootcmd_rescue always works
authorPali Rohár <pali@kernel.org>
Mon, 14 Jun 2021 14:45:58 +0000 (16:45 +0200)
committerStefan Roese <sr@denx.de>
Tue, 15 Jun 2021 05:21:54 +0000 (07:21 +0200)
One of the points of putting the rescue boot command into default
environment is that user can invoke it without physical access to the
board (without having to press the factory reset button), by running
  run bootcmd_rescue
in U-Boot's console.

Therefore we have to ensure that bootcmd_rescue is always set to default
value, regardless of whether the factory reset button was pressed.
Otherwise the variable will be empty for example after upgrade from
previous U-Boot.

Fixes: ec3784d62646 ("arm: mvebu: turris_mox: add support for board rescue mode")
Fixes: 176c3e7760a2 ("arm: mvebu: turris_omnia: support invoking rescue boot from console")
Signed-off-by: Pali Rohár <pali@kernel.org>
Signed-off-by: Marek Behún <marek.behun@nic.cz>
Reviewed-by: Stefan Roese <sr@denx.de>
board/CZ.NIC/turris_mox/turris_mox.c
board/CZ.NIC/turris_omnia/turris_omnia.c

index 44c272c7cb86fe2b0e4f7daf91391f2f04eca849..428cd23a19dd67f24fffad41703f6a531130dc07 100644 (file)
@@ -440,10 +440,18 @@ static bool read_reset_button(void)
 
 static void handle_reset_button(void)
 {
+       const char * const vars[1] = { "bootcmd_rescue", };
+
+       /*
+        * Ensure that bootcmd_rescue has always stock value, so that running
+        *   run bootcmd_rescue
+        * always works correctly.
+        */
+       env_set_default_vars(1, (char * const *)vars, 0);
+
        if (read_reset_button()) {
-               const char * const vars[3] = {
+               const char * const vars[2] = {
                        "bootcmd",
-                       "bootcmd_rescue",
                        "distro_bootcmd",
                };
 
@@ -451,7 +459,7 @@ static void handle_reset_button(void)
                 * Set the above envs to their default values, in case the user
                 * managed to break them.
                 */
-               env_set_default_vars(3, (char * const *)vars, 0);
+               env_set_default_vars(2, (char * const *)vars, 0);
 
                /* Ensure bootcmd_rescue is used by distroboot */
                env_set("boot_targets", "rescue");
index ade923f599486df5a33dbd28151728314bc442a2..8b2f94f959ab2d45f9d80a0dbc15038894dd11eb 100644 (file)
@@ -339,9 +339,17 @@ static int set_regdomain(void)
 
 static void handle_reset_button(void)
 {
+       const char * const vars[1] = { "bootcmd_rescue", };
        int ret;
        u8 reset_status;
 
+       /*
+        * Ensure that bootcmd_rescue has always stock value, so that running
+        *   run bootcmd_rescue
+        * always works correctly.
+        */
+       env_set_default_vars(1, (char * const *)vars, 0);
+
        ret = omnia_mcu_read(CMD_GET_RESET, &reset_status, 1);
        if (ret) {
                printf("omnia_mcu_read failed: %i, reset status unknown!\n",
@@ -352,9 +360,8 @@ static void handle_reset_button(void)
        env_set_ulong("omnia_reset", reset_status);
 
        if (reset_status) {
-               const char * const vars[3] = {
+               const char * const vars[2] = {
                        "bootcmd",
-                       "bootcmd_rescue",
                        "distro_bootcmd",
                };
 
@@ -362,7 +369,7 @@ static void handle_reset_button(void)
                 * Set the above envs to their default values, in case the user
                 * managed to break them.
                 */
-               env_set_default_vars(3, (char * const *)vars, 0);
+               env_set_default_vars(2, (char * const *)vars, 0);
 
                /* Ensure bootcmd_rescue is used by distroboot */
                env_set("boot_targets", "rescue");