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 choice
prompt "Select which UART will provide the debug UART" prompt "Select which UART will provide the debug UART"
depends on DEBUG_UART depends on DEBUG_UART
default DEBUG_SBI_CONSOLE if RISCV_SMODE
default DEBUG_UART_NS16550 default DEBUG_UART_NS16550
config DEBUG_UART_ALTERA_JTAGUART config DEBUG_UART_ALTERA_JTAGUART
@ -289,11 +290,13 @@ config DEBUG_EFI_CONSOLE
config DEBUG_SBI_CONSOLE config DEBUG_SBI_CONSOLE
bool "SBI" bool "SBI"
depends on SBI_V01 depends on RISCV_SMODE
help help
Select this to enable a debug console which calls back to SBI to 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 output to the console. This can be useful for early debugging of
U-Boot when running on top of SBI (Supervisor Binary Interface). 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 config DEBUG_UART_S5P
bool "Samsung S5P" bool "Samsung S5P"

View File

@ -3,6 +3,8 @@
#include <debug_uart.h> #include <debug_uart.h>
#include <asm/sbi.h> #include <asm/sbi.h>
#ifdef CONFIG_SBI_V01
static inline void _debug_uart_init(void) static inline void _debug_uart_init(void)
{ {
} }
@ -13,4 +15,22 @@ static inline void _debug_uart_putc(int c)
sbi_console_putchar(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 DEBUG_UART_FUNCS