All of lore.kernel.org
 help / color / mirror / Atom feed
* [U-Boot] [PATCH v2 1/3] display_options: Refactor to allow obtaining the banner
@ 2017-06-10 17:59 Simon Glass
  2017-06-10 17:59 ` [U-Boot] [PATCH v2 2/3] Allow displaying the U-Boot banner on a video display Simon Glass
                   ` (3 more replies)
  0 siblings, 4 replies; 13+ messages in thread
From: Simon Glass @ 2017-06-10 17:59 UTC (permalink / raw)
  To: u-boot

Move the display options code into a separate function so that the U-Boot
banner can be obtained from other code. Adjust the 'version' command to
use it.

Signed-off-by: Simon Glass <sjg@chromium.org>
---

Changes in v2:
- Update the code to be more testable
- Avoid a warning on spring, etc.

 cmd/version.c             |  4 +++-
 include/display_options.h | 19 +++++++++++++++++++
 lib/display_options.c     | 36 +++++++++++++++++++++++++++++++-----
 3 files changed, 53 insertions(+), 6 deletions(-)

diff --git a/cmd/version.c b/cmd/version.c
index 1be0667f09..15aab5dc18 100644
--- a/cmd/version.c
+++ b/cmd/version.c
@@ -17,7 +17,9 @@ const char __weak version_string[] = U_BOOT_VERSION_STRING;
 
 static int do_version(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
 {
-	printf("\n%s\n", version_string);
+	char buf[DISPLAY_OPTIONS_BANNER_LENGTH];
+
+	printf(display_options_get_banner(false, buf, sizeof(buf)));
 #ifdef CC_VERSION_STRING
 	puts(CC_VERSION_STRING "\n");
 #endif
diff --git a/include/display_options.h b/include/display_options.h
index ac44c459b3..ad707a344c 100644
--- a/include/display_options.h
+++ b/include/display_options.h
@@ -56,4 +56,23 @@ int print_buffer(ulong addr, const void *data, uint width, uint count,
  */
 int display_options(void);
 
+/* Suggested length of the buffer to pass to display_options_get_banner() */
+#define DISPLAY_OPTIONS_BANNER_LENGTH	200
+
+/**
+ * display_options_get_banner() - Get the U-Boot banner as a string
+ *
+ * This returns the U-Boot banner string
+ *
+ * @newlines: true to include two newlines at the start
+ * @buf: place to put string
+ * @size: Size of buf (string is truncated to fit)
+ * @return buf
+ */
+char *display_options_get_banner(bool newlines, char *buf, int size);
+
+/** This function is used for testing only */
+char *display_options_get_banner_priv(bool newlines, const char *build_tag,
+				      char *buf, int size);
+
 #endif
diff --git a/lib/display_options.c b/lib/display_options.c
index 29343fc00e..4ea27ca99d 100644
--- a/lib/display_options.c
+++ b/lib/display_options.c
@@ -13,13 +13,39 @@
 #include <linux/ctype.h>
 #include <asm/io.h>
 
-int display_options (void)
+char *display_options_get_banner_priv(bool newlines, const char *build_tag,
+				      char *buf, int size)
 {
-#if defined(BUILD_TAG)
-	printf ("\n\n%s, Build: %s\n\n", version_string, BUILD_TAG);
-#else
-	printf ("\n\n%s\n\n", version_string);
+	int len;
+
+	len = snprintf(buf, size, "%s%s", newlines ? "\n\n" : "",
+		       version_string);
+	if (build_tag && len < size)
+		len += snprintf(buf + len, size - len, ", Build: %s",
+				build_tag);
+	if (len > size - 3)
+		len = size - 3;
+	strcpy(buf + len, "\n\n");
+
+	return buf;
+}
+
+#ifndef BUILD_TAG
+#define BUILD_TAG NULL
 #endif
+
+char *display_options_get_banner(bool newlines, char *buf, int size)
+{
+	return display_options_get_banner_priv(newlines, BUILD_TAG, buf, size);
+}
+
+int display_options(void)
+{
+	char buf[DISPLAY_OPTIONS_BANNER_LENGTH];
+
+	display_options_get_banner(true, buf, sizeof(buf));
+	printf("%s", buf);
+
 	return 0;
 }
 
-- 
2.13.1.508.gb3defc5cc-goog

^ permalink raw reply related	[flat|nested] 13+ messages in thread

* [U-Boot] [PATCH v2 2/3] Allow displaying the U-Boot banner on a video display
  2017-06-10 17:59 [U-Boot] [PATCH v2 1/3] display_options: Refactor to allow obtaining the banner Simon Glass
@ 2017-06-10 17:59 ` Simon Glass
  2017-06-12 15:13   ` Bin Meng
  2017-06-10 17:59 ` [U-Boot] [PATCH v2 3/3] test: Add a test for snprintf() and the banner/version Simon Glass
                   ` (2 subsequent siblings)
  3 siblings, 1 reply; 13+ messages in thread
From: Simon Glass @ 2017-06-10 17:59 UTC (permalink / raw)
  To: u-boot

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>
---

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)
 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);
+
+	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.
  */
-- 
2.13.1.508.gb3defc5cc-goog

^ permalink raw reply related	[flat|nested] 13+ messages in thread

* [U-Boot] [PATCH v2 3/3] test: Add a test for snprintf() and the banner/version
  2017-06-10 17:59 [U-Boot] [PATCH v2 1/3] display_options: Refactor to allow obtaining the banner Simon Glass
  2017-06-10 17:59 ` [U-Boot] [PATCH v2 2/3] Allow displaying the U-Boot banner on a video display Simon Glass
@ 2017-06-10 17:59 ` Simon Glass
  2017-06-13  1:11   ` Bin Meng
  2017-06-12 15:13 ` [U-Boot] [PATCH v2 1/3] display_options: Refactor to allow obtaining the banner Bin Meng
  2017-06-12 19:28 ` Stephen Warren
  3 siblings, 1 reply; 13+ messages in thread
From: Simon Glass @ 2017-06-10 17:59 UTC (permalink / raw)
  To: u-boot

Add a simple test to make sure that these functions obey the buffer size
passed into them.

Signed-off-by: Simon Glass <sjg@chromium.org>
---

Changes in v2:
- Fix buffer overflow problem when there is not enough space for the build tag
- Add test to check for buffer overflow problems

 test/Makefile   |  1 +
 test/print_ut.c | 83 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 2 files changed, 84 insertions(+)
 create mode 100644 test/print_ut.c

diff --git a/test/Makefile b/test/Makefile
index 0f5de57399..6305afb211 100644
--- a/test/Makefile
+++ b/test/Makefile
@@ -8,4 +8,5 @@ obj-$(CONFIG_UNIT_TEST) += cmd_ut.o
 obj-$(CONFIG_UNIT_TEST) += ut.o
 obj-$(CONFIG_SANDBOX) += command_ut.o
 obj-$(CONFIG_SANDBOX) += compression.o
+obj-$(CONFIG_SANDBOX) += print_ut.o
 obj-$(CONFIG_UT_TIME) += time_ut.o
diff --git a/test/print_ut.c b/test/print_ut.c
new file mode 100644
index 0000000000..baad289972
--- /dev/null
+++ b/test/print_ut.c
@@ -0,0 +1,83 @@
+/*
+ * Copyright (c) 2012, The Chromium Authors
+ *
+ * SPDX-License-Identifier:	GPL-2.0+
+ */
+
+#define DEBUG
+
+#include <common.h>
+#include <display_options.h>
+#include <version.h>
+
+#define FAKE_BUILD_TAG	"jenkins-u-boot-denx_uboot_dm-master-build-aarch64" \
+			"and a lot more text to come"
+
+static int do_ut_print(cmd_tbl_t *cmdtp, int flag, int argc,
+		       char *const argv[])
+{
+	char big_str[400];
+	int big_str_len;
+	char str[10], *s;
+	int len;
+
+	printf("%s: Testing print\n", __func__);
+
+	snprintf(str, sizeof(str), "testing");
+	assert(!strcmp("testing", str));
+
+	snprintf(str, sizeof(str), "testing but too long");
+	assert(!strcmp("testing b", str));
+
+	snprintf(str, 1, "testing none");
+	assert(!strcmp("", str));
+
+	*str = 'x';
+	snprintf(str, 0, "testing none");
+	assert(*str == 'x');
+
+	/* Test the banner function */
+	s = display_options_get_banner(true, str, sizeof(str));
+	assert(s == str);
+	assert(!strcmp("\n\nU-Boo\n\n", s));
+
+	s = display_options_get_banner(true, str, 1);
+	assert(s == str);
+	assert(!strcmp("", s));
+
+	s = display_options_get_banner(true, str, 2);
+	assert(s == str);
+	assert(!strcmp("\n", s));
+
+	s = display_options_get_banner(false, str, sizeof(str));
+	assert(s == str);
+	assert(!strcmp("U-Boot \n\n", s));
+
+	/* Give it enough space for some of the version */
+	big_str_len = strlen(version_string) - 5;
+	s = display_options_get_banner_priv(false, FAKE_BUILD_TAG, big_str,
+					    big_str_len);
+	assert(s == big_str);
+	assert(!strncmp(version_string, s, big_str_len - 3));
+	assert(!strcmp("\n\n", s + big_str_len - 3));
+
+	/* Give it enough space for the version and some of the build tag */
+	big_str_len = strlen(version_string) + 9 + 20;
+	s = display_options_get_banner_priv(false, FAKE_BUILD_TAG, big_str,
+					    big_str_len);
+	assert(s == big_str);
+	len = strlen(version_string);
+	assert(!strncmp(version_string, s, len));
+	assert(!strncmp(", Build: ", s + len, 9));
+	assert(!strncmp(FAKE_BUILD_TAG, s + 9 + len, 12));
+	assert(!strcmp("\n\n", s + big_str_len - 3));
+
+	printf("%s: Everything went swimmingly\n", __func__);
+	return 0;
+}
+
+U_BOOT_CMD(
+	ut_print,	1,	1,	do_ut_print,
+	"Very basic test of printf(), etc.",
+	""
+);
-- 
2.13.1.508.gb3defc5cc-goog

^ permalink raw reply related	[flat|nested] 13+ messages in thread

* [U-Boot] [PATCH v2 1/3] display_options: Refactor to allow obtaining the banner
  2017-06-10 17:59 [U-Boot] [PATCH v2 1/3] display_options: Refactor to allow obtaining the banner Simon Glass
  2017-06-10 17:59 ` [U-Boot] [PATCH v2 2/3] Allow displaying the U-Boot banner on a video display Simon Glass
  2017-06-10 17:59 ` [U-Boot] [PATCH v2 3/3] test: Add a test for snprintf() and the banner/version Simon Glass
@ 2017-06-12 15:13 ` Bin Meng
  2017-06-12 19:28 ` Stephen Warren
  3 siblings, 0 replies; 13+ messages in thread
From: Bin Meng @ 2017-06-12 15:13 UTC (permalink / raw)
  To: u-boot

On Sun, Jun 11, 2017 at 1:59 AM, Simon Glass <sjg@chromium.org> wrote:
> Move the display options code into a separate function so that the U-Boot
> banner can be obtained from other code. Adjust the 'version' command to
> use it.
>
> Signed-off-by: Simon Glass <sjg@chromium.org>
> ---
>
> Changes in v2:
> - Update the code to be more testable
> - Avoid a warning on spring, etc.
>
>  cmd/version.c             |  4 +++-
>  include/display_options.h | 19 +++++++++++++++++++
>  lib/display_options.c     | 36 +++++++++++++++++++++++++++++++-----
>  3 files changed, 53 insertions(+), 6 deletions(-)
>

Reviewed-by: Bin Meng <bmeng.cn@gmail.com>

One nits below.

> diff --git a/cmd/version.c b/cmd/version.c
> index 1be0667f09..15aab5dc18 100644
> --- a/cmd/version.c
> +++ b/cmd/version.c
> @@ -17,7 +17,9 @@ const char __weak version_string[] = U_BOOT_VERSION_STRING;
>
>  static int do_version(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
>  {
> -       printf("\n%s\n", version_string);
> +       char buf[DISPLAY_OPTIONS_BANNER_LENGTH];
> +
> +       printf(display_options_get_banner(false, buf, sizeof(buf)));
>  #ifdef CC_VERSION_STRING
>         puts(CC_VERSION_STRING "\n");
>  #endif
> diff --git a/include/display_options.h b/include/display_options.h
> index ac44c459b3..ad707a344c 100644
> --- a/include/display_options.h
> +++ b/include/display_options.h
> @@ -56,4 +56,23 @@ int print_buffer(ulong addr, const void *data, uint width, uint count,
>   */
>  int display_options(void);
>
> +/* Suggested length of the buffer to pass to display_options_get_banner() */
> +#define DISPLAY_OPTIONS_BANNER_LENGTH  200
> +
> +/**
> + * display_options_get_banner() - Get the U-Boot banner as a string
> + *
> + * This returns the U-Boot banner string
> + *
> + * @newlines: true to include two newlines at the start
> + * @buf: place to put string
> + * @size: Size of buf (string is truncated to fit)
> + * @return buf
> + */
> +char *display_options_get_banner(bool newlines, char *buf, int size);
> +
> +/** This function is used for testing only */

nits: should be /*

[snip]

Regards,
Bin

^ permalink raw reply	[flat|nested] 13+ messages in thread

* [U-Boot] [PATCH v2 2/3] Allow displaying the U-Boot banner on a video display
  2017-06-10 17:59 ` [U-Boot] [PATCH v2 2/3] Allow displaying the U-Boot banner on a video display Simon Glass
@ 2017-06-12 15:13   ` Bin Meng
  2017-06-12 15:17     ` Simon Glass
  0 siblings, 1 reply; 13+ messages in thread
From: Bin Meng @ 2017-06-12 15:13 UTC (permalink / raw)
  To: u-boot

Hi Simon,

On Sun, Jun 11, 2017 at 1:59 AM, Simon Glass <sjg@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@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.

>  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);
> +
> +       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..

