summaryrefslogtreecommitdiffstats
path: root/c/src/lib/libbsp
diff options
context:
space:
mode:
authorDaniel Hellstrom <daniel@gaisler.com>2012-04-19 15:21:23 +0200
committerGedare Bloom <gedare@rtems.org>2012-04-19 12:34:21 -0400
commit5903484a29288da6b0db05ca90c7aa6db263cf14 (patch)
treebb0aa72a32516a6434b1e2ad0b92c010c6bf64b6 /c/src/lib/libbsp
parentLEON3: add console interrupt mode support (diff)
downloadrtems-5903484a29288da6b0db05ca90c7aa6db263cf14.tar.bz2
LEON3: debugputs added printk mem buffer when no UART present
Signed-off-by: Daniel Hellstrom <daniel@gaisler.com>
Diffstat (limited to 'c/src/lib/libbsp')
-rw-r--r--c/src/lib/libbsp/sparc/leon3/console/debugputs.c14
1 files changed, 13 insertions, 1 deletions
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);
}