bsps/leon3: Auto initialization for printk()

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.
This commit is contained in:
Sebastian Huber
2021-06-10 13:42:18 +02:00
parent 2c07f24af2
commit 634a2c0616

View File

@@ -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;
}
}