Regards,
Bin

^ permalink raw reply	[flat|nested] 13+ messages in thread

* [U-Boot] [PATCH v2 2/3] Allow displaying the U-Boot banner on a video display
  2017-06-12 15:13   ` Bin Meng
@ 2017-06-12 15:17     ` Simon Glass
  2017-06-13  1:10       ` Bin Meng
  0 siblings, 1 reply; 13+ messages in thread
From: Simon Glass @ 2017-06-12 15:17 UTC (permalink / raw)
  To: u-boot

Hi Bin,

On 12 June 2017 at 09:13, Bin Meng <bmeng.cn@gmail.com> wrote:
> Hi Simon,
>
> On Sun, Jun 11, 2017 at 1:59 AM, Simon Glass <sjg@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@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.

>
>>  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);
>> +
>> +       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.

Regards,
Simon

^ permalink raw reply	[flat|nested] 13+ messages in thread

* [U-Boot] [PATCH v2 1/3] display_options: Refactor to allow obtaining the banner
  2017-06-10 17:59 [U-Boot] [PATCH v2 1/3] display_options: Refactor to allow obtaining the banner Simon Glass
                   ` (2 preceding siblings ...)
  2017-06-12 15:13 ` [U-Boot] [PATCH v2 1/3] display_options: Refactor to allow obtaining the banner Bin Meng
@ 2017-06-12 19:28 ` Stephen Warren
  2017-06-13  1:07   ` Bin Meng
  3 siblings, 1 reply; 13+ messages in thread
From: Stephen Warren @ 2017-06-12 19:28 UTC (permalink / raw)
  To: u-boot

On 06/10/2017 11:59 AM, Simon Glass wrote:
> Move the display options code into a separate function so that the U-Boot
> banner can be obtained from other code. Adjust the 'version' command to
> use it.

This series passed my automated testing, so:
Tested-by: Stephen Warren <swarren@nvidia.com>

^ permalink raw reply	[flat|nested] 13+ messages in thread

* [U-Boot] [PATCH v2 1/3] display_options: Refactor to allow obtaining the banner
  2017-06-12 19:28 ` Stephen Warren
