diff options
Diffstat (limited to 'common')
-rw-r--r-- | common/Kconfig | 143 | ||||
-rw-r--r-- | common/console.c | 12 | ||||
-rw-r--r-- | common/stdio.c | 6 | ||||
-rw-r--r-- | common/usb_kbd.c | 2 |
4 files changed, 154 insertions, 9 deletions
diff --git a/common/Kconfig b/common/Kconfig index 6d835ca..913d21a 100644 --- a/common/Kconfig +++ b/common/Kconfig @@ -170,6 +170,8 @@ config BOOTDELAY See doc/README.autoboot for details. +menu "Console" + config CONSOLE_RECORD bool "Console recording" help @@ -203,6 +205,147 @@ config IDENT_STRING help This options adds the board specific name to u-boot version. +config SILENT_CONSOLE + bool "Support a silent console" + help + This option allows the console to be silenced, meaning that no + output will appear on the console devices. This is controlled by + setting the environment vaariable 'silent' to a non-empty value. + Note this also silences the console when booting Linux. + + When the console is set up, the variable is checked, and the + GD_FLG_SILENT flag is set. Changing the environment variable later + will update the flag. + +config SILENT_U_BOOT_ONLY + bool "Only silence the U-Boot console" + depends on SILENT_CONSOLE + help + Normally when the U-Boot console is silenced, Linux's console is + also silenced (assuming the board boots into Linux). This option + allows the linux console to operate normally, even if U-Boot's + is silenced. + +config SILENT_CONSOLE_UPDATE_ON_SET + bool "Changes to the 'silent' environment variable update immediately" + depends on SILENT_CONSOLE + default y if SILENT_CONSOLE + help + When the 'silent' environment variable is changed, update the + console silence flag immediately. This allows 'setenv' to be used + to silence or un-silence the console. + + The effect is that any change to the variable will affect the + GD_FLG_SILENT flag. + +config SILENT_CONSOLE_UPDATE_ON_RELOC + bool "Allow flags to take effect on relocation" + depends on SILENT_CONSOLE + help + In some cases the environment is not available until relocation + (e.g. NAND). This option makes the value of the 'silent' + environment variable take effect at relocation. + +config PRE_CONSOLE_BUFFER + bool "Buffer characters before the console is available" + help + Prior to the console being initialised (i.e. serial UART + initialised etc) all console output is silently discarded. + Defining CONFIG_PRE_CONSOLE_BUFFER will cause U-Boot to + buffer any console messages prior to the console being + initialised to a buffer. The buffer is a circular buffer, so + if it overflows, earlier output is discarded. + + Note that this is not currently supported in SPL. It would be + useful to be able to share the pre-console buffer with SPL. + +config PRE_CON_BUF_SZ + int "Sets the size of the pre-console buffer" + depends on PRE_CONSOLE_BUFFER + default 4096 + help + The size of the pre-console buffer affects how much console output + can be held before it overflows and starts discarding earlier + output. Normally there is very little output at this early stage, + unless debugging is enabled, so allow enough for ~10 lines of + text. + + This is a useful feature if you are using a video console and + want to see the full boot output on the console. Without this + option only the post-relocation output will be displayed. + +config PRE_CON_BUF_ADDR + hex "Address of the pre-console buffer" + depends on PRE_CONSOLE_BUFFER + default 0x2f000000 if ARCH_SUNXI && MACH_SUN9I + default 0x4f000000 if ARCH_SUNXI && !MACH_SUN9I + help + This sets the start address of the pre-console buffer. This must + be in available memory and is accessed before relocation and + possibly before DRAM is set up. Therefore choose an address + carefully. + + We should consider removing this option and allocating the memory + in board_init_f_init_reserve() instead. + +config CONSOLE_MUX + bool "Enable console multiplexing" + default y if DM_VIDEO || VIDEO || LCD + help + This allows multiple devices to be used for each console 'file'. + For example, stdout can be set to go to serial and video. + Similarly, stdin can be set to come from serial and keyboard. + Input can be provided from either source. Console multiplexing + adds a small amount of size to U-Boot. Changes to the environment + variables stdout, stdin and stderr will take effect immediately. + +config SYS_CONSOLE_IS_IN_ENV + bool "Select console devices from the environment" + default y if CONSOLE_MUX + help + This allows multiple input/output devices to be set at boot time. + For example, if stdout is set to "serial,video" then output will + be sent to both the serial and video devices on boot. The + environment variables can be updated after boot to change the + input/output devices. + +config SYS_CONSOLE_OVERWRITE_ROUTINE + bool "Allow board control over console overwriting" + help + If this is enabled, and the board-specific function + overwrite_console() returns 1, the stdin, stderr and stdout are + switched to the serial port, else the settings in the environment + are used. If this is not enabled, the console will not be switched + to serial. + +config SYS_CONSOLE_ENV_OVERWRITE + bool "Update environment variables during console init" + help + The console environment variables (stdout, stdin, stderr) can be + used to determine the correct console devices on start-up. This + option writes the console devices to these variables on console + start-up (after relocation). This causes the environment to be + updated to match the console devices actually chosen. + +config SYS_CONSOLE_INFO_QUIET + bool "Don't display the console devices on boot" + help + Normally U-Boot displays the current settings for stdout, stdin + and stderr on boot when the post-relocation console is set up. + Enable this option to supress this output. It can be obtained by + calling stdio_print_current_devices() from board code. + +config SYS_STDIO_DEREGISTER + bool "Allow deregistering stdio devices" + default y if USB_KEYBOARD + help + Generally there is no need to deregister stdio devices since they + are never deactivated. But if a stdio device is used which can be + removed (for example a USB keyboard) then this option can be + enabled to ensure this is handled correctly. + +endmenu + config DEFAULT_FDT_FILE string "Default fdt file" help diff --git a/common/console.c b/common/console.c index c7f3243..e1d8476 100644 --- a/common/console.c +++ b/common/console.c @@ -16,6 +16,7 @@ #include <stdio_dev.h> #include <exports.h> #include <environment.h> +#include <watchdog.h> DECLARE_GLOBAL_DATA_PTR; @@ -65,11 +66,11 @@ U_BOOT_ENV_CALLBACK(console, on_console); static int on_silent(const char *name, const char *value, enum env_op op, int flags) { -#ifndef CONFIG_SILENT_CONSOLE_UPDATE_ON_SET +#if !CONFIG_IS_ENABLED(CONFIG_SILENT_CONSOLE_UPDATE_ON_SET) if (flags & H_INTERACTIVE) return 0; #endif -#ifndef CONFIG_SILENT_CONSOLE_UPDATE_ON_RELOC +#if !CONFIG_IS_ENABLED(CONFIG_SILENT_CONSOLE_UPDATE_ON_RELOC) if ((flags & H_INTERACTIVE) == 0) return 0; #endif @@ -201,7 +202,7 @@ static void console_putc(int file, const char c) } } -#ifdef CONFIG_PRE_CONSOLE_BUFFER +#if CONFIG_IS_ENABLED(PRE_CONSOLE_BUFFER) static void console_puts_noserial(int file, const char *s) { int i; @@ -247,7 +248,7 @@ static inline void console_putc(int file, const char c) stdio_devices[file]->putc(stdio_devices[file], c); } -#ifdef CONFIG_PRE_CONSOLE_BUFFER +#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) @@ -294,6 +295,7 @@ int fgetc(int file) * Effectively poll for input wherever it may be available. */ for (;;) { + WATCHDOG_RESET(); /* * Upper layer may have already called tstc() so * check for that first. @@ -413,7 +415,7 @@ int tstc(void) #define PRE_CONSOLE_FLUSHPOINT1_SERIAL 0 #define PRE_CONSOLE_FLUSHPOINT2_EVERYTHING_BUT_SERIAL 1 -#ifdef CONFIG_PRE_CONSOLE_BUFFER +#if CONFIG_IS_ENABLED(PRE_CONSOLE_BUFFER) #define CIRC_BUF_IDX(idx) ((idx) % (unsigned long)CONFIG_PRE_CON_BUF_SZ) static void pre_console_putc(const char c) diff --git a/common/stdio.c b/common/stdio.c index ab9b05d..8e4a9be 100644 --- a/common/stdio.c +++ b/common/stdio.c @@ -37,7 +37,7 @@ char *stdio_names[MAX_FILES] = { "stdin", "stdout", "stderr" }; #define CONFIG_SYS_DEVICE_NULLDEV 1 #endif -#ifdef CONFIG_SYS_STDIO_DEREGISTER +#if CONFIG_IS_ENABLED(SYS_STDIO_DEREGISTER) #define CONFIG_SYS_DEVICE_NULLDEV 1 #endif @@ -245,7 +245,7 @@ int stdio_register(struct stdio_dev *dev) /* deregister the device "devname". * returns 0 if success, -1 if device is assigned and 1 if devname not found */ -#ifdef CONFIG_SYS_STDIO_DEREGISTER +#if CONFIG_IS_ENABLED(SYS_STDIO_DEREGISTER) int stdio_deregister_dev(struct stdio_dev *dev, int force) { int l; @@ -292,7 +292,7 @@ int stdio_deregister(const char *devname, int force) return stdio_deregister_dev(dev, force); } -#endif /* CONFIG_SYS_STDIO_DEREGISTER */ +#endif /* CONFIG_IS_ENABLED(SYS_STDIO_DEREGISTER) */ int stdio_init_tables(void) { diff --git a/common/usb_kbd.c b/common/usb_kbd.c index a9872a6..5f9a64a 100644 --- a/common/usb_kbd.c +++ b/common/usb_kbd.c @@ -570,7 +570,7 @@ int drv_usb_kbd_init(void) /* Deregister the keyboard. */ int usb_kbd_deregister(int force) { -#ifdef CONFIG_SYS_STDIO_DEREGISTER +#if CONFIG_IS_ENABLED(SYS_STDIO_DEREGISTER) struct stdio_dev *dev; struct usb_device *usb_kbd_dev; struct usb_kbd_pdata *data; |