diff options
author | Simon Glass <sjg@chromium.org> | 2011-10-18 13:43:20 +0000 |
---|---|---|
committer | Stefano Babic <sbabic@denx.de> | 2011-12-09 14:44:22 +0100 |
commit | 295d3942b806552503243f5cfb36aec6f1b5a9bf (patch) | |
tree | 3af9bc15401300eeaede2b4bc52afe21a6ae23da /common/console.c | |
parent | c4eba6ec5c58083b38340724c006294c7a4fe2eb (diff) | |
download | u-boot-imx-295d3942b806552503243f5cfb36aec6f1b5a9bf.zip u-boot-imx-295d3942b806552503243f5cfb36aec6f1b5a9bf.tar.gz u-boot-imx-295d3942b806552503243f5cfb36aec6f1b5a9bf.tar.bz2 |
Add board_pre_console_putc to deal with early console output
This patch adds support for console output before the console is inited.
The main purpose of this is to deal with a very early panic() which would
otherwise cause a silent hang.
A new board_pre_console_putc() function is added to the board API. If
provided by the board it will be called in the event of console output
before the console is ready. This function should turn on all UARTs and
spray the character out if it possibly can.
The feature is controlled by a new CONFIG_PRE_CONSOLE_PUTC option.
Signed-off-by: Simon Glass <sjg@chromium.org>
Acked-by: Graeme Russ <graeme.russ@gmail.com>
Diffstat (limited to 'common/console.c')
-rw-r--r-- | common/console.c | 10 |
1 files changed, 9 insertions, 1 deletions
diff --git a/common/console.c b/common/console.c index f17875e..d34a0f4 100644 --- a/common/console.c +++ b/common/console.c @@ -329,14 +329,19 @@ int tstc(void) return serial_tstc(); } -#ifdef CONFIG_PRE_CONSOLE_BUFFER +#if defined(CONFIG_PRE_CONSOLE_BUFFER) || defined(CONFIG_PRE_CONSOLE_PUTC) #define CIRC_BUF_IDX(idx) ((idx) % (unsigned long)CONFIG_PRE_CON_BUF_SZ) static void pre_console_putc(const char c) { +#ifdef CONFIG_PRE_CONSOLE_BUFFER char *buffer = (char *)CONFIG_PRE_CON_BUF_ADDR; buffer[CIRC_BUF_IDX(gd->precon_buf_idx++)] = c; +#endif +#ifdef CONFIG_PRE_CONSOLE_PUTC + board_pre_console_putc(c); +#endif } static void pre_console_puts(const char *s) @@ -347,6 +352,7 @@ static void pre_console_puts(const char *s) static void print_pre_console_buffer(void) { +#ifdef CONFIG_PRE_CONSOLE_BUFFER unsigned long i = 0; char *buffer = (char *)CONFIG_PRE_CON_BUF_ADDR; @@ -355,7 +361,9 @@ static void print_pre_console_buffer(void) while (i < gd->precon_buf_idx) putc(buffer[CIRC_BUF_IDX(i++)]); +#endif } + #else static inline void pre_console_putc(const char c) {} static inline void pre_console_puts(const char *s) {} |