risc-v: implement DBCN based debug console

Use the DBCN SBI extension to implement a debug console.
Make it the default for S-mode RISC-V.

Signed-off-by: Heinrich Schuchardt <heinrich.schuchardt@canonical.com>
Reviewed-by: Leo Yu-Chi Liang <ycliang@andestech.com>
This commit is contained in:
Heinrich Schuchardt 2023-09-04 13:24:04 +02:00 committed by Leo Yu-Chi Liang
parent d14222e7c1
commit dfe0837494
2 changed files with 24 additions and 1 deletions

View file

@ -218,6 +218,7 @@ config DEBUG_UART
choice
prompt "Select which UART will provide the debug UART"
depends on DEBUG_UART
default DEBUG_SBI_CONSOLE if RISCV_SMODE
default DEBUG_UART_NS16550
config DEBUG_UART_ALTERA_JTAGUART
@ -289,11 +290,13 @@ config DEBUG_EFI_CONSOLE
config DEBUG_SBI_CONSOLE
bool "SBI"
depends on SBI_V01
depends on RISCV_SMODE
help
Select this to enable a debug console which calls back to SBI to
output to the console. This can be useful for early debugging of
U-Boot when running on top of SBI (Supervisor Binary Interface).
This implementation of the debug UART is not available while in
M-mode (e.g. during SPL).
config DEBUG_UART_S5P
bool "Samsung S5P"

View file

@ -3,6 +3,8 @@
#include <debug_uart.h>
#include <asm/sbi.h>
#ifdef CONFIG_SBI_V01
static inline void _debug_uart_init(void)
{
}
@ -13,4 +15,22 @@ static inline void _debug_uart_putc(int c)
sbi_console_putchar(c);
}
#else
static int sbi_dbcn_available;
static inline void _debug_uart_init(void)
{
if (CONFIG_IS_ENABLED(RISCV_SMODE))
sbi_dbcn_available = sbi_probe_extension(SBI_EXT_DBCN);
}
static inline void _debug_uart_putc(int ch)
{
if (CONFIG_IS_ENABLED(RISCV_SMODE) && sbi_dbcn_available)
sbi_dbcn_write_byte(ch);
}
#endif
DEBUG_UART_FUNCS