@ 2017-06-13  1:07   ` Bin Meng
  0 siblings, 0 replies; 13+ messages in thread
From: Bin Meng @ 2017-06-13  1:07 UTC (permalink / raw)
  To: u-boot

On Tue, Jun 13, 2017 at 3:28 AM, Stephen Warren <swarren@wwwdotorg.org> wrote:
> On 06/10/2017 11:59 AM, Simon Glass wrote:
>>
>> Move the display options code into a separate function so that the U-Boot
>> banner can be obtained from other code. Adjust the 'version' command to
>> use it.
>
>
> This series passed my automated testing, so:
> Tested-by: Stephen Warren <swarren@nvidia.com>

Tested on Intel MinnowMax
Tested-by: Bin Meng <bmeng.cn@gmail.com>

^ permalink raw reply	[flat|nested] 13+ messages in thread

* [U-Boot] [PATCH v2 2/3] Allow displaying the U-Boot banner on a video display
  2017-06-12 15:17     ` Simon Glass
@ 2017-06-13  1:10       ` Bin Meng
  2017-06-15 16:09         ` Simon Glass
  0 siblings, 1 reply; 13+ messages in thread
From: Bin Meng @ 2017-06-13  1:10 UTC (permalink / raw)
  To: u-boot

Hi Simon,

