From 5903484a29288da6b0db05ca90c7aa6db263cf14 Mon Sep 17 00:00:00 2001 From: Daniel Hellstrom Date: Thu, 19 Apr 2012 15:21:23 +0200 Subject: LEON3: debugputs added printk mem buffer when no UART present Signed-off-by: Daniel Hellstrom --- c/src/lib/libbsp/sparc/leon3/console/debugputs.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) (limited to 'c/src/lib/libbsp') diff --git a/c/src/lib/libbsp/sparc/leon3/console/debugputs.c b/c/src/lib/libbsp/sparc/leon3/console/debugputs.c index 951218a22c..a189f5b161 100644 --- a/c/src/lib/libbsp/sparc/leon3/console/debugputs.c +++ b/c/src/lib/libbsp/sparc/leon3/console/debugputs.c @@ -33,6 +33,14 @@ static int isinit = 0; int debug_uart_index __attribute__((weak)) = 0; ambapp_apb_uart *dbg_uart = NULL; +/* Before UART driver has registered (or when no UART is available), calls to + * printk that gets to bsp_out_char() will be filling data into the + * pre_printk_dbgbuf[] buffer, hopefully the buffer can help debugging the + * early BSP boot.. At least the last printk() will be caught. + */ +char pre_printk_dbgbuf[32] = {0}; +int pre_printk_pos = 0; + /* Initialize the BSP system debug console layer. It will scan AMBA Plu&Play * for a debug APBUART and enable RX/TX for that UART. */ @@ -122,8 +130,12 @@ int apbuart_inbyte_nonblocking(ambapp_apb_uart *regs) /* putchar/getchar for printk */ static void bsp_out_char(char c) { - if (dbg_uart == NULL) + if (dbg_uart == NULL) { + /* Local debug buffer when UART driver has not registered */ + pre_printk_dbgbuf[pre_printk_pos++] = c; + pre_printk_pos = pre_printk_pos & (sizeof(pre_printk_dbgbuf)-1); return; + } apbuart_outbyte_polled(dbg_uart, c); } -- cgit v1.2.3