All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH 0/2] risc-v: implement DBCN based debug console
@ 2023-08-19 13:12 Heinrich Schuchardt
  2023-08-19 13:12 ` [PATCH 1/2] risc-v: implement DBCN write byte Heinrich Schuchardt
  2023-08-19 13:12 ` [PATCH 2/2] risc-v: implement DBCN based debug console Heinrich Schuchardt
  0 siblings, 2 replies; 7+ messages in thread
From: Heinrich Schuchardt @ 2023-08-19 13:12 UTC (permalink / raw)
  To: Rick Chen, Leo; +Cc: Bin Meng, Anup Patel, u-boot, Heinrich Schuchardt

Currently we only offer an SBI based debug UART for SBI v0.1.
With OpenSBI 1.3 the Debug Console Extension (DBCN) has become available.
This allows us to implement a debug UART in a device independent manor.

Heinrich Schuchardt (2):
  risc-v: implement DBCN write byte
  risc-v: implement DBCN based debug console

 arch/riscv/include/asm/sbi.h |  1 +
 arch/riscv/lib/sbi.c         | 16 ++++++++++++++++
 drivers/serial/Kconfig       |  3 ++-
 drivers/serial/serial_sbi.c  | 19 +++++++++++++++++++
 4 files changed, 38 insertions(+), 1 deletion(-)

-- 
2.40.1


^ permalink raw reply	[flat|nested] 7+ messages in thread

* [PATCH 1/2] risc-v: implement DBCN write byte
  2023-08-19 13:12 [PATCH 0/2] risc-v: implement DBCN based debug console Heinrich Schuchardt
@ 2023-08-19 13:12 ` Heinrich Schuchardt
  2023-09-04  3:47   ` Leo Liang
  2023-08-19 13:12 ` [PATCH 2/2] risc-v: implement DBCN based debug console Heinrich Schuchardt
  1 sibling, 1 reply; 7+ messages in thread
From: Heinrich Schuchardt @ 2023-08-19 13:12 UTC (permalink / raw)
  To: Rick Chen, Leo; +Cc: Bin Meng, Anup Patel, u-boot, Heinrich Schuchardt

The DBCN extension provides a Console Write Byte call.
Implement function sbi_dbcn_write_byte to invoke it.

Signed-off-by: Heinrich Schuchardt <heinrich.schuchardt@canonical.com>
---
 arch/riscv/include/asm/sbi.h |  1 +
 arch/riscv/lib/sbi.c         | 16 ++++++++++++++++
 2 files changed, 17 insertions(+)

diff --git a/arch/riscv/include/asm/sbi.h b/arch/riscv/include/asm/sbi.h
index 009a26885c..bf4c9af622 100644
--- a/arch/riscv/include/asm/sbi.h
+++ b/arch/riscv/include/asm/sbi.h
@@ -170,5 +170,6 @@ int sbi_get_mvendorid(long *mvendorid);
 int sbi_get_marchid(long *marchid);
 int sbi_get_mimpid(long *mimpid);
 void sbi_srst_reset(unsigned long type, unsigned long reason);
+int sbi_dbcn_write_byte(unsigned char ch);
 
 #endif
diff --git a/arch/riscv/lib/sbi.c b/arch/riscv/lib/sbi.c
index 8724e3a460..55a3bc3b5c 100644
--- a/arch/riscv/lib/sbi.c
+++ b/arch/riscv/lib/sbi.c
@@ -204,6 +204,22 @@ void sbi_srst_reset(unsigned long type, unsigned long reason)
 		  0, 0, 0, 0);
 }
 
+/**
+ * sbi_dbcn_write_byte() - write byte to debug console
+ *
+ * @ch:		byte to be written
+ * Return:	SBI error code (SBI_SUCCESS = 0 on success)
+ */
+int sbi_dbcn_write_byte(unsigned char ch)
+{
+	struct sbiret ret;
+
+	ret = sbi_ecall(SBI_EXT_DBCN,
+			SBI_EXT_DBCN_CONSOLE_WRITE_BYTE,
+			ch, 0, 0, 0, 0, 0);
+	return ret.error;
+}
+
 #ifdef CONFIG_SBI_V01
 
 /**
-- 
2.40.1


^ permalink raw reply related	[flat|nested] 7+ messages in thread

* [PATCH 2/2] risc-v: implement DBCN based debug console
  2023-08-19 13:12 [PATCH 0/2] risc-v: implement DBCN based debug console Heinrich Schuchardt
  2023-08-19 13:12 ` [PATCH 1/2] risc-v: implement DBCN write byte Heinrich Schuchardt
@ 2023-08-19 13:12 ` Heinrich Schuchardt
  2023-09-04  3:49   ` Leo Liang
  2023-09-04  9:30   ` Chanho Park
  1 sibling, 2 replies; 7+ messages in thread
From: Heinrich Schuchardt @ 2023-08-19 13:12 UTC (permalink / raw)
  To: Rick Chen, Leo; +Cc: Bin Meng, Anup Patel, u-boot, Heinrich Schuchardt

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
-- 
2.40.1


^ permalink raw reply related	[flat|nested] 7+ messages in thread

* Re: [PATCH 1/2] risc-v: implement DBCN write byte
  2023-08-19 13:12 ` [PATCH 1/2] risc-v: implement DBCN write byte Heinrich Schuchardt