On Mon, Jun 12, 2017 at 11:17 PM, Simon Glass <sjg@chromium.org> wrote:
> Hi Bin,
>
> On 12 June 2017 at 09:13, Bin Meng <bmeng.cn@gmail.com> wrote:
>> Hi Simon,
>>
>> On Sun, Jun 11, 2017 at 1:59 AM, Simon Glass <sjg@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@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.

>>> +
>>> +       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

^ permalink raw reply	[flat|nested] 13+ messages in thread

* [U-Boot] [PATCH v2 3/3] test: Add a test for snprintf() and the banner/version
  2017-06-10 17:59 ` [U-Boot] [PATCH v2 3/3] test: Add a test for snprintf() and the banner/version Simon Glass
@ 2017-06-13  1:11   ` Bin Meng
  0 siblings, 0 replies; 13+ messages in thread
From: Bin Meng @ 2017-06-13  1:11 UTC (permalink / raw)
  To: u-boot

On Sun, Jun 11, 2017 at 1:59 AM, Simon Glass <sjg@chromium.org> wrote:
> Add a simple test to make sure that these functions obey the buffer size
> passed into them.
>
> Signed-off-by: Simon Glass <sjg@chromium.org>
> ---
>
> Changes in v2:
> - Fix buffer overflow problem when there is not enough space for the build tag
> - Add test to check for buffer overflow problems
>
>  test/Makefile   |  1 +
>  test/print_ut.c | 83 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++
>  2 files changed, 84 insertions(+)
>  create mode 100644 test/print_ut.c
>

