[PATCH 3/7] bsps/leon3: Auto initialization for printk()

Sebastian Huber sebastian.huber at embedded-brains.de
Thu Jun 10 13:24:02 UTC 2021


Get rid of the hack to output into the idle stack during the early system
initialization.  This fixes also a couple of test program failures which fail
due to missing output.
---
 bsps/sparc/leon3/console/printk_support.c | 42 ++++++++---------------
 1 file changed, 14 insertions(+), 28 deletions(-)

diff --git a/bsps/sparc/leon3/console/printk_support.c b/bsps/sparc/leon3/console/printk_support.c
index f521f09a4c..d9900856e8 100644
--- a/bsps/sparc/leon3/console/printk_support.c
+++ b/bsps/sparc/leon3/console/printk_support.c
@@ -25,23 +25,7 @@
 int leon3_debug_uart_index __attribute__((weak)) = 0;
 struct apbuart_regs *leon3_debug_uart = NULL;
 
-/*
- * Before UART driver is available, use the idle stack to buffer early uses of
- * printk().
- */
-static size_t bsp_debug_uart_pre_init_buf_index;
-
-static void bsp_debug_uart_pre_init_out(char c)
-{
-  size_t i;
-
-  i = bsp_debug_uart_pre_init_buf_index;
-
-  if (i < _Thread_Idle_stack_size) {
-    bsp_debug_uart_pre_init_buf_index = i + 1;
-    _Thread_Idle_stacks[i] = c;
-  }
-}
+static void bsp_debug_uart_init(void);
 
 static void bsp_debug_uart_discard(char c)
 {
@@ -58,6 +42,12 @@ static int bsp_debug_uart_poll_char(void)
   return apbuart_inbyte_nonblocking(leon3_debug_uart);
 }
 
+static void bsp_debug_uart_pre_init_out(char c)
+{
+  bsp_debug_uart_init();
+  (*BSP_output_char)(c);
+}
+
 /* Initialize the BSP system debug console layer. It will scan AMBA Plu&Play
  * for a debug APBUART and enable RX/TX for that UART.
  */
@@ -65,7 +55,12 @@ static void bsp_debug_uart_init(void)
 {
   int i;
   struct ambapp_dev *adev;
-  struct ambapp_apb_info *apb;
+
+  if ( BSP_output_char != bsp_debug_uart_pre_init_out ) {
+    return;
+  }
+
+  BSP_output_char = bsp_debug_uart_discard;
 
   /* Update leon3_debug_uart_index to index used as debug console. Let user
    * select Debug console by setting leon3_debug_uart_index. If the BSP is to
@@ -89,8 +84,7 @@ static void bsp_debug_uart_init(void)
                                  VENDOR_GAISLER, GAISLER_APBUART,
                                  ambapp_find_by_idx, (void *)&i);
   if (adev != NULL) {
-    size_t i;
-    size_t n;
+    struct ambapp_apb_info *apb;
 
     /*
      * Found a matching debug console, initialize debug UART if present for
@@ -103,14 +97,6 @@ static void bsp_debug_uart_init(void)
 
     BSP_poll_char = bsp_debug_uart_poll_char;
     BSP_output_char = bsp_debug_uart_output_char;
-
-    n = bsp_debug_uart_pre_init_buf_index;
-
-    for (i = 0; i < n; ++i) {
-      rtems_putc(_Thread_Idle_stacks[i]);
-    }
-  } else {
-    BSP_output_char = bsp_debug_uart_discard;
   }
 }
 
-- 
2.26.2



More information about the devel mailing list