@ 2023-09-04  3:47   ` Leo Liang
  0 siblings, 0 replies; 7+ messages in thread
From: Leo Liang @ 2023-09-04  3:47 UTC (permalink / raw)
  To: Heinrich Schuchardt; +Cc: Rick Chen, Bin Meng, Anup Patel, u-boot

On Sat, Aug 19, 2023 at 03:12:49PM +0200, Heinrich Schuchardt wrote:
> The DBCN extension provides a Console Write Byte call.
> Implement function sbi_dbcn_write_byte to invoke it.
> 
> Signed-off-by: Heinrich Schuchardt <heinrich.schuchardt@canonical.com>
> ---
>  arch/riscv/include/asm/sbi.h |  1 +
>  arch/riscv/lib/sbi.c         | 16 ++++++++++++++++
>  2 files changed, 17 insertions(+)

Reviewed-by: Leo Yu-Chi Liang <ycliang@andestech.com>

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [PATCH 2/2] risc-v: implement DBCN based debug console
  2023-08-19 13:12 ` [PATCH 2/2] risc-v: implement DBCN based debug console Heinrich Schuchardt
@ 2023-09-04  3:49   ` Leo Liang
  2023-09-04  9:30   ` Chanho Park
  1 sibling, 0 replies; 7+ messages in thread
From: Leo Liang @ 2023-09-04  3:49 UTC (permalink / raw)
  To: Heinrich Schuchardt; +Cc: Rick Chen, Bin Meng, Anup Patel, u-boot

On Sat, Aug 19, 2023 at 03:12:50PM +0200, Heinrich Schuchardt wrote:
> 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(-)

Reviewed-by: Leo Yu-Chi Liang <ycliang@andestech.com>

^ permalink raw reply	[flat|nested] 7+ messages in thread

* RE: [PATCH 2/2] risc-v: implement DBCN based debug console
  2023-08-19 13:12 ` [PATCH 2/2] risc-v: implement DBCN based debug console Heinrich Schuchardt
  2023-09-04  3:49   ` Leo Liang
@ 2023-09-04  9:30   ` Chanho Park
  2023-09-04 10:22     ` Heinrich Schuchardt
  1 sibling, 1 reply; 7+ messages in thread
From: Chanho Park @ 2023-09-04  9:30 UTC (permalink / raw)
  To: 'Heinrich Schuchardt', 'Rick Chen', 'Leo'
  Cc: 'Bin Meng', 'Anup Patel', u-boot

Hi,

> -----Original Message-----
> From: U-Boot <u-boot-bounces@lists.denx.de> On Behalf Of Heinrich
> Schuchardt
> Sent: Saturday, August 19, 2023 10:13 PM
> To: Rick Chen <rick@andestech.com>; Leo <ycliang@andestech.com>
> Cc: Bin Meng <bmeng.cn@gmail.com>; Anup Patel <apatel@ventanamicro.com>;
> u-boot@lists.denx.de; Heinrich Schuchardt
> <heinrich.schuchardt@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@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


^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [PATCH 2/2] risc-v: implement DBCN based debug console
  2023-09-04  9:30   ` Chanho Park
@ 2023-09-04 10:22     ` Heinrich Schuchardt
  0 siblings, 0 replies; 7+ messages in thread
From: Heinrich Schuchardt @ 2023-09-04 10:22 UTC (permalink / raw)
  To: Chanho Park
  Cc: 'Bin Meng', 'Anup Patel', u-boot, 'Leo',
	'Rick Chen'

On 9/4/23 11:30, Chanho Park wrote:
> Hi,
> 
>> -----Original Message-----
>> From: U-Boot <u-boot-bounces@lists.denx.de> On Behalf Of Heinrich
>> Schuchardt
>> Sent: Saturday, August 19, 2023 10:13 PM
>> To: Rick Chen <rick@andestech.com>; Leo <ycliang@andestech.com>
>> Cc: Bin Meng <bmeng.cn@gmail.com>; Anup Patel <apatel@ventanamicro.com>;
>> u-boot@lists.denx.de; Heinrich Schuchardt
>> <heinrich.schuchardt@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@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

^ permalink raw reply	[flat|nested] 7+ messages in thread

end of thread, other threads:[~2023-09-04 10:22 UTC | newest]

Thread overview: 7+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2023-08-19 13:12 [PATCH 0/2] risc-v: implement DBCN based debug console Heinrich Schuchardt
2023-08-19 13:12 ` [PATCH 1/2] risc-v: implement DBCN write byte Heinrich Schuchardt
2023-09-04  3:47   ` Leo Liang
2023-08-19 13:12 ` [PATCH 2/2] risc-v: implement DBCN based debug console Heinrich Schuchardt
2023-09-04  3:49   ` Leo Liang
2023-09-04  9:30   ` Chanho Park
2023-09-04 10:22     ` Heinrich Schuchardt

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.