Reviewed-by: Bin Meng <bmeng.cn@gmail.com>

^ permalink raw reply	[flat|nested] 13+ messages in thread

* [U-Boot] [PATCH v2 2/3] Allow displaying the U-Boot banner on a video display
  2017-06-13  1:10       ` Bin Meng
@ 2017-06-15 16:09         ` Simon Glass
  2017-06-16  1:12           ` Bin Meng
  0 siblings, 1 reply; 13+ messages in thread
From: Simon Glass @ 2017-06-15 16:09 UTC (permalink / raw)
  To: u-boot

Hi Bin,

On 12 June 2017 at 19:10, Bin Meng <bmeng.cn@gmail.com> wrote:
> Hi Simon,
>
> On Mon, Jun 12, 2017 at 11:17 PM, Simon Glass <sjg@chromium.org> wrote:
>> Hi Bin,
>>
>> On 12 June 2017 at 09:13, Bin Meng <bmeng.cn@gmail.com> wrote:
>>> Hi Simon,
>>>
>>> On Sun, Jun 11, 2017 at 1:59 AM, Simon Glass <sjg@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@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

^ permalink raw reply	[flat|nested] 13+ messages in thread

* [U-Boot] [PATCH v2 2/3] Allow displaying the U-Boot banner on a video display
  2017-06-15 16:09         ` Simon Glass
@ 2017-06-16  1:12           ` Bin Meng
  2017-06-16  1:50             ` Simon Glass
  0 siblings, 1 reply; 13+ messages in thread
