[PATCH] serial: Add a debug console using the RISC-V SBI interface
Sean Anderson
seanga2 at gmail.com
Sun Sep 12 18:22:17 CEST 2021
On 9/12/21 11:56 AM, Samuel Holland wrote:
> 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 at sholland.org>
> ---
>
> drivers/serial/Kconfig | 10 ++++++++++
> drivers/serial/Makefile | 1 +
> drivers/serial/serial_sbi.c | 16 ++++++++++++++++
> 3 files changed, 27 insertions(+)
> create mode 100644 drivers/serial/serial_sbi.c
>
> diff --git a/drivers/serial/Kconfig b/drivers/serial/Kconfig
> index 36ee43210a9..e5f086271ef 100644
> --- a/drivers/serial/Kconfig
> +++ b/drivers/serial/Kconfig
> @@ -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
> diff --git a/drivers/serial/Makefile b/drivers/serial/Makefile
> index 3cbea8156f8..4edd2aa9458 100644
> --- a/drivers/serial/Makefile
> +++ b/drivers/serial/Makefile
> @@ -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
> index 00000000000..b9f35ed36e6
> --- /dev/null
> +++ b/drivers/serial/serial_sbi.c
> @@ -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
>
Reviewed-by: Sean Anderson <seanga2 at gmail.com>
More information about the U-Boot
mailing list