[U-Boot] [PATCH v3 2/3] bootm: Move silencing of linux console to deprecated config option.

Doug Anderson
2012-01-10T22:26:21Z

If you would like the old behavior of having bootm modify the bootargs
to silence the linux console when CONFIG_SILENT_CONSOLE is defined,
you now need to define the config CONFIG_DEPRECATED_SILENT_LINUX_CONSOLE.
A previous change already added this new config to all known users of
CONFIG_SILENT_CONSOLE.

Signed-off-by: Doug Anderson <dianders@chromium.org>
---
Changes in v2:
- Better description of CONFIG_SILENT_CONSOLE in README
- Example of how to use a script to silence Linux console in a non-
deprecated way in doc/README.silent

Changes in v3:
- Use __deprecated #define instead of direct gcc attribute
- Minor wording updates in doc/README.silent

README | 10 ++++++----
common/cmd_bootm.c | 10 +++++-----
doc/README.silent | 27 +++++++++++++++++++++++----
3 files changed, 34 insertions(+), 13 deletions(-)

diff --git a/README b/README
index 7916777..5ba8482 100644
--- a/README
+++ b/README
@@ -605,10 +605,12 @@ The following options need to be configured:
default i/o. Serial console can be forced with
environment 'console=serial'.

- When CONFIG_SILENT_CONSOLE is defined, all console
- messages (by U-Boot and Linux!) can be silenced with
- the "silent" environment variable. See
- doc/README.silent for more information.
+ When CONFIG_SILENT_CONSOLE is defined, all U-Boot console
+ messages can be silenced with the "silent" environment
+ variable. Linux console messages will not be silenced
+ based on the "silent" environment variable unless
+ CONFIG_DEPRECATED_SILENT_LINUX_CONSOLE is defined.
+ See doc/README.silent for more information.

- Console Baudrate:
CONFIG_BAUDRATE - in bps
diff --git a/common/cmd_bootm.c b/common/cmd_bootm.c
index d5745b1..775a7dc 100644
--- a/common/cmd_bootm.c
+++ b/common/cmd_bootm.c
@@ -83,8 +83,8 @@ extern flash_info_t flash_info[]; /* info for FLASH chips */
static int do_imls(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]);
#endif

-#ifdef CONFIG_SILENT_CONSOLE
-static void fixup_silent_linux(void);
+#ifdef CONFIG_DEPRECATED_SILENT_LINUX_CONSOLE
+static void fixup_silent_linux(void) __deprecated;
#endif

static image_header_t *image_get_kernel(ulong img_addr, int verify);
@@ -673,7 +673,7 @@ int do_bootm(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])

show_boot_progress(8);

-#ifdef CONFIG_SILENT_CONSOLE
+#ifdef CONFIG_DEPRECATED_SILENT_LINUX_CONSOLE
if (images.os.os == IH_OS_LINUX)
fixup_silent_linux();
#endif
@@ -1228,7 +1228,7 @@ U_BOOT_CMD(
/*******************************************************************/
/* helper routines */
/*******************************************************************/
-#ifdef CONFIG_SILENT_CONSOLE
+#ifdef CONFIG_DEPRECATED_SILENT_LINUX_CONSOLE
static void fixup_silent_linux(void)
{
char buf[256], *start, *end;
@@ -1259,7 +1259,7 @@ static void fixup_silent_linux(void)
setenv("bootargs", buf);
debug("after silent fix-up: %s\n", buf);
}
-#endif /* CONFIG_SILENT_CONSOLE */
+#endif /* CONFIG_DEPRECATED_SILENT_LINUX_CONSOLE */

/*******************************************************************/
diff --git a/doc/README.silent b/doc/README.silent
index a26e3df..32739ed 100644
--- a/doc/README.silent
+++ b/doc/README.silent
@@ -1,5 +1,5 @@
The config option CONFIG_SILENT_CONSOLE can be used to quiet messages
-on the console. If the option has been enabled, the output can be
+on the U-Boot console. If the option has been enabled, the output can be
silenced by setting the environment variable "silent". The variable
is latched into the global data at an early stage in the boot process
so deleting it with "setenv" will not take effect until the system is
@@ -15,6 +15,25 @@ The following actions are taken if "silent" is set at boot time:
suppressed automatically. Make sure to enable "nulldev" by
#defining CONFIG_SYS_DEVICE_NULLDEV in your board config file.

- - When booting a linux kernel, the "bootargs" are fixed up so that
- the argument "console=" will be in the command line, no matter how
- it was set in "bootargs" before.
+
+The config option CONFIG_SILENT_CONSOLE previously also caused u-boot
+to silence the Linux console (also based on the "silent" environment
+variable) by modifying the "bootargs" so that the argument "console="
+would be in the command line no matter how it was set in "bootargs"
+before. That behavior is now relegated to the config option
+CONFIG_DEPRECATED_SILENT_LINUX_CONSOLE with the caveat that using
+the option opens you up to a buffer overrun if your linux bootargs
+are >256 bytes.
+
+If you were relying on the old behavior of CONFIG_SILENT_CONSOLE to
+also silence the Linux console, a script like this might help you (where
+normal_bootargs is the old bootargs without the console= part,
+console_args is the non-silent console settings, and old_bootcmd is
+the old bootcmd):
+
+ setenv generate_bootargs 'if test -n "$silent"; then \
+ setenv bootargs $normal_bootargs console=; \
+ else \
+ setenv bootargs $normal_bootargs $console_args;
+ fi'
+ setenv bootcmd 'run generate_bootargs; run old_bootcmd'
--
1.7.3.1