From dfe08374943c0e898fcfaf7327f69e0fb56b7d23 Mon Sep 17 00:00:00 2001 From: Heinrich Schuchardt Date: Mon, 4 Sep 2023 13:24:04 +0200 Subject: [PATCH] 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 Reviewed-by: Leo Yu-Chi Liang --- drivers/serial/Kconfig | 5 ++++- drivers/serial/serial_sbi.c | 20 ++++++++++++++++++++ 2 files changed, 24 insertions(+), 1 deletion(-) diff --git a/drivers/serial/Kconfig b/drivers/serial/Kconfig index a1e0899..8c54bc9 100644 --- a/drivers/serial/Kconfig +++ b/drivers/serial/Kconfig @@ -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" diff --git a/drivers/serial/serial_sbi.c b/drivers/serial/serial_sbi.c index b9f35ed..a51a96c 100644 --- a/drivers/serial/serial_sbi.c +++ b/drivers/serial/serial_sbi.c @@ -3,6 +3,8 @@ #include #include +#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 -- 2.7.4