[rtems commit] LEON3: debugputs added printk mem buffer when no UART present

Gedare Bloom gedare at rtems.org
Thu Apr 19 16:31:41 UTC 2012


Module:    rtems
Branch:    master
Commit:    5903484a29288da6b0db05ca90c7aa6db263cf14
Changeset: http://git.rtems.org/rtems/commit/?id=5903484a29288da6b0db05ca90c7aa6db263cf14

Author:    Daniel Hellstrom <daniel at gaisler.com>
Date:      Thu Apr 19 15:21:23 2012 +0200

LEON3: debugputs added printk mem buffer when no UART present

Signed-off-by: Daniel Hellstrom <daniel at gaisler.com>

---

 c/src/lib/libbsp/sparc/leon3/console/debugputs.c |   14 +++++++++++++-
 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 951218a..a189f5b 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);
 }




More information about the vc mailing list