Allow displaying the U-Boot banner on a video display
authorSimon Glass <sjg@chromium.org>
Fri, 16 Jun 2017 03:37:50 +0000 (21:37 -0600)
committerSimon Glass <sjg@chromium.org>
Tue, 11 Jul 2017 16:08:19 +0000 (10:08 -0600)
At present the U-Boot banner is only displayed on the serial console. If
this is not visible to the user, the banner does not show. Some devices
have a video display which can usefully display this information.

Add a banner which is printed after relocation only on non-serial devices
if CONFIG_DISPLAY_BOARDINFO_LATE is defined.

Signed-off-by: Simon Glass <sjg@chromium.org>
Reviewed-by: Bin Meng <bmeng.cn@gmail.com>
Tested-by: Bin Meng <bmeng.cn@gmail.com>
Tested-by: Stephen Warren <swarren@nvidia.com>
common/board_r.c
common/console.c
include/console.h

index 3341a528b01ad4aebc01507bd1c9973d4c4fc2fd..ecca1edb04e0a4335bc4f5e6c5d2638b6d64ba45 100644 (file)
@@ -829,6 +829,7 @@ static init_fnc_t init_sequence_r[] = {
 #endif
        console_init_r,         /* fully init console as a device */
 #ifdef CONFIG_DISPLAY_BOARDINFO_LATE
+       console_announce_r,
        show_board_info,
 #endif
 #ifdef CONFIG_ARCH_MISC_INIT
index 1232808df52b654ed50c7a866e6bd35f2e2d376d..60e7a94a56da4d62a2ffdef98312badc16351047 100644 (file)
@@ -202,7 +202,6 @@ static void console_putc(int file, const char c)
        }
 }
 
-#if CONFIG_IS_ENABLED(PRE_CONSOLE_BUFFER)
 static void console_puts_noserial(int file, const char *s)
 {
        int i;
@@ -214,7 +213,6 @@ static void console_puts_noserial(int file, const char *s)
                        dev->puts(dev, s);
        }
 }
-#endif
 
 static void console_puts(int file, const char *s)
 {
@@ -248,13 +246,11 @@ static inline void console_putc(int file, const char c)
        stdio_devices[file]->putc(stdio_devices[file], c);
 }
 
-#if CONFIG_IS_ENABLED(PRE_CONSOLE_BUFFER)
 static inline void console_puts_noserial(int file, const char *s)
 {
        if (strcmp(stdio_devices[file]->name, "serial") != 0)
                stdio_devices[file]->puts(stdio_devices[file], s);
 }
-#endif
 
 static inline void console_puts(int file, const char *s)
 {
@@ -699,6 +695,19 @@ static void console_update_silent(void)
 #endif
 }
 
+int console_announce_r(void)
+{
+#if !CONFIG_IS_ENABLED(PRE_CONSOLE_BUFFER)
+       char buf[DISPLAY_OPTIONS_BANNER_LENGTH];
+
+       display_options_get_banner(false, buf, sizeof(buf));
+
+       console_puts_noserial(stdout, buf);
+#endif
+
+       return 0;
+}
+
 /* Called before relocation - use serial functions */
 int console_init_f(void)
 {
index 3d37f6a53bf71f4698ca601ae9d2ffc8b624b8eb..cea29ed6dc4ef0b26b9f7b53e5f6e53f90c04d23 100644 (file)
@@ -42,6 +42,18 @@ void console_record_reset(void);
  */
 void console_record_reset_enable(void);
 
+/**
+ * console_announce_r() - print a U-Boot console on non-serial consoles
+ *
+ * When U-Boot starts up with a display it generally does not announce itself
+ * on the display. The banner is instead emitted on the UART before relocation.
+ * This function prints a banner on devices which (we assume) did not receive
+ * it before relocation.
+ *
+ * @return 0 (meaning no errors)
+ */
+int console_announce_r(void);
+
 /*
  * CONSOLE multiplexing.
  */