Allow displaying the U-Boot banner on a video display

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>
This commit is contained in:
Simon Glass 2017-06-15 21:37:50 -06:00
parent 6c519f2dc4
commit b0895384be
3 changed files with 26 additions and 4 deletions

View 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

View 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)
{

View 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.
*/