
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 --- drivers/serial/Kconfig | 3 ++- drivers/serial/serial_sbi.c | 19 +++++++++++++++++++ 2 files changed, 21 insertions(+), 1 deletion(-)
diff --git a/drivers/serial/Kconfig b/drivers/serial/Kconfig index a1e089962a..8421c5c047 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,7 +290,7 @@ 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 diff --git a/drivers/serial/serial_sbi.c b/drivers/serial/serial_sbi.c index b9f35ed36e..093c7309d3 100644 --- a/drivers/serial/serial_sbi.c +++ b/drivers/serial/serial_sbi.c @@ -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,21 @@ 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) +{ + sbi_dbcn_available = sbi_probe_extension(SBI_EXT_DBCN); +} + +static inline void _debug_uart_putc(int ch) +{ + if (sbi_dbcn_available) + sbi_dbcn_write_byte(ch); +} + +#endif + DEBUG_UART_FUNCS