diff options
| -rw-r--r-- | README | 17 | ||||
| -rw-r--r-- | common/console.c | 10 | ||||
| -rw-r--r-- | include/common.h | 7 | 
3 files changed, 33 insertions, 1 deletions
| @@ -638,6 +638,23 @@ The following options need to be configured:  		'Sane' compilers will generate smaller code if  		CONFIG_PRE_CON_BUF_SZ is a power of 2 +- Pre-console putc(): +		Prior to the console being initialised, console output is +		normally silently discarded. This can be annoying if a +		panic() happens in this time. + +		If the CONFIG_PRE_CONSOLE_PUTC option is defined, then +		U-Boot will call board_pre_console_putc() for each output +		character in this case, This function should try to output +		the character if possible, perhaps on all available UARTs +		(it will need to do this directly, since the console code +		is not functional yet). Note that if the panic happens +		early enough, then it is possible that board_init_f() +		(or even arch_cpu_init() on ARM) has not been called yet. +		You should init all clocks, GPIOs, etc. that are needed +		to get the character out. Baud rates will need to default +		to something sensible. +  - Boot Delay:	CONFIG_BOOTDELAY - in seconds  		Delay before automatically booting the default image;  		set to -1 to disable autoboot. diff --git a/common/console.c b/common/console.c index f17875ead..d34a0f4d8 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) {} diff --git a/include/common.h b/include/common.h index 05a658cdf..5cfdd762d 100644 --- a/include/common.h +++ b/include/common.h @@ -285,6 +285,13 @@ extern ulong monitor_flash_len;  int mac_read_from_eeprom(void);  extern u8 _binary_dt_dtb_start[];	/* embedded device tree blob */ +/* + * Called when console output is requested before the console is available. + * The board should do its best to get the character out to the user any way + * it can. + */ +void board_pre_console_putc(int ch); +  /* common/flash.c */  void flash_perror (int); |