[U-Boot] [PATCH v2 2/3] Allow displaying the U-Boot banner on a video display

Simon Glass sjg at chromium.org
Thu Jun 15 16:09:23 UTC 2017


Hi Bin,

On 12 June 2017 at 19:10, Bin Meng <bmeng.cn at gmail.com> wrote:
> Hi Simon,
>
> On Mon, Jun 12, 2017 at 11:17 PM, Simon Glass <sjg at chromium.org> wrote:
>> Hi Bin,
>>
>> On 12 June 2017 at 09:13, Bin Meng <bmeng.cn at gmail.com> wrote:
>>> Hi Simon,
>>>
>>> On Sun, Jun 11, 2017 at 1:59 AM, Simon Glass <sjg at chromium.org> wrote:
>>>> 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 at chromium.org>
>>>> ---
>>>>
>>>> Changes in v2:
>>>> - Reword function comment for console_announce_r() slighty
>>>>
>>>>  common/board_r.c  |  1 +
>>>>  common/console.c  | 15 +++++++++++----
>>>>  include/console.h | 12 ++++++++++++
>>>>  3 files changed, 24 insertions(+), 4 deletions(-)
>>>>
>>>> diff --git a/common/board_r.c b/common/board_r.c
>>>> index 15977e4bca..ff11eba5d3 100644
>>>> --- a/common/board_r.c
>>>> +++ b/common/board_r.c
>>>> @@ -846,6 +846,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
>>>> diff --git a/common/console.c b/common/console.c
>>>> index 1232808df5..3fcd7ce66b 100644
>>>> --- a/common/console.c
>>>> +++ b/common/console.c
>>>> @@ -202,7 +202,6 @@ static void console_putc(int file, const char c)
>>>>         }
>>>>  }
>>>>
>>>> -#if CONFIG_IS_ENABLED(PRE_CONSOLE_BUFFER)
>>>
>>> Why removing this? Without PRE_CONSOLE_BUFFER, I doubt it works.
>>
>> I want to be able to call the function below. It seems to work OK and
>> it doesn't rely on that option.
>>
>
> See comments below.
>
>>>
>>>>  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,17 @@ static void console_update_silent(void)
>>>>  #endif
>>>>  }
>>>>
>>>> +int console_announce_r(void)
>>>> +{
>>>> +       char buf[DISPLAY_OPTIONS_BANNER_LENGTH];
>>>> +
>>>> +       display_options_get_banner(false, buf, sizeof(buf));
>>>> +
>>>> +       console_puts_noserial(stdout, buf);
>
> Then I think we should do something like this:
>
> int console_announce_r(void)
> {
> #ifndef CONFIG_PRE_CONSOLE_BUFFER
>         char buf[DISPLAY_OPTIONS_BANNER_LENGTH];
>
>         display_options_get_banner(false, buf, sizeof(buf));
>         console_puts_noserial(stdout, buf);
> #endif
> }
>
> If we don't do this, there will be duplicated U-Boot version string
> shown on the screen if CONFIG_PRE_CONSOLE_BUFFER is defined.

I don't think so. This is a different thing. The pre-console buffer
only exists until console_init_f(), i.e. very early in pre-relocation
U-Boot. When console_init_f() is called the buffer is printed to the
(serial) console.

My patch is all about what happens after relocation. By this time the
pre-console buffer has been sent to the serial port. I want to display
the version number on the screen, and this should not affect the
pre-console buffer in any way.

>
>>>> +
>>>> +       return 0;
>>>> +}
>>>> +
>>>>  /* Called before relocation - use serial functions */
>>>>  int console_init_f(void)
>>>>  {
>>>> diff --git a/include/console.h b/include/console.h
>>>> index 3d37f6a53b..cea29ed6dc 100644
>>>> --- a/include/console.h
>>>> +++ b/include/console.h
>>>> @@ -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.
>>>>   */
>>>> --
>>>
>>> And I see another (same) patch @
>>> https://patchwork.ozlabs.org/patch/769426/ which got applied, but this
>>> one was sent later than the applied one. I am confused..
>>
>> Another patch in this series caused a breakage using a long BUILD_TAG
>> due to a bug in how the snprintf() calls were done. So I dropped two
>> patches from that series and sent this series instead.
>>
>> It wasn't noticed since I don't use BUILD_TAG and no tests were in
>> place. It just happened that Stephen Warren has automated testing that
>> caught it before it was pulled to mainline.
>
> OK, thanks for the clarification.
>
> Regards,
> Bin

Regards,
Simon


More information about the U-Boot mailing list