]> git.dujemihanovic.xyz Git - u-boot.git/commitdiff
serial: Add a debug console using the RISC-V SBI interface
authorSamuel Holland <samuel@sholland.org>
Sun, 12 Sep 2021 15:56:09 +0000 (10:56 -0500)
committerLeo Yu-Chi Liang <ycliang@andestech.com>
Thu, 7 Oct 2021 08:08:23 +0000 (16:08 +0800)
The RISC-V SBI interface v0.1 provides a function for printing a
character to the console. Even though SBI v0.1 functions are deprecated,
the SBI console is quite useful for early debugging, because it works
without any dcache, memory, or MMIO access in S mode.

Signed-off-by: Samuel Holland <samuel@sholland.org>
Reviewed-by: Sean Anderson <seanga2@gmail.com>
Reviewed-by: Bin Meng <bmeng.cn@gmail.com>
drivers/serial/Kconfig
drivers/serial/Makefile
drivers/serial/serial_sbi.c [new file with mode: 0644]

index 3bb5b02eabb3e6d637303c87d0eb374f504f36fc..122a39789cb1f2eb67fce85bf0244816a795da1d 100644 (file)
@@ -280,6 +280,14 @@ config DEBUG_EFI_CONSOLE
          U-Boot when running on top of EFI (Extensive Firmware Interface).
          This is a type of BIOS used by PCs.
 
+config DEBUG_SBI_CONSOLE
+       bool "SBI"
+       depends on SBI_V01
+       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).
+
 config DEBUG_UART_S5P
        bool "Samsung S5P"
        depends on ARCH_EXYNOS || ARCH_S5PC1XX
@@ -442,6 +450,7 @@ endchoice
 config DEBUG_UART_BASE
        hex "Base address of UART"
        depends on DEBUG_UART
+       default 0 if DEBUG_SBI_CONSOLE
        default 0 if DEBUG_UART_SANDBOX
        help
          This is the base address of your UART for memory-mapped UARTs.
@@ -452,6 +461,7 @@ config DEBUG_UART_BASE
 config DEBUG_UART_CLOCK
        int "UART input clock"
        depends on DEBUG_UART
+       default 0 if DEBUG_SBI_CONSOLE
        default 0 if DEBUG_UART_SANDBOX
        default 0 if DEBUG_MVEBU_A3700_UART
        help
index 3cbea8156f884ac1415f56baf19fee5479c3a483..4edd2aa9458b5001cc38ffc408dec73c2609aae9 100644 (file)
@@ -36,6 +36,7 @@ obj-$(CONFIG_ATMEL_USART) += atmel_usart.o
 obj-$(CONFIG_BCM6345_SERIAL) += serial_bcm6345.o
 obj-$(CONFIG_COREBOOT_SERIAL) += serial_coreboot.o
 obj-$(CONFIG_CORTINA_UART) += serial_cortina.o
+obj-$(CONFIG_DEBUG_SBI_CONSOLE) += serial_sbi.o
 obj-$(CONFIG_EFI_APP) += serial_efi.o
 obj-$(CONFIG_LPC32XX_HSUART) += lpc32xx_hsuart.o
 obj-$(CONFIG_MCFUART) += serial_mcf.o
diff --git a/drivers/serial/serial_sbi.c b/drivers/serial/serial_sbi.c
new file mode 100644 (file)
index 0000000..b9f35ed
--- /dev/null
@@ -0,0 +1,16 @@
+// SPDX-License-Identifier: GPL-2.0+
+
+#include <debug_uart.h>
+#include <asm/sbi.h>
+
+static inline void _debug_uart_init(void)
+{
+}
+
+static inline void _debug_uart_putc(int c)
+{
+       if (CONFIG_IS_ENABLED(RISCV_SMODE))
+               sbi_console_putchar(c);
+}
+
+DEBUG_UART_FUNCS