From: Bin Meng @ 2017-06-16  1:12 UTC (permalink / raw)
  To: u-boot

Hi Simon,

On Fri, Jun 16, 2017 at 12:09 AM, Simon Glass <sjg@chromium.org> wrote:
> Hi Bin,
>
> On 12 June 2017 at 19:10, Bin Meng <bmeng.cn@gmail.com> wrote:
>> Hi Simon,
>>
>> On Mon, Jun 12, 2017 at 11:17 PM, Simon Glass <sjg@chromium.org> wrote:
>>> Hi Bin,
>>>
>>> On 12 June 2017 at 09:13, Bin Meng <bmeng.cn@gmail.com> wrote:
>>>> Hi Simon,
>>>>
>>>> On Sun, Jun 11, 2017 at 1:59 AM, Simon Glass <sjg@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@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.
>

But in fact, the version string will be printed twice on the screen
(not on the serial) if CONFIG_PRE_CONSOLE_BUFFER is defined. One
existed in the pre-console buffer, as you mentioned. The other one is
what you added here.

> 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.
>

[snip]

Regards,
Bin

^ permalink raw reply	[flat|nested] 13+ messages in thread

* [U-Boot] [PATCH v2 2/3] Allow displaying the U-Boot banner on a video display
  2017-06-16  1:12           ` Bin Meng
@ 2017-06-16  1:50             ` Simon Glass
  0 siblings, 0 replies; 13+ messages in thread
From: Simon Glass @ 2017-06-16  1:50 UTC (permalink / raw)
  To: u-boot

Hi Bin,

On 15 June 2017 at 19:12, Bin Meng <bmeng.cn@gmail.com> wrote:
> Hi Simon,
>
> On Fri, Jun 16, 2017 at 12:09 AM, Simon Glass <sjg@chromium.org> wrote:
>> Hi Bin,
>>
>> On 12 June 2017 at 19:10, Bin Meng <bmeng.cn@gmail.com> wrote:
>>> Hi Simon,
>>>
>>> On Mon, Jun 12, 2017 at 11:17 PM, Simon Glass <sjg@chromium.org> wrote:
>>>> Hi Bin,
>>>>
>>>> On 12 June 2017 at 09:13, Bin Meng <bmeng.cn@gmail.com> wrote:
>>>>> Hi Simon,
>>>>>
>>>>> On Sun, Jun 11, 2017 at 1:59 AM, Simon Glass <sjg@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@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.
>>
>
> But in fact, the version string will be printed twice on the screen
> (not on the serial) if CONFIG_PRE_CONSOLE_BUFFER is defined. One
> existed in the pre-console buffer, as you mentioned. The other one is
> what you added here.

OK I see what you mean. I didn't know (or forgot) that the pre-console
buffer emitted its output later also.

I think I'll enable it for sandbox and try to rationalise the code a
little. Thanks for spotting this!

>
>> 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.
>>
>
> [snip]
>
> Regards,
> Bin

Regards,
Simon

^ permalink raw reply	[flat|nested] 13+ messages in thread

end of thread, other threads:[~2017-06-16  1:50 UTC | newest]

Thread overview: 13+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2017-06-10 17:59 [U-Boot] [PATCH v2 1/3] display_options: Refactor to allow obtaining the banner Simon Glass
2017-06-10 17:59 ` [U-Boot] [PATCH v2 2/3] Allow displaying the U-Boot banner on a video display Simon Glass
2017-06-12 15:13   ` Bin Meng
2017-06-12 15:17     ` Simon Glass
2017-06-13  1:10       ` Bin Meng
2017-06-15 16:09         ` Simon Glass
2017-06-16  1:12           ` Bin Meng
2017-06-16  1:50             ` Simon Glass
2017-06-10 17:59 ` [U-Boot] [PATCH v2 3/3] test: Add a test for snprintf() and the banner/version Simon Glass
2017-06-13  1:11   ` Bin Meng
2017-06-12 15:13 ` [U-Boot] [PATCH v2 1/3] display_options: Refactor to allow obtaining the banner Bin Meng
2017-06-12 19:28 ` Stephen Warren
2017-06-13  1:07   ` Bin Meng

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.