summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHeinrich Schuchardt <heinrich.schuchardt@canonical.com>2023-09-04 14:24:04 +0300
committerLeo Yu-Chi Liang <ycliang@andestech.com>2023-09-05 05:53:55 +0300
commitdfe08374943c0e898fcfaf7327f69e0fb56b7d23 (patch)
treedba6f74cca2f0eb5726d838795b08fe87c7276bd
parentd14222e7c152e36bf7d370c2623242a22fb9e821 (diff)
downloadu-boot-dfe08374943c0e898fcfaf7327f69e0fb56b7d23.tar.xz
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>
-rw-r--r--drivers/serial/Kconfig5
-rw-r--r--drivers/serial/serial_sbi.c20
2 files changed, 24 insertions, 1 deletions
diff --git a/drivers/serial/Kconfig b/drivers/serial/Kconfig
index a1e089962a..8c54bc9c47 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 b9f35ed36e..a51a96c1ef 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,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