2023-11-24 07:12:46

by Anup Patel

[permalink] [raw]
Subject: [PATCH v5 0/5] RISC-V SBI debug console extension support

The SBI v2.0 specification is now frozen. The SBI v2.0 specification defines
SBI debug console (DBCN) extension which replaces the legacy SBI v0.1
functions sbi_console_putchar() and sbi_console_getchar().
(Refer v2.0-rc5 at https://github.com/riscv-non-isa/riscv-sbi-doc/releases)

This series adds support for SBI debug console (DBCN) extension in
Linux RISC-V.

To try these patches with KVM RISC-V, use KVMTOOL from the
riscv_zbx_zicntr_smstateen_condops_v1 branch at:
https://github.com/avpatel/kvmtool.git

These patches can also be found in the riscv_sbi_dbcn_v5 branch at:
https://github.com/avpatel/linux.git

Changes since v4:
- Rebased on Linux-6.7-rc2
- Addressed Drew's comments in PATCH2
- Improved sbi_debug_console_write/read() to directly take virtual
address of data so that virtual address to physical address
conversion can be shared between tty/serial/earlycon-riscv-sbi.c
and tty/hvc/hvc_riscv_sbi.c
- Addressed Samuel's comments in PATCH3 and PATCH4

Changes since v3:
- Rebased on Linux-6.7-rc1
- Dropped PATCH1 to PATCH5 of v3 series since these were merged through
KVM RISC-V tree for Linux-6.7
- Used proper error code in PATCH1
- Added new PATCH2 which add common SBI debug console helper functions
- Updated PATCH3 and PATCH4 to use SBI debug console helper functions

Changes since v2:
- Rebased on Linux-6.6-rc5
- Handled page-crossing in PATCH7 of v2 series
- Addressed Drew's comment in PATCH3 of v2 series
- Added new PATCH5 to make get-reg-list test aware of SBI DBCN extension

Changes since v1:
- Remove use of #ifdef from PATCH4 and PATCH5 of the v1 series
- Improved commit description of PATCH3 in v1 series
- Introduced new PATCH3 in this series to allow some SBI extensions
(such as SBI DBCN) do to disabled by default so that older KVM user space
work fine and newer KVM user space have to explicitly opt-in for emulating
SBI DBCN.
- Introduced new PATCH5 in this series which adds inline version of
sbi_console_getchar() and sbi_console_putchar() for the case where
CONFIG_RISCV_SBI_V01 is disabled.

Anup Patel (4):
RISC-V: Add stubs for sbi_console_putchar/getchar()
RISC-V: Add SBI debug console helper routines
tty/serial: Add RISC-V SBI debug console based earlycon
RISC-V: Enable SBI based earlycon support

Atish Patra (1):
tty: Add SBI debug console support to HVC SBI driver

arch/riscv/configs/defconfig | 1 +
arch/riscv/include/asm/sbi.h | 10 ++++
arch/riscv/kernel/sbi.c | 66 +++++++++++++++++++++++++
drivers/tty/hvc/Kconfig | 2 +-
drivers/tty/hvc/hvc_riscv_sbi.c | 37 +++++++++++---
drivers/tty/serial/Kconfig | 2 +-
drivers/tty/serial/earlycon-riscv-sbi.c | 27 ++++++++--
7 files changed, 133 insertions(+), 12 deletions(-)

--
2.34.1


2023-11-24 07:13:08

by Anup Patel

[permalink] [raw]
Subject: [PATCH v5 5/5] RISC-V: Enable SBI based earlycon support

Let us enable SBI based earlycon support in defconfig for both RV32
and RV64 so that "earlycon=sbi" can be used again.

Signed-off-by: Anup Patel <[email protected]>
Reviewed-by: Andrew Jones <[email protected]>
---
arch/riscv/configs/defconfig | 1 +
1 file changed, 1 insertion(+)

diff --git a/arch/riscv/configs/defconfig b/arch/riscv/configs/defconfig
index 905881282a7c..eaf34e871e30 100644
--- a/arch/riscv/configs/defconfig
+++ b/arch/riscv/configs/defconfig
@@ -149,6 +149,7 @@ CONFIG_SERIAL_8250_CONSOLE=y
CONFIG_SERIAL_8250_DW=y
CONFIG_SERIAL_OF_PLATFORM=y
CONFIG_SERIAL_SH_SCI=y
+CONFIG_SERIAL_EARLYCON_RISCV_SBI=y
CONFIG_VIRTIO_CONSOLE=y
CONFIG_HW_RANDOM=y
CONFIG_HW_RANDOM_VIRTIO=y
--
2.34.1

2023-11-24 07:13:10

by Anup Patel

[permalink] [raw]
Subject: [PATCH v5 4/5] tty: Add SBI debug console support to HVC SBI driver

From: Atish Patra <[email protected]>

RISC-V SBI specification supports advanced debug console
support via SBI DBCN extension.

Extend the HVC SBI driver to support it.

Signed-off-by: Atish Patra <[email protected]>
Signed-off-by: Anup Patel <[email protected]>
---
drivers/tty/hvc/Kconfig | 2 +-
drivers/tty/hvc/hvc_riscv_sbi.c | 37 ++++++++++++++++++++++++++-------
2 files changed, 31 insertions(+), 8 deletions(-)

diff --git a/drivers/tty/hvc/Kconfig b/drivers/tty/hvc/Kconfig
index 4f9264d005c0..6e05c5c7bca1 100644
--- a/drivers/tty/hvc/Kconfig
+++ b/drivers/tty/hvc/Kconfig
@@ -108,7 +108,7 @@ config HVC_DCC_SERIALIZE_SMP

config HVC_RISCV_SBI
bool "RISC-V SBI console support"
- depends on RISCV_SBI_V01
+ depends on RISCV_SBI
select HVC_DRIVER
help
This enables support for console output via RISC-V SBI calls, which
diff --git a/drivers/tty/hvc/hvc_riscv_sbi.c b/drivers/tty/hvc/hvc_riscv_sbi.c
index 31f53fa77e4a..2f3571f17ecd 100644
--- a/drivers/tty/hvc/hvc_riscv_sbi.c
+++ b/drivers/tty/hvc/hvc_riscv_sbi.c
@@ -39,21 +39,44 @@ static int hvc_sbi_tty_get(uint32_t vtermno, char *buf, int count)
return i;
}

