Patchwork [U-Boot,v2,2/2] bootm: Move silencing of linux console to deprecated config option.

login
register
mail settings
Submitter Doug Anderson
Date Jan. 10, 2012, 9:36 p.m.
Message ID <1326231380-30128-3-git-send-email-dianders@chromium.org>
Download mbox | patch
Permalink /patch/135311/
State Superseded
Headers show

Comments

Doug Anderson - Jan. 10, 2012, 9:36 p.m.
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

 README             |   10 ++++++----
 common/cmd_bootm.c |   10 +++++-----
 doc/README.silent  |   27 +++++++++++++++++++++++----
 3 files changed, 34 insertions(+), 13 deletions(-)
Wolfgang Denk - Jan. 10, 2012, 10:33 p.m.
Dear Doug Anderson,

In message <1326231380-30128-3-git-send-email-dianders@chromium.org> you wrote:
> 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.

This is ugly and does no good.

You know that this feature is used by many boards, and unless you can
provide a clean solution for these, you cannot declare the existing
one as deprecated.

Best regards,

Wolfgang Denk

Patch

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..8d1899e 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) __attribute__ ((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..a4b8a97 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 warning that using
+the option opens you up to a buffer overrun if your linux bootargs
+can be >256 bytes.
+
+If you were relying on the old behavior of CONFIG_SILENT_CONSOLE to
+also silence the Linux console, a script like this may 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'