common/console.c: ensure GD_FLG_SILENT is set or cleared
authorChris Packham <judge.packham@gmail.com>
Fri, 23 Sep 2016 03:59:43 +0000 (15:59 +1200)
committerTom Rini <trini@konsulko.com>
Fri, 7 Oct 2016 14:26:29 +0000 (14:26 +0000)
When CONFIG_SILENT_CONSOLE is defined and the default environment has
silent=1 it is not possible for a user to make the console un-silent if
the environment is not available when console_init_f() is called (for
example because the environment is in SPI).

Add a new helper function console_update_silent() and call it from both
console_init_f() and console_init_r().

Signed-off-by: Chris Packham <judge.packham@gmail.com>
Reviewed-by: Simon Glass <sjg@chromium.org>
common/console.c

index 12293f383624947cc716319a862df4340c44b1c2..c7f32434310e3081c83f9b86dec698eb8c06bc96 100644 (file)
@@ -687,15 +687,22 @@ int console_assign(int file, const char *devname)
        return -1;
 }
 
-/* Called before relocation - use serial functions */
-int console_init_f(void)
+static void console_update_silent(void)
 {
-       gd->have_console = 1;
-
 #ifdef CONFIG_SILENT_CONSOLE
        if (getenv("silent") != NULL)
                gd->flags |= GD_FLG_SILENT;
+       else
+               gd->flags &= ~GD_FLG_SILENT;
 #endif
+}
+
+/* Called before relocation - use serial functions */
+int console_init_f(void)
+{
+       gd->have_console = 1;
+
+       console_update_silent();
 
        print_pre_console_buffer(PRE_CONSOLE_FLUSHPOINT1_SERIAL);
 
@@ -831,6 +838,8 @@ int console_init_r(void)
        struct list_head *pos;
        struct stdio_dev *dev;
 
+       console_update_silent();
+
 #ifdef CONFIG_SPLASH_SCREEN
        /*
         * suppress all output if splash screen is enabled and we have