[PATCH 2/2] risc-v: implement DBCN based debug console

Heinrich Schuchardt heinrich.schuchardt at canonical.com
Mon Sep 4 12:22:55 CEST 2023


On 9/4/23 11:30, Chanho Park wrote:
> Hi,
> 
>> -----Original Message-----
>> From: U-Boot <u-boot-bounces at lists.denx.de> On Behalf Of Heinrich
>> Schuchardt
>> Sent: Saturday, August 19, 2023 10:13 PM
>> To: Rick Chen <rick at andestech.com>; Leo <ycliang at andestech.com>
>> Cc: Bin Meng <bmeng.cn at gmail.com>; Anup Patel <apatel at ventanamicro.com>;
>> u-boot at lists.denx.de; Heinrich Schuchardt
>> <heinrich.schuchardt at canonical.com>
>> Subject: [PATCH 2/2] 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 at 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
>> --
>> 2.40.1
> 
> I've got below error when I tried to build it with VisionFive2 board
> configuration(starfive_visionfive2_defconfig).
> To test this patch, I enabled CONFIG_DEBUG_SBI_CONSOLE. Seems like spl also
> includes the driver when DEBUG_SBI_CONSOLE is enabled.
> Do I need to do any more configurations to test this?
> 
> LD      spl/u-boot-spl
> riscv64-unknown-linux-gnu-ld.bfd: drivers/serial/serial_sbi.o: in function
> `_debug_uart_putc':
> /data/risc-v/vf2/mainline/u-boot/drivers/serial/serial_sbi.c:30: undefined
> reference to `sbi_dbcn_write_byte'
> riscv64-unknown-linux-gnu-ld.bfd:
> /data/risc-v/vf2/mainline/u-boot/drivers/serial/serial_sbi.c:30: undefined
> reference to `sbi_dbcn_write_byte'
> riscv64-unknown-linux-gnu-ld.bfd: drivers/serial/serial_sbi.o: in function
> `_debug_uart_init':
> /data/risc-v/vf2/mainline/u-boot/drivers/serial/serial_sbi.c:24: undefined
> reference to `sbi_probe_extension'
> make[2]: *** [/data/risc-v/vf2/mainline/u-boot/scripts/Makefile.spl:527:
> spl/u-boot-spl] Error 1
> 
> Best Regards,
> Chanho Park
> 

Hello Chanho,

thanks for reporting the issue. SBI is not available in M-mode. We need 
a check in the driver like

     if (!CONFIG_IS_ENABLED(RISCV_MMODE))

I will send a new version of the series.

Best regards

Heinrich


More information about the U-Boot mailing list