-static const struct hv_ops hvc_sbi_ops = {
+static const struct hv_ops hvc_sbi_v01_ops = {
.get_chars = hvc_sbi_tty_get,
.put_chars = hvc_sbi_tty_put,
};

-static int __init hvc_sbi_init(void)
+static int hvc_sbi_dbcn_tty_put(uint32_t vtermno, const char *buf, int count)
{
- return PTR_ERR_OR_ZERO(hvc_alloc(0, 0, &hvc_sbi_ops, 16));
+ return sbi_debug_console_write(buf, count);
}
-device_initcall(hvc_sbi_init);

-static int __init hvc_sbi_console_init(void)
+static int hvc_sbi_dbcn_tty_get(uint32_t vtermno, char *buf, int count)
{
- hvc_instantiate(0, 0, &hvc_sbi_ops);
+ return sbi_debug_console_read(buf, count);
+}
+
+static const struct hv_ops hvc_sbi_dbcn_ops = {
+ .put_chars = hvc_sbi_dbcn_tty_put,
+ .get_chars = hvc_sbi_dbcn_tty_get,
+};
+
+static int __init hvc_sbi_init(void)
+{
+ int err;
+
+ if (sbi_debug_console_available) {
+ err = PTR_ERR_OR_ZERO(hvc_alloc(0, 0, &hvc_sbi_dbcn_ops, 256));
+ if (err)
+ return err;
+ hvc_instantiate(0, 0, &hvc_sbi_dbcn_ops);
+ } else if (IS_ENABLED(CONFIG_RISCV_SBI_V01)) {
+ err = PTR_ERR_OR_ZERO(hvc_alloc(0, 0, &hvc_sbi_v01_ops, 256));
+ if (err)
+ return err;
+ hvc_instantiate(0, 0, &hvc_sbi_v01_ops);
+ } else {
+ return -ENODEV;
+ }

return 0;
}
-console_initcall(hvc_sbi_console_init);
+device_initcall(hvc_sbi_init);
--
2.34.1

2023-11-24 17:33:40

by Andrew Jones

[permalink] [raw]
Subject: Re: [PATCH v5 4/5] tty: Add SBI debug console support to HVC SBI driver

On Fri, Nov 24, 2023 at 12:39:04PM +0530, Anup Patel wrote:
> From: Atish Patra <[email protected]>
>
> RISC-V SBI specification supports advanced debug console
> support via SBI DBCN extension.
>
> Extend the HVC SBI driver to support it.
>
> Signed-off-by: Atish Patra <[email protected]>
> Signed-off-by: Anup Patel <[email protected]>
> ---
> drivers/tty/hvc/Kconfig | 2 +-
> drivers/tty/hvc/hvc_riscv_sbi.c | 37 ++++++++++++++++++++++++++-------
> 2 files changed, 31 insertions(+), 8 deletions(-)
>
> diff --git a/drivers/tty/hvc/Kconfig b/drivers/tty/hvc/Kconfig
> index 4f9264d005c0..6e05c5c7bca1 100644
> --- a/drivers/tty/hvc/Kconfig
> +++ b/drivers/tty/hvc/Kconfig
> @@ -108,7 +108,7 @@ config HVC_DCC_SERIALIZE_SMP
>
> config HVC_RISCV_SBI
> bool "RISC-V SBI console support"
> - depends on RISCV_SBI_V01
> + depends on RISCV_SBI
> select HVC_DRIVER
> help
> This enables support for console output via RISC-V SBI calls, which
> diff --git a/drivers/tty/hvc/hvc_riscv_sbi.c b/drivers/tty/hvc/hvc_riscv_sbi.c
> index 31f53fa77e4a..2f3571f17ecd 100644
> --- a/drivers/tty/hvc/hvc_riscv_sbi.c
> +++ b/drivers/tty/hvc/hvc_riscv_sbi.c
> @@ -39,21 +39,44 @@ static int hvc_sbi_tty_get(uint32_t vtermno, char *buf, int count)
> return i;
> }
>
> -static const struct hv_ops hvc_sbi_ops = {
> +static const struct hv_ops hvc_sbi_v01_ops = {
> .get_chars = hvc_sbi_tty_get,
> .put_chars = hvc_sbi_tty_put,
> };
>
> -static int __init hvc_sbi_init(void)
> +static int hvc_sbi_dbcn_tty_put(uint32_t vtermno, const char *buf, int count)
> {
> - return PTR_ERR_OR_ZERO(hvc_alloc(0, 0, &hvc_sbi_ops, 16));
> + return sbi_debug_console_write(buf, count);
> }
> -device_initcall(hvc_sbi_init);
>
> -static int __init hvc_sbi_console_init(void)
> +static int hvc_sbi_dbcn_tty_get(uint32_t vtermno, char *buf, int count)
> {
> - hvc_instantiate(0, 0, &hvc_sbi_ops);
> + return sbi_debug_console_read(buf, count);
> +}
> +
> +static const struct hv_ops hvc_sbi_dbcn_ops = {
> + .put_chars = hvc_sbi_dbcn_tty_put,
> + .get_chars = hvc_sbi_dbcn_tty_get,
> +};
> +
> +static int __init hvc_sbi_init(void)
> +{
> + int err;
> +
> + if (sbi_debug_console_available) {
> + err = PTR_ERR_OR_ZERO(hvc_alloc(0, 0, &hvc_sbi_dbcn_ops, 256));
> + if (err)
> + return err;
> + hvc_instantiate(0, 0, &hvc_sbi_dbcn_ops);
> + } else if (IS_ENABLED(CONFIG_RISCV_SBI_V01)) {
> + err = PTR_ERR_OR_ZERO(hvc_alloc(0, 0, &hvc_sbi_v01_ops, 256));
> + if (err)
> + return err;
> + hvc_instantiate(0, 0, &hvc_sbi_v01_ops);
> + } else {
> + return -ENODEV;
> + }
>
> return 0;
> }
> -console_initcall(hvc_sbi_console_init);
> +device_initcall(hvc_sbi_init);
> --
> 2.34.1
>

Reviewed-by: Andrew Jones <[email protected]>

2023-11-28 19:22:09

by Greg Kroah-Hartman

[permalink] [raw]
Subject: Re: [PATCH v5 4/5] tty: Add SBI debug console support to HVC SBI driver

On Fri, Nov 24, 2023 at 12:39:04PM +0530, Anup Patel wrote:
> From: Atish Patra <[email protected]>
>
> RISC-V SBI specification supports advanced debug console
> support via SBI DBCN extension.
>
> Extend the HVC SBI driver to support it.
>
> Signed-off-by: Atish Patra <[email protected]>
> Signed-off-by: Anup Patel <[email protected]>
> ---
> drivers/tty/hvc/Kconfig | 2 +-
> drivers/tty/hvc/hvc_riscv_sbi.c | 37 ++++++++++++++++++++++++++-------
> 2 files changed, 31 insertions(+), 8 deletions(-)

Acked-by: Greg Kroah-Hartman <[email protected]>

Subject: Re: [PATCH v5 0/5] RISC-V SBI debug console extension support

Hello:

This series was applied to riscv/linux.git (for-next)
by Palmer Dabbelt <[email protected]>:

On Fri, 24 Nov 2023 12:39:00 +0530 you wrote:
> The SBI v2.0 specification is now frozen. The SBI v2.0 specification defines
> SBI debug console (DBCN) extension which replaces the legacy SBI v0.1
> functions sbi_console_putchar() and sbi_console_getchar().
> (Refer v2.0-rc5 at https://github.com/riscv-non-isa/riscv-sbi-doc/releases)
>
> This series adds support for SBI debug console (DBCN) extension in
> Linux RISC-V.
>
> [...]

Here is the summary with links:
- [v5,1/5] RISC-V: Add stubs for sbi_console_putchar/getchar()
https://git.kernel.org/riscv/c/f503b167b660
- [v5,2/5] RISC-V: Add SBI debug console helper routines
https://git.kernel.org/riscv/c/f43fabf444ca
- [v5,3/5] tty/serial: Add RISC-V SBI debug console based earlycon
https://git.kernel.org/riscv/c/c77bf3607a0f
- [v5,4/5] tty: Add SBI debug console support to HVC SBI driver
https://git.kernel.org/riscv/c/88ead68e764c
- [v5,5/5] RISC-V: Enable SBI based earlycon support
https://git.kernel.org/riscv/c/50942ad6ddb5

You are awesome, thank you!
--
Deet-doot-dot, I am a bot.
https://korg.docs.kernel.org/patchwork/pwbot.html



2024-01-12 18:30:51

by Palmer Dabbelt

[permalink] [raw]
Subject: Re: [PATCH v5 0/5] RISC-V SBI debug console extension support

On Thu, 11 Jan 2024 06:50:37 PST (-0800), [email protected] wrote:
> Hello:
>
> This series was applied to riscv/linux.git (for-next)
> by Palmer Dabbelt <[email protected]>:
>
> On Fri, 24 Nov 2023 12:39:00 +0530 you wrote:
>> The SBI v2.0 specification is now frozen. The SBI v2.0 specification defines
>> SBI debug console (DBCN) extension which replaces the legacy SBI v0.1
>> functions sbi_console_putchar() and sbi_console_getchar().
>> (Refer v2.0-rc5 at https://github.com/riscv-non-isa/riscv-sbi-doc/releases)
>>
>> This series adds support for SBI debug console (DBCN) extension in
>> Linux RISC-V.
>>
>> [...]
>
> Here is the summary with links:
> - [v5,1/5] RISC-V: Add stubs for sbi_console_putchar/getchar()
> https://git.kernel.org/riscv/c/f503b167b660
> - [v5,2/5] RISC-V: Add SBI debug console helper routines
> https://git.kernel.org/riscv/c/f43fabf444ca
> - [v5,3/5] tty/serial: Add RISC-V SBI debug console based earlycon
> https://git.kernel.org/riscv/c/c77bf3607a0f
> - [v5,4/5] tty: Add SBI debug console support to HVC SBI driver
> https://git.kernel.org/riscv/c/88ead68e764c
> - [v5,5/5] RISC-V: Enable SBI based earlycon support
> https://git.kernel.org/riscv/c/50942ad6ddb5
>
> You are awesome, thank you!

Nathan points out that this has some semantic conflicts with a patch in
Greg's TTY tree: https://git.kernel.org/pub/scm/linux/kernel/git/gregkh/tty.git/commit/?id=f32fcbedbe9290565e4eac3fd7c4c451d5478787

So I think the best bet is to wait on Greg's patch to land in Linus'
tree, and then base a v6 of this patch set on that merged patch. I'm
going to drop this one from for-next.

2024-01-19 10:09:41

by Anup Patel

[permalink] [raw]
Subject: Re: [PATCH v5 0/5] RISC-V SBI debug console extension support

On Sat, Jan 13, 2024 at 12:00 AM Palmer Dabbelt <[email protected]> wrote:
>
> On Thu, 11 Jan 2024 06:50:37 PST (-0800), [email protected] wrote:
> > Hello:
> >
> > This series was applied to riscv/linux.git (for-next)
> > by Palmer Dabbelt <[email protected]>:
> >
> > On Fri, 24 Nov 2023 12:39:00 +0530 you wrote:
> >> The SBI v2.0 specification is now frozen. The SBI v2.0 specification defines
> >> SBI debug console (DBCN) extension which replaces the legacy SBI v0.1
> >> functions sbi_console_putchar() and sbi_console_getchar().
> >> (Refer v2.0-rc5 at https://github.com/riscv-non-isa/riscv-sbi-doc/releases)
> >>
> >> This series adds support for SBI debug console (DBCN) extension in
> >> Linux RISC-V.
> >>
> >> [...]
> >
> > Here is the summary with links:
> > - [v5,1/5] RISC-V: Add stubs for sbi_console_putchar/getchar()
> > https://git.kernel.org/riscv/c/f503b167b660
> > - [v5,2/5] RISC-V: Add SBI debug console helper routines
> > https://git.kernel.org/riscv/c/f43fabf444ca
> > - [v5,3/5] tty/serial: Add RISC-V SBI debug console based earlycon
> > https://git.kernel.org/riscv/c/c77bf3607a0f
> > - [v5,4/5] tty: Add SBI debug console support to HVC SBI driver
> > https://git.kernel.org/riscv/c/88ead68e764c
> > - [v5,5/5] RISC-V: Enable SBI based earlycon support
> > https://git.kernel.org/riscv/c/50942ad6ddb5
> >
> > You are awesome, thank you!
>
> Nathan points out that this has some semantic conflicts with a patch in
> Greg's TTY tree: https://git.kernel.org/pub/scm/linux/kernel/git/gregkh/tty.git/commit/?id=f32fcbedbe9290565e4eac3fd7c4c451d5478787
>
> So I think the best bet is to wait on Greg's patch to land in Linus'
> tree, and then base a v6 of this patch set on that merged patch. I'm
> going to drop this one from for-next.

Greg's patch is now available in upstream Linux so I will rebase and
send out v6.

Thanks,
Anup

2024-01-19 21:59:43

by Palmer Dabbelt

[permalink] [raw]
Subject: Re: [PATCH v5 0/5] RISC-V SBI debug console extension support

On Fri, 19 Jan 2024 02:09:18 PST (-0800), [email protected] wrote:
> On Sat, Jan 13, 2024 at 12:00 AM Palmer Dabbelt <[email protected]> wrote:
>>
>> On Thu, 11 Jan 2024 06:50:37 PST (-0800), [email protected] wrote:
>> > Hello:
>> >
>> > This series was applied to riscv/linux.git (for-next)
>> > by Palmer Dabbelt <[email protected]>:
>> >
>> > On Fri, 24 Nov 2023 12:39:00 +0530 you wrote:
>> >> The SBI v2.0 specification is now frozen. The SBI v2.0 specification defines
>> >> SBI debug console (DBCN) extension which replaces the legacy SBI v0.1
>> >> functions sbi_console_putchar() and sbi_console_getchar().
>> >> (Refer v2.0-rc5 at https://github.com/riscv-non-isa/riscv-sbi-doc/releases)
>> >>
>> >> This series adds support for SBI debug console (DBCN) extension in
>> >> Linux RISC-V.
>> >>
>> >> [...]
>> >
>> > Here is the summary with links:
>> > - [v5,1/5] RISC-V: Add stubs for sbi_console_putchar/getchar()
>> > https://git.kernel.org/riscv/c/f503b167b660
>> > - [v5,2/5] RISC-V: Add SBI debug console helper routines
>> > https://git.kernel.org/riscv/c/f43fabf444ca
>> > - [v5,3/5] tty/serial: Add RISC-V SBI debug console based earlycon
>> > https://git.kernel.org/riscv/c/c77bf3607a0f
>> > - [v5,4/5] tty: Add SBI debug console support to HVC SBI driver
>> > https://git.kernel.org/riscv/c/88ead68e764c
>> > - [v5,5/5] RISC-V: Enable SBI based earlycon support
>> > https://git.kernel.org/riscv/c/50942ad6ddb5
>> >
>> > You are awesome, thank you!
>>
>> Nathan points out that this has some semantic conflicts with a patch in
>> Greg's TTY tree: https://git.kernel.org/pub/scm/linux/kernel/git/gregkh/tty.git/commit/?id=f32fcbedbe9290565e4eac3fd7c4c451d5478787
>>
>> So I think the best bet is to wait on Greg's patch to land in Linus'
>> tree, and then base a v6 of this patch set on that merged patch. I'm
>> going to drop this one from for-next.
>
> Greg's patch is now available in upstream Linux so I will rebase and
> send out v6.

Sorry, I forgot about this one and merged it. I just sent up a fixup:
https://lore.kernel.org/all/[email protected]/
.

>
> Thanks,
> Anup

2024-01-20 04:00:33

by Anup Patel

[permalink] [raw]
Subject: Re: [PATCH v5 0/5] RISC-V SBI debug console extension support

On Sat, Jan 20, 2024 at 3:29 AM Palmer Dabbelt <[email protected]> wrote:
>
> On Fri, 19 Jan 2024 02:09:18 PST (-0800), [email protected] wrote:
> > On Sat, Jan 13, 2024 at 12:00 AM Palmer Dabbelt <palmer@dabbeltcom> wrote:
> >>
> >> On Thu, 11 Jan 2024 06:50:37 PST (-0800), [email protected] wrote:
> >> > Hello:
> >> >
> >> > This series was applied to riscv/linux.git (for-next)
> >> > by Palmer Dabbelt <[email protected]>:
> >> >
> >> > On Fri, 24 Nov 2023 12:39:00 +0530 you wrote:
> >> >> The SBI v2.0 specification is now frozen. The SBI v2.0 specification defines
> >> >> SBI debug console (DBCN) extension which replaces the legacy SBI v01
> >> >> functions sbi_console_putchar() and sbi_console_getchar().
> >> >> (Refer v2.0-rc5 at https://github.com/riscv-non-isa/riscv-sbi-doc/releases)
> >> >>
> >> >> This series adds support for SBI debug console (DBCN) extension in
> >> >> Linux RISC-V.
> >> >>
> >> >> [...]
> >> >
> >> > Here is the summary with links:
> >> > - [v5,1/5] RISC-V: Add stubs for sbi_console_putchar/getchar()
> >> > https://git.kernel.org/riscv/c/f503b167b660
> >> > - [v5,2/5] RISC-V: Add SBI debug console helper routines
> >> > https://git.kernel.org/riscv/c/f43fabf444ca
> >> > - [v5,3/5] tty/serial: Add RISC-V SBI debug console based earlycon
> >> > https://git.kernel.org/riscv/c/c77bf3607a0f
> >> > - [v5,4/5] tty: Add SBI debug console support to HVC SBI driver
> >> > https://git.kernel.org/riscv/c/88ead68e764c
> >> > - [v5,5/5] RISC-V: Enable SBI based earlycon support
> >> > https://git.kernel.org/riscv/c/50942ad6ddb5
> >> >
> >> > You are awesome, thank you!
> >>
> >> Nathan points out that this has some semantic conflicts with a patch in
> >> Greg's TTY tree: https://git.kernel.org/pub/scm/linux/kernel/git/gregkh/tty.git/commit/?id=f32fcbedbe9290565e4eac3fd7c4c451d5478787
> >>
> >> So I think the best bet is to wait on Greg's patch to land in Linus'
> >> tree, and then base a v6 of this patch set on that merged patch. I'm
> >> going to drop this one from for-next.
> >
> > Greg's patch is now available in upstream Linux so I will rebase and
> > send out v6.
>
> Sorry, I forgot about this one and merged it. I just sent up a fixup:
> https://lore.kernel.org/all/[email protected]/

No issues. Apart from a minor comment, your fixup looks good to me.

Thanks,
Anup

> .
>
> >
> > Thanks,
> > Anup
>