* [PATCH v3 0/9] RISC-V SBI debug console extension support @ 2023-10-20 7:21 ` Anup Patel 0 siblings, 0 replies; 96+ messages in thread From: Anup Patel @ 2023-10-20 7:21 UTC (permalink / raw) To: kvm-riscv 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 KVM RISC-V and Linux RISC-V. To try these patches with KVM RISC-V, use KVMTOOL from riscv_sbi_dbcn_v1 branch at: https://github.com/avpatel/kvmtool.git These patches can also be found in the riscv_sbi_dbcn_v3 branch at: https://github.com/avpatel/linux.git 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 (8): RISC-V: Add defines for SBI debug console extension RISC-V: KVM: Change the SBI specification version to v2.0 RISC-V: KVM: Allow some SBI extensions to be disabled by default RISC-V: KVM: Forward SBI DBCN extension to user-space KVM: riscv: selftests: Add SBI DBCN extension to get-reg-list test RISC-V: Add stubs for sbi_console_putchar/getchar() 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/configs/rv32_defconfig | 1 + arch/riscv/include/asm/kvm_vcpu_sbi.h | 7 +- arch/riscv/include/asm/sbi.h | 12 +++ arch/riscv/include/uapi/asm/kvm.h | 1 + arch/riscv/kvm/vcpu.c | 6 ++ arch/riscv/kvm/vcpu_sbi.c | 61 +++++++------- arch/riscv/kvm/vcpu_sbi_replace.c | 32 ++++++++ drivers/tty/hvc/Kconfig | 2 +- drivers/tty/hvc/hvc_riscv_sbi.c | 82 +++++++++++++++++-- drivers/tty/serial/Kconfig | 2 +- drivers/tty/serial/earlycon-riscv-sbi.c | 32 +++++++- .../selftests/kvm/riscv/get-reg-list.c | 2 + 13 files changed, 198 insertions(+), 43 deletions(-) -- 2.34.1 ^ permalink raw reply [flat|nested] 96+ messages in thread
* [PATCH v3 0/9] RISC-V SBI debug console extension support @ 2023-10-20 7:21 ` Anup Patel 0 siblings, 0 replies; 96+ messages in thread From: Anup Patel @ 2023-10-20 7:21 UTC (permalink / raw) To: Paolo Bonzini, Atish Patra, Palmer Dabbelt, Paul Walmsley, Greg Kroah-Hartman, Jiri Slaby Cc: Anup Patel, linux-serial, kvm, linux-kernel, Conor Dooley, kvm-riscv, linux-riscv, linuxppc-dev, Andrew Jones 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 KVM RISC-V and Linux RISC-V. To try these patches with KVM RISC-V, use KVMTOOL from riscv_sbi_dbcn_v1 branch at: https://github.com/avpatel/kvmtool.git These patches can also be found in the riscv_sbi_dbcn_v3 branch at: https://github.com/avpatel/linux.git 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 (8): RISC-V: Add defines for SBI debug console extension RISC-V: KVM: Change the SBI specification version to v2.0 RISC-V: KVM: Allow some SBI extensions to be disabled by default RISC-V: KVM: Forward SBI DBCN extension to user-space KVM: riscv: selftests: Add SBI DBCN extension to get-reg-list test RISC-V: Add stubs for sbi_console_putchar/getchar() 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/configs/rv32_defconfig | 1 + arch/riscv/include/asm/kvm_vcpu_sbi.h | 7 +- arch/riscv/include/asm/sbi.h | 12 +++ arch/riscv/include/uapi/asm/kvm.h | 1 + arch/riscv/kvm/vcpu.c | 6 ++ arch/riscv/kvm/vcpu_sbi.c | 61 +++++++------- arch/riscv/kvm/vcpu_sbi_replace.c | 32 ++++++++ drivers/tty/hvc/Kconfig | 2 +- drivers/tty/hvc/hvc_riscv_sbi.c | 82 +++++++++++++++++-- drivers/tty/serial/Kconfig | 2 +- drivers/tty/serial/earlycon-riscv-sbi.c | 32 +++++++- .../selftests/kvm/riscv/get-reg-list.c | 2 + 13 files changed, 198 insertions(+), 43 deletions(-) -- 2.34.1 ^ permalink raw reply [flat|nested] 96+ messages in thread
* [PATCH v3 0/9] RISC-V SBI debug console extension support @ 2023-10-20 7:21 ` Anup Patel 0 siblings, 0 replies; 96+ messages in thread From: Anup Patel @ 2023-10-20 7:21 UTC (permalink / raw) To: Paolo Bonzini, Atish Patra, Palmer Dabbelt, Paul Walmsley, Greg Kroah-Hartman, Jiri Slaby Cc: Conor Dooley, Andrew Jones, kvm, kvm-riscv, linux-riscv, linux-serial, linuxppc-dev, linux-kernel, Anup Patel 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 KVM RISC-V and Linux RISC-V. To try these patches with KVM RISC-V, use KVMTOOL from riscv_sbi_dbcn_v1 branch at: https://github.com/avpatel/kvmtool.git These patches can also be found in the riscv_sbi_dbcn_v3 branch at: https://github.com/avpatel/linux.git 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 (8): RISC-V: Add defines for SBI debug console extension RISC-V: KVM: Change the SBI specification version to v2.0 RISC-V: KVM: Allow some SBI extensions to be disabled by default RISC-V: KVM: Forward SBI DBCN extension to user-space KVM: riscv: selftests: Add SBI DBCN extension to get-reg-list test RISC-V: Add stubs for sbi_console_putchar/getchar() 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/configs/rv32_defconfig | 1 + arch/riscv/include/asm/kvm_vcpu_sbi.h | 7 +- arch/riscv/include/asm/sbi.h | 12 +++ arch/riscv/include/uapi/asm/kvm.h | 1 + arch/riscv/kvm/vcpu.c | 6 ++ arch/riscv/kvm/vcpu_sbi.c | 61 +++++++------- arch/riscv/kvm/vcpu_sbi_replace.c | 32 ++++++++ drivers/tty/hvc/Kconfig | 2 +- drivers/tty/hvc/hvc_riscv_sbi.c | 82 +++++++++++++++++-- drivers/tty/serial/Kconfig | 2 +- drivers/tty/serial/earlycon-riscv-sbi.c | 32 +++++++- .../selftests/kvm/riscv/get-reg-list.c | 2 + 13 files changed, 198 insertions(+), 43 deletions(-) -- 2.34.1 ^ permalink raw reply [flat|nested] 96+ messages in thread
* [PATCH v3 0/9] RISC-V SBI debug console extension support @ 2023-10-20 7:21 ` Anup Patel 0 siblings, 0 replies; 96+ messages in thread From: Anup Patel @ 2023-10-20 7:21 UTC (permalink / raw) To: Paolo Bonzini, Atish Patra, Palmer Dabbelt, Paul Walmsley, Greg Kroah-Hartman, Jiri Slaby Cc: Conor Dooley, Andrew Jones, kvm, kvm-riscv, linux-riscv, linux-serial, linuxppc-dev, linux-kernel, Anup Patel 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 KVM RISC-V and Linux RISC-V. To try these patches with KVM RISC-V, use KVMTOOL from riscv_sbi_dbcn_v1 branch at: https://github.com/avpatel/kvmtool.git These patches can also be found in the riscv_sbi_dbcn_v3 branch at: https://github.com/avpatel/linux.git 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 (8): RISC-V: Add defines for SBI debug console extension RISC-V: KVM: Change the SBI specification version to v2.0 RISC-V: KVM: Allow some SBI extensions to be disabled by default RISC-V: KVM: Forward SBI DBCN extension to user-space KVM: riscv: selftests: Add SBI DBCN extension to get-reg-list test RISC-V: Add stubs for sbi_console_putchar/getchar() 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/configs/rv32_defconfig | 1 + arch/riscv/include/asm/kvm_vcpu_sbi.h | 7 +- arch/riscv/include/asm/sbi.h | 12 +++ arch/riscv/include/uapi/asm/kvm.h | 1 + arch/riscv/kvm/vcpu.c | 6 ++ arch/riscv/kvm/vcpu_sbi.c | 61 +++++++------- arch/riscv/kvm/vcpu_sbi_replace.c | 32 ++++++++ drivers/tty/hvc/Kconfig | 2 +- drivers/tty/hvc/hvc_riscv_sbi.c | 82 +++++++++++++++++-- drivers/tty/serial/Kconfig | 2 +- drivers/tty/serial/earlycon-riscv-sbi.c | 32 +++++++- .../selftests/kvm/riscv/get-reg-list.c | 2 + 13 files changed, 198 insertions(+), 43 deletions(-) -- 2.34.1 _______________________________________________ linux-riscv mailing list linux-riscv@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-riscv ^ permalink raw reply [flat|nested] 96+ messages in thread
* [PATCH v3 1/9] RISC-V: Add defines for SBI debug console extension 2023-10-20 7:21 ` Anup Patel (?) (?) @ 2023-10-20 7:21 ` Anup Patel -1 siblings, 0 replies; 96+ messages in thread From: Anup Patel @ 2023-10-20 7:21 UTC (permalink / raw) To: kvm-riscv We add SBI debug console extension related defines/enum to the asm/sbi.h header. Signed-off-by: Anup Patel <apatel@ventanamicro.com> Reviewed-by: Andrew Jones <ajones@ventanamicro.com> --- arch/riscv/include/asm/sbi.h | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/arch/riscv/include/asm/sbi.h b/arch/riscv/include/asm/sbi.h index 5b4a1bf5f439..12dfda6bb924 100644 --- a/arch/riscv/include/asm/sbi.h +++ b/arch/riscv/include/asm/sbi.h @@ -30,6 +30,7 @@ enum sbi_ext_id { SBI_EXT_HSM = 0x48534D, SBI_EXT_SRST = 0x53525354, SBI_EXT_PMU = 0x504D55, + SBI_EXT_DBCN = 0x4442434E, /* Experimentals extensions must lie within this range */ SBI_EXT_EXPERIMENTAL_START = 0x08000000, @@ -236,6 +237,12 @@ enum sbi_pmu_ctr_type { /* Flags defined for counter stop function */ #define SBI_PMU_STOP_FLAG_RESET (1 << 0) +enum sbi_ext_dbcn_fid { + SBI_EXT_DBCN_CONSOLE_WRITE = 0, + SBI_EXT_DBCN_CONSOLE_READ = 1, + SBI_EXT_DBCN_CONSOLE_WRITE_BYTE = 2, +}; + #define SBI_SPEC_VERSION_DEFAULT 0x1 #define SBI_SPEC_VERSION_MAJOR_SHIFT 24 #define SBI_SPEC_VERSION_MAJOR_MASK 0x7f -- 2.34.1 ^ permalink raw reply related [flat|nested] 96+ messages in thread
* [PATCH v3 1/9] RISC-V: Add defines for SBI debug console extension @ 2023-10-20 7:21 ` Anup Patel 0 siblings, 0 replies; 96+ messages in thread From: Anup Patel @ 2023-10-20 7:21 UTC (permalink / raw) To: Paolo Bonzini, Atish Patra, Palmer Dabbelt, Paul Walmsley, Greg Kroah-Hartman, Jiri Slaby Cc: Anup Patel, linux-serial, kvm, linux-kernel, Conor Dooley, kvm-riscv, linux-riscv, linuxppc-dev, Andrew Jones We add SBI debug console extension related defines/enum to the asm/sbi.h header. Signed-off-by: Anup Patel <apatel@ventanamicro.com> Reviewed-by: Andrew Jones <ajones@ventanamicro.com> --- arch/riscv/include/asm/sbi.h | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/arch/riscv/include/asm/sbi.h b/arch/riscv/include/asm/sbi.h index 5b4a1bf5f439..12dfda6bb924 100644 --- a/arch/riscv/include/asm/sbi.h +++ b/arch/riscv/include/asm/sbi.h @@ -30,6 +30,7 @@ enum sbi_ext_id { SBI_EXT_HSM = 0x48534D, SBI_EXT_SRST = 0x53525354, SBI_EXT_PMU = 0x504D55, + SBI_EXT_DBCN = 0x4442434E, /* Experimentals extensions must lie within this range */ SBI_EXT_EXPERIMENTAL_START = 0x08000000, @@ -236,6 +237,12 @@ enum sbi_pmu_ctr_type { /* Flags defined for counter stop function */ #define SBI_PMU_STOP_FLAG_RESET (1 << 0) +enum sbi_ext_dbcn_fid { + SBI_EXT_DBCN_CONSOLE_WRITE = 0, + SBI_EXT_DBCN_CONSOLE_READ = 1, + SBI_EXT_DBCN_CONSOLE_WRITE_BYTE = 2, +}; + #define SBI_SPEC_VERSION_DEFAULT 0x1 #define SBI_SPEC_VERSION_MAJOR_SHIFT 24 #define SBI_SPEC_VERSION_MAJOR_MASK 0x7f -- 2.34.1 ^ permalink raw reply related [flat|nested] 96+ messages in thread
* [PATCH v3 1/9] RISC-V: Add defines for SBI debug console extension @ 2023-10-20 7:21 ` Anup Patel 0 siblings, 0 replies; 96+ messages in thread From: Anup Patel @ 2023-10-20 7:21 UTC (permalink / raw) To: Paolo Bonzini, Atish Patra, Palmer Dabbelt, Paul Walmsley, Greg Kroah-Hartman, Jiri Slaby Cc: Conor Dooley, Andrew Jones, kvm, kvm-riscv, linux-riscv, linux-serial, linuxppc-dev, linux-kernel, Anup Patel We add SBI debug console extension related defines/enum to the asm/sbi.h header. Signed-off-by: Anup Patel <apatel@ventanamicro.com> Reviewed-by: Andrew Jones <ajones@ventanamicro.com> --- arch/riscv/include/asm/sbi.h | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/arch/riscv/include/asm/sbi.h b/arch/riscv/include/asm/sbi.h index 5b4a1bf5f439..12dfda6bb924 100644 --- a/arch/riscv/include/asm/sbi.h +++ b/arch/riscv/include/asm/sbi.h @@ -30,6 +30,7 @@ enum sbi_ext_id { SBI_EXT_HSM = 0x48534D, SBI_EXT_SRST = 0x53525354, SBI_EXT_PMU = 0x504D55, + SBI_EXT_DBCN = 0x4442434E, /* Experimentals extensions must lie within this range */ SBI_EXT_EXPERIMENTAL_START = 0x08000000, @@ -236,6 +237,12 @@ enum sbi_pmu_ctr_type { /* Flags defined for counter stop function */ #define SBI_PMU_STOP_FLAG_RESET (1 << 0) +enum sbi_ext_dbcn_fid { + SBI_EXT_DBCN_CONSOLE_WRITE = 0, + SBI_EXT_DBCN_CONSOLE_READ = 1, + SBI_EXT_DBCN_CONSOLE_WRITE_BYTE = 2, +}; + #define SBI_SPEC_VERSION_DEFAULT 0x1 #define SBI_SPEC_VERSION_MAJOR_SHIFT 24 #define SBI_SPEC_VERSION_MAJOR_MASK 0x7f -- 2.34.1 ^ permalink raw reply related [flat|nested] 96+ messages in thread
* [PATCH v3 1/9] RISC-V: Add defines for SBI debug console extension @ 2023-10-20 7:21 ` Anup Patel 0 siblings, 0 replies; 96+ messages in thread From: Anup Patel @ 2023-10-20 7:21 UTC (permalink / raw) To: Paolo Bonzini, Atish Patra, Palmer Dabbelt, Paul Walmsley, Greg Kroah-Hartman, Jiri Slaby Cc: Conor Dooley, Andrew Jones, kvm, kvm-riscv, linux-riscv, linux-serial, linuxppc-dev, linux-kernel, Anup Patel We add SBI debug console extension related defines/enum to the asm/sbi.h header. Signed-off-by: Anup Patel <apatel@ventanamicro.com> Reviewed-by: Andrew Jones <ajones@ventanamicro.com> --- arch/riscv/include/asm/sbi.h | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/arch/riscv/include/asm/sbi.h b/arch/riscv/include/asm/sbi.h index 5b4a1bf5f439..12dfda6bb924 100644 --- a/arch/riscv/include/asm/sbi.h +++ b/arch/riscv/include/asm/sbi.h @@ -30,6 +30,7 @@ enum sbi_ext_id { SBI_EXT_HSM = 0x48534D, SBI_EXT_SRST = 0x53525354, SBI_EXT_PMU = 0x504D55, + SBI_EXT_DBCN = 0x4442434E, /* Experimentals extensions must lie within this range */ SBI_EXT_EXPERIMENTAL_START = 0x08000000, @@ -236,6 +237,12 @@ enum sbi_pmu_ctr_type { /* Flags defined for counter stop function */ #define SBI_PMU_STOP_FLAG_RESET (1 << 0) +enum sbi_ext_dbcn_fid { + SBI_EXT_DBCN_CONSOLE_WRITE = 0, + SBI_EXT_DBCN_CONSOLE_READ = 1, + SBI_EXT_DBCN_CONSOLE_WRITE_BYTE = 2, +}; + #define SBI_SPEC_VERSION_DEFAULT 0x1 #define SBI_SPEC_VERSION_MAJOR_SHIFT 24 #define SBI_SPEC_VERSION_MAJOR_MASK 0x7f -- 2.34.1 _______________________________________________ linux-riscv mailing list linux-riscv@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-riscv ^ permalink raw reply related [flat|nested] 96+ messages in thread
* [PATCH v3 2/9] RISC-V: KVM: Change the SBI specification version to v2.0 2023-10-20 7:21 ` Anup Patel (?) (?) @ 2023-10-20 7:21 ` Anup Patel -1 siblings, 0 replies; 96+ messages in thread From: Anup Patel @ 2023-10-20 7:21 UTC (permalink / raw) To: kvm-riscv We will be implementing SBI DBCN extension for KVM RISC-V so let us change the KVM RISC-V SBI specification version to v2.0. Signed-off-by: Anup Patel <apatel@ventanamicro.com> Reviewed-by: Andrew Jones <ajones@ventanamicro.com> --- arch/riscv/include/asm/kvm_vcpu_sbi.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/arch/riscv/include/asm/kvm_vcpu_sbi.h b/arch/riscv/include/asm/kvm_vcpu_sbi.h index cdcf0ff07be7..8d6d4dce8a5e 100644 --- a/arch/riscv/include/asm/kvm_vcpu_sbi.h +++ b/arch/riscv/include/asm/kvm_vcpu_sbi.h @@ -11,7 +11,7 @@ #define KVM_SBI_IMPID 3 -#define KVM_SBI_VERSION_MAJOR 1 +#define KVM_SBI_VERSION_MAJOR 2 #define KVM_SBI_VERSION_MINOR 0 enum kvm_riscv_sbi_ext_status { -- 2.34.1 ^ permalink raw reply related [flat|nested] 96+ messages in thread
* [PATCH v3 2/9] RISC-V: KVM: Change the SBI specification version to v2.0 @ 2023-10-20 7:21 ` Anup Patel 0 siblings, 0 replies; 96+ messages in thread From: Anup Patel @ 2023-10-20 7:21 UTC (permalink / raw) To: Paolo Bonzini, Atish Patra, Palmer Dabbelt, Paul Walmsley, Greg Kroah-Hartman, Jiri Slaby Cc: Anup Patel, linux-serial, kvm, linux-kernel, Conor Dooley, kvm-riscv, linux-riscv, linuxppc-dev, Andrew Jones We will be implementing SBI DBCN extension for KVM RISC-V so let us change the KVM RISC-V SBI specification version to v2.0. Signed-off-by: Anup Patel <apatel@ventanamicro.com> Reviewed-by: Andrew Jones <ajones@ventanamicro.com> --- arch/riscv/include/asm/kvm_vcpu_sbi.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/arch/riscv/include/asm/kvm_vcpu_sbi.h b/arch/riscv/include/asm/kvm_vcpu_sbi.h index cdcf0ff07be7..8d6d4dce8a5e 100644 --- a/arch/riscv/include/asm/kvm_vcpu_sbi.h +++ b/arch/riscv/include/asm/kvm_vcpu_sbi.h @@ -11,7 +11,7 @@ #define KVM_SBI_IMPID 3 -#define KVM_SBI_VERSION_MAJOR 1 +#define KVM_SBI_VERSION_MAJOR 2 #define KVM_SBI_VERSION_MINOR 0 enum kvm_riscv_sbi_ext_status { -- 2.34.1 ^ permalink raw reply related [flat|nested] 96+ messages in thread
* [PATCH v3 2/9] RISC-V: KVM: Change the SBI specification version to v2.0 @ 2023-10-20 7:21 ` Anup Patel 0 siblings, 0 replies; 96+ messages in thread From: Anup Patel @ 2023-10-20 7:21 UTC (permalink / raw) To: Paolo Bonzini, Atish Patra, Palmer Dabbelt, Paul Walmsley, Greg Kroah-Hartman, Jiri Slaby Cc: Conor Dooley, Andrew Jones, kvm, kvm-riscv, linux-riscv, linux-serial, linuxppc-dev, linux-kernel, Anup Patel We will be implementing SBI DBCN extension for KVM RISC-V so let us change the KVM RISC-V SBI specification version to v2.0. Signed-off-by: Anup Patel <apatel@ventanamicro.com> Reviewed-by: Andrew Jones <ajones@ventanamicro.com> --- arch/riscv/include/asm/kvm_vcpu_sbi.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/arch/riscv/include/asm/kvm_vcpu_sbi.h b/arch/riscv/include/asm/kvm_vcpu_sbi.h index cdcf0ff07be7..8d6d4dce8a5e 100644 --- a/arch/riscv/include/asm/kvm_vcpu_sbi.h +++ b/arch/riscv/include/asm/kvm_vcpu_sbi.h @@ -11,7 +11,7 @@ #define KVM_SBI_IMPID 3 -#define KVM_SBI_VERSION_MAJOR 1 +#define KVM_SBI_VERSION_MAJOR 2 #define KVM_SBI_VERSION_MINOR 0 enum kvm_riscv_sbi_ext_status { -- 2.34.1 ^ permalink raw reply related [flat|nested] 96+ messages in thread
* [PATCH v3 2/9] RISC-V: KVM: Change the SBI specification version to v2.0 @ 2023-10-20 7:21 ` Anup Patel 0 siblings, 0 replies; 96+ messages in thread From: Anup Patel @ 2023-10-20 7:21 UTC (permalink / raw) To: Paolo Bonzini, Atish Patra, Palmer Dabbelt, Paul Walmsley, Greg Kroah-Hartman, Jiri Slaby Cc: Conor Dooley, Andrew Jones, kvm, kvm-riscv, linux-riscv, linux-serial, linuxppc-dev, linux-kernel, Anup Patel We will be implementing SBI DBCN extension for KVM RISC-V so let us change the KVM RISC-V SBI specification version to v2.0. Signed-off-by: Anup Patel <apatel@ventanamicro.com> Reviewed-by: Andrew Jones <ajones@ventanamicro.com> --- arch/riscv/include/asm/kvm_vcpu_sbi.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/arch/riscv/include/asm/kvm_vcpu_sbi.h b/arch/riscv/include/asm/kvm_vcpu_sbi.h index cdcf0ff07be7..8d6d4dce8a5e 100644 --- a/arch/riscv/include/asm/kvm_vcpu_sbi.h +++ b/arch/riscv/include/asm/kvm_vcpu_sbi.h @@ -11,7 +11,7 @@ #define KVM_SBI_IMPID 3 -#define KVM_SBI_VERSION_MAJOR 1 +#define KVM_SBI_VERSION_MAJOR 2 #define KVM_SBI_VERSION_MINOR 0 enum kvm_riscv_sbi_ext_status { -- 2.34.1 _______________________________________________ linux-riscv mailing list linux-riscv@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-riscv ^ permalink raw reply related [flat|nested] 96+ messages in thread
* [PATCH v3 3/9] RISC-V: KVM: Allow some SBI extensions to be disabled by default 2023-10-20 7:21 ` Anup Patel (?) (?) @ 2023-10-20 7:21 ` Anup Patel -1 siblings, 0 replies; 96+ messages in thread From: Anup Patel @ 2023-10-20 7:21 UTC (permalink / raw) To: kvm-riscv Currently, all SBI extensions are enabled by default which is problematic for SBI extensions (such as DBCN) which are forwarded to the KVM user-space because we might have an older KVM user-space which is not aware/ready to handle newer SBI extensions. Ideally, the SBI extensions forwarded to the KVM user-space must be disabled by default. To address above, we allow certain SBI extensions to be disabled by default so that KVM user-space must explicitly enable such SBI extensions to receive forwarded calls from Guest VCPU. Signed-off-by: Anup Patel <apatel@ventanamicro.com> --- arch/riscv/include/asm/kvm_vcpu_sbi.h | 4 ++ arch/riscv/kvm/vcpu.c | 6 +++ arch/riscv/kvm/vcpu_sbi.c | 57 +++++++++++++-------------- 3 files changed, 38 insertions(+), 29 deletions(-) diff --git a/arch/riscv/include/asm/kvm_vcpu_sbi.h b/arch/riscv/include/asm/kvm_vcpu_sbi.h index 8d6d4dce8a5e..c02bda5559d7 100644 --- a/arch/riscv/include/asm/kvm_vcpu_sbi.h +++ b/arch/riscv/include/asm/kvm_vcpu_sbi.h @@ -35,6 +35,9 @@ struct kvm_vcpu_sbi_return { struct kvm_vcpu_sbi_extension { unsigned long extid_start; unsigned long extid_end; + + bool default_unavail; + /** * SBI extension handler. It can be defined for a given extension or group of * extension. But it should always return linux error codes rather than SBI @@ -59,6 +62,7 @@ int kvm_riscv_vcpu_get_reg_sbi_ext(struct kvm_vcpu *vcpu, const struct kvm_vcpu_sbi_extension *kvm_vcpu_sbi_find_ext( struct kvm_vcpu *vcpu, unsigned long extid); int kvm_riscv_vcpu_sbi_ecall(struct kvm_vcpu *vcpu, struct kvm_run *run); +void kvm_riscv_vcpu_sbi_init(struct kvm_vcpu *vcpu); #ifdef CONFIG_RISCV_SBI_V01 extern const struct kvm_vcpu_sbi_extension vcpu_sbi_ext_v01; diff --git a/arch/riscv/kvm/vcpu.c b/arch/riscv/kvm/vcpu.c index c061a1c5fe98..e087c809073c 100644 --- a/arch/riscv/kvm/vcpu.c +++ b/arch/riscv/kvm/vcpu.c @@ -141,6 +141,12 @@ int kvm_arch_vcpu_create(struct kvm_vcpu *vcpu) if (rc) return rc; + /* + * Setup SBI extensions + * NOTE: This must be the last thing to be initialized. + */ + kvm_riscv_vcpu_sbi_init(vcpu); + /* Reset VCPU */ kvm_riscv_reset_vcpu(vcpu); diff --git a/arch/riscv/kvm/vcpu_sbi.c b/arch/riscv/kvm/vcpu_sbi.c index 9cd97091c723..bda8b0b33343 100644 --- a/arch/riscv/kvm/vcpu_sbi.c +++ b/arch/riscv/kvm/vcpu_sbi.c @@ -155,14 +155,8 @@ static int riscv_vcpu_set_sbi_ext_single(struct kvm_vcpu *vcpu, if (!sext) return -ENOENT; - /* - * We can't set the extension status to available here, since it may - * have a probe() function which needs to confirm availability first, - * but it may be too early to call that here. We can set the status to - * unavailable, though. - */ - if (!reg_val) - scontext->ext_status[sext->ext_idx] = + scontext->ext_status[sext->ext_idx] = (reg_val) ? + KVM_RISCV_SBI_EXT_AVAILABLE : KVM_RISCV_SBI_EXT_UNAVAILABLE; return 0; @@ -188,16 +182,8 @@ static int riscv_vcpu_get_sbi_ext_single(struct kvm_vcpu *vcpu, if (!sext) return -ENOENT; - /* - * If the extension status is still uninitialized, then we should probe - * to determine if it's available, but it may be too early to do that - * here. The best we can do is report that the extension has not been - * disabled, i.e. we return 1 when the extension is available and also - * when it only may be available. - */ - *reg_val = scontext->ext_status[sext->ext_idx] != - KVM_RISCV_SBI_EXT_UNAVAILABLE; - + *reg_val = scontext->ext_status[sext->ext_idx] == + KVM_RISCV_SBI_EXT_AVAILABLE; return 0; } @@ -337,18 +323,8 @@ const struct kvm_vcpu_sbi_extension *kvm_vcpu_sbi_find_ext( scontext->ext_status[entry->ext_idx] == KVM_RISCV_SBI_EXT_AVAILABLE) return ext; - if (scontext->ext_status[entry->ext_idx] == - KVM_RISCV_SBI_EXT_UNAVAILABLE) - return NULL; - if (ext->probe && !ext->probe(vcpu)) { - scontext->ext_status[entry->ext_idx] = - KVM_RISCV_SBI_EXT_UNAVAILABLE; - return NULL; - } - scontext->ext_status[entry->ext_idx] = - KVM_RISCV_SBI_EXT_AVAILABLE; - return ext; + return NULL; } } @@ -419,3 +395,26 @@ int kvm_riscv_vcpu_sbi_ecall(struct kvm_vcpu *vcpu, struct kvm_run *run) return ret; } + +void kvm_riscv_vcpu_sbi_init(struct kvm_vcpu *vcpu) +{ + struct kvm_vcpu_sbi_context *scontext = &vcpu->arch.sbi_context; + const struct kvm_riscv_sbi_extension_entry *entry; + const struct kvm_vcpu_sbi_extension *ext; + int i; + + for (i = 0; i < ARRAY_SIZE(sbi_ext); i++) { + entry = &sbi_ext[i]; + ext = entry->ext_ptr; + + if (ext->probe && !ext->probe(vcpu)) { + scontext->ext_status[entry->ext_idx] = + KVM_RISCV_SBI_EXT_UNAVAILABLE; + continue; + } + + scontext->ext_status[entry->ext_idx] = ext->default_unavail ? + KVM_RISCV_SBI_EXT_UNAVAILABLE : + KVM_RISCV_SBI_EXT_AVAILABLE; + } +} -- 2.34.1 ^ permalink raw reply related [flat|nested] 96+ messages in thread
* [PATCH v3 3/9] RISC-V: KVM: Allow some SBI extensions to be disabled by default @ 2023-10-20 7:21 ` Anup Patel 0 siblings, 0 replies; 96+ messages in thread From: Anup Patel @ 2023-10-20 7:21 UTC (permalink / raw) To: Paolo Bonzini, Atish Patra, Palmer Dabbelt, Paul Walmsley, Greg Kroah-Hartman, Jiri Slaby Cc: Anup Patel, linux-serial, kvm, linux-kernel, Conor Dooley, kvm-riscv, linux-riscv, linuxppc-dev, Andrew Jones Currently, all SBI extensions are enabled by default which is problematic for SBI extensions (such as DBCN) which are forwarded to the KVM user-space because we might have an older KVM user-space which is not aware/ready to handle newer SBI extensions. Ideally, the SBI extensions forwarded to the KVM user-space must be disabled by default. To address above, we allow certain SBI extensions to be disabled by default so that KVM user-space must explicitly enable such SBI extensions to receive forwarded calls from Guest VCPU. Signed-off-by: Anup Patel <apatel@ventanamicro.com> --- arch/riscv/include/asm/kvm_vcpu_sbi.h | 4 ++ arch/riscv/kvm/vcpu.c | 6 +++ arch/riscv/kvm/vcpu_sbi.c | 57 +++++++++++++-------------- 3 files changed, 38 insertions(+), 29 deletions(-) diff --git a/arch/riscv/include/asm/kvm_vcpu_sbi.h b/arch/riscv/include/asm/kvm_vcpu_sbi.h index 8d6d4dce8a5e..c02bda5559d7 100644 --- a/arch/riscv/include/asm/kvm_vcpu_sbi.h +++ b/arch/riscv/include/asm/kvm_vcpu_sbi.h @@ -35,6 +35,9 @@ struct kvm_vcpu_sbi_return { struct kvm_vcpu_sbi_extension { unsigned long extid_start; unsigned long extid_end; + + bool default_unavail; + /** * SBI extension handler. It can be defined for a given extension or group of * extension. But it should always return linux error codes rather than SBI @@ -59,6 +62,7 @@ int kvm_riscv_vcpu_get_reg_sbi_ext(struct kvm_vcpu *vcpu, const struct kvm_vcpu_sbi_extension *kvm_vcpu_sbi_find_ext( struct kvm_vcpu *vcpu, unsigned long extid); int kvm_riscv_vcpu_sbi_ecall(struct kvm_vcpu *vcpu, struct kvm_run *run); +void kvm_riscv_vcpu_sbi_init(struct kvm_vcpu *vcpu); #ifdef CONFIG_RISCV_SBI_V01 extern const struct kvm_vcpu_sbi_extension vcpu_sbi_ext_v01; diff --git a/arch/riscv/kvm/vcpu.c b/arch/riscv/kvm/vcpu.c index c061a1c5fe98..e087c809073c 100644 --- a/arch/riscv/kvm/vcpu.c +++ b/arch/riscv/kvm/vcpu.c @@ -141,6 +141,12 @@ int kvm_arch_vcpu_create(struct kvm_vcpu *vcpu) if (rc) return rc; + /* + * Setup SBI extensions + * NOTE: This must be the last thing to be initialized. + */ + kvm_riscv_vcpu_sbi_init(vcpu); + /* Reset VCPU */ kvm_riscv_reset_vcpu(vcpu); diff --git a/arch/riscv/kvm/vcpu_sbi.c b/arch/riscv/kvm/vcpu_sbi.c index 9cd97091c723..bda8b0b33343 100644 --- a/arch/riscv/kvm/vcpu_sbi.c +++ b/arch/riscv/kvm/vcpu_sbi.c @@ -155,14 +155,8 @@ static int riscv_vcpu_set_sbi_ext_single(struct kvm_vcpu *vcpu, if (!sext) return -ENOENT; - /* - * We can't set the extension status to available here, since it may - * have a probe() function which needs to confirm availability first, - * but it may be too early to call that here. We can set the status to - * unavailable, though. - */ - if (!reg_val) - scontext->ext_status[sext->ext_idx] = + scontext->ext_status[sext->ext_idx] = (reg_val) ? + KVM_RISCV_SBI_EXT_AVAILABLE : KVM_RISCV_SBI_EXT_UNAVAILABLE; return 0; @@ -188,16 +182,8 @@ static int riscv_vcpu_get_sbi_ext_single(struct kvm_vcpu *vcpu, if (!sext) return -ENOENT; - /* - * If the extension status is still uninitialized, then we should probe - * to determine if it's available, but it may be too early to do that - * here. The best we can do is report that the extension has not been - * disabled, i.e. we return 1 when the extension is available and also - * when it only may be available. - */ - *reg_val = scontext->ext_status[sext->ext_idx] != - KVM_RISCV_SBI_EXT_UNAVAILABLE; - + *reg_val = scontext->ext_status[sext->ext_idx] == + KVM_RISCV_SBI_EXT_AVAILABLE; return 0; } @@ -337,18 +323,8 @@ const struct kvm_vcpu_sbi_extension *kvm_vcpu_sbi_find_ext( scontext->ext_status[entry->ext_idx] == KVM_RISCV_SBI_EXT_AVAILABLE) return ext; - if (scontext->ext_status[entry->ext_idx] == - KVM_RISCV_SBI_EXT_UNAVAILABLE) - return NULL; - if (ext->probe && !ext->probe(vcpu)) { - scontext->ext_status[entry->ext_idx] = - KVM_RISCV_SBI_EXT_UNAVAILABLE; - return NULL; - } - scontext->ext_status[entry->ext_idx] = - KVM_RISCV_SBI_EXT_AVAILABLE; - return ext; + return NULL; } } @@ -419,3 +395,26 @@ int kvm_riscv_vcpu_sbi_ecall(struct kvm_vcpu *vcpu, struct kvm_run *run) return ret; } + +void kvm_riscv_vcpu_sbi_init(struct kvm_vcpu *vcpu) +{ + struct kvm_vcpu_sbi_context *scontext = &vcpu->arch.sbi_context; + const struct kvm_riscv_sbi_extension_entry *entry; + const struct kvm_vcpu_sbi_extension *ext; + int i; + + for (i = 0; i < ARRAY_SIZE(sbi_ext); i++) { + entry = &sbi_ext[i]; + ext = entry->ext_ptr; + + if (ext->probe && !ext->probe(vcpu)) { + scontext->ext_status[entry->ext_idx] = + KVM_RISCV_SBI_EXT_UNAVAILABLE; + continue; + } + + scontext->ext_status[entry->ext_idx] = ext->default_unavail ? + KVM_RISCV_SBI_EXT_UNAVAILABLE : + KVM_RISCV_SBI_EXT_AVAILABLE; + } +} -- 2.34.1 ^ permalink raw reply related [flat|nested] 96+ messages in thread
* [PATCH v3 3/9] RISC-V: KVM: Allow some SBI extensions to be disabled by default @ 2023-10-20 7:21 ` Anup Patel 0 siblings, 0 replies; 96+ messages in thread From: Anup Patel @ 2023-10-20 7:21 UTC (permalink / raw) To: Paolo Bonzini, Atish Patra, Palmer Dabbelt, Paul Walmsley, Greg Kroah-Hartman, Jiri Slaby Cc: Conor Dooley, Andrew Jones, kvm, kvm-riscv, linux-riscv, linux-serial, linuxppc-dev, linux-kernel, Anup Patel Currently, all SBI extensions are enabled by default which is problematic for SBI extensions (such as DBCN) which are forwarded to the KVM user-space because we might have an older KVM user-space which is not aware/ready to handle newer SBI extensions. Ideally, the SBI extensions forwarded to the KVM user-space must be disabled by default. To address above, we allow certain SBI extensions to be disabled by default so that KVM user-space must explicitly enable such SBI extensions to receive forwarded calls from Guest VCPU. Signed-off-by: Anup Patel <apatel@ventanamicro.com> --- arch/riscv/include/asm/kvm_vcpu_sbi.h | 4 ++ arch/riscv/kvm/vcpu.c | 6 +++ arch/riscv/kvm/vcpu_sbi.c | 57 +++++++++++++-------------- 3 files changed, 38 insertions(+), 29 deletions(-) diff --git a/arch/riscv/include/asm/kvm_vcpu_sbi.h b/arch/riscv/include/asm/kvm_vcpu_sbi.h index 8d6d4dce8a5e..c02bda5559d7 100644 --- a/arch/riscv/include/asm/kvm_vcpu_sbi.h +++ b/arch/riscv/include/asm/kvm_vcpu_sbi.h @@ -35,6 +35,9 @@ struct kvm_vcpu_sbi_return { struct kvm_vcpu_sbi_extension { unsigned long extid_start; unsigned long extid_end; + + bool default_unavail; + /** * SBI extension handler. It can be defined for a given extension or group of * extension. But it should always return linux error codes rather than SBI @@ -59,6 +62,7 @@ int kvm_riscv_vcpu_get_reg_sbi_ext(struct kvm_vcpu *vcpu, const struct kvm_vcpu_sbi_extension *kvm_vcpu_sbi_find_ext( struct kvm_vcpu *vcpu, unsigned long extid); int kvm_riscv_vcpu_sbi_ecall(struct kvm_vcpu *vcpu, struct kvm_run *run); +void kvm_riscv_vcpu_sbi_init(struct kvm_vcpu *vcpu); #ifdef CONFIG_RISCV_SBI_V01 extern const struct kvm_vcpu_sbi_extension vcpu_sbi_ext_v01; diff --git a/arch/riscv/kvm/vcpu.c b/arch/riscv/kvm/vcpu.c index c061a1c5fe98..e087c809073c 100644 --- a/arch/riscv/kvm/vcpu.c +++ b/arch/riscv/kvm/vcpu.c @@ -141,6 +141,12 @@ int kvm_arch_vcpu_create(struct kvm_vcpu *vcpu) if (rc) return rc; + /* + * Setup SBI extensions + * NOTE: This must be the last thing to be initialized. + */ + kvm_riscv_vcpu_sbi_init(vcpu); + /* Reset VCPU */ kvm_riscv_reset_vcpu(vcpu); diff --git a/arch/riscv/kvm/vcpu_sbi.c b/arch/riscv/kvm/vcpu_sbi.c index 9cd97091c723..bda8b0b33343 100644 --- a/arch/riscv/kvm/vcpu_sbi.c +++ b/arch/riscv/kvm/vcpu_sbi.c @@ -155,14 +155,8 @@ static int riscv_vcpu_set_sbi_ext_single(struct kvm_vcpu *vcpu, if (!sext) return -ENOENT; - /* - * We can't set the extension status to available here, since it may - * have a probe() function which needs to confirm availability first, - * but it may be too early to call that here. We can set the status to - * unavailable, though. - */ - if (!reg_val) - scontext->ext_status[sext->ext_idx] = + scontext->ext_status[sext->ext_idx] = (reg_val) ? + KVM_RISCV_SBI_EXT_AVAILABLE : KVM_RISCV_SBI_EXT_UNAVAILABLE; return 0; @@ -188,16 +182,8 @@ static int riscv_vcpu_get_sbi_ext_single(struct kvm_vcpu *vcpu, if (!sext) return -ENOENT; - /* - * If the extension status is still uninitialized, then we should probe - * to determine if it's available, but it may be too early to do that - * here. The best we can do is report that the extension has not been - * disabled, i.e. we return 1 when the extension is available and also - * when it only may be available. - */ - *reg_val = scontext->ext_status[sext->ext_idx] != - KVM_RISCV_SBI_EXT_UNAVAILABLE; - + *reg_val = scontext->ext_status[sext->ext_idx] == + KVM_RISCV_SBI_EXT_AVAILABLE; return 0; } @@ -337,18 +323,8 @@ const struct kvm_vcpu_sbi_extension *kvm_vcpu_sbi_find_ext( scontext->ext_status[entry->ext_idx] == KVM_RISCV_SBI_EXT_AVAILABLE) return ext; - if (scontext->ext_status[entry->ext_idx] == - KVM_RISCV_SBI_EXT_UNAVAILABLE) - return NULL; - if (ext->probe && !ext->probe(vcpu)) { - scontext->ext_status[entry->ext_idx] = - KVM_RISCV_SBI_EXT_UNAVAILABLE; - return NULL; - } - scontext->ext_status[entry->ext_idx] = - KVM_RISCV_SBI_EXT_AVAILABLE; - return ext; + return NULL; } } @@ -419,3 +395,26 @@ int kvm_riscv_vcpu_sbi_ecall(struct kvm_vcpu *vcpu, struct kvm_run *run) return ret; } + +void kvm_riscv_vcpu_sbi_init(struct kvm_vcpu *vcpu) +{ + struct kvm_vcpu_sbi_context *scontext = &vcpu->arch.sbi_context; + const struct kvm_riscv_sbi_extension_entry *entry; + const struct kvm_vcpu_sbi_extension *ext; + int i; + + for (i = 0; i < ARRAY_SIZE(sbi_ext); i++) { + entry = &sbi_ext[i]; + ext = entry->ext_ptr; + + if (ext->probe && !ext->probe(vcpu)) { + scontext->ext_status[entry->ext_idx] = + KVM_RISCV_SBI_EXT_UNAVAILABLE; + continue; + } + + scontext->ext_status[entry->ext_idx] = ext->default_unavail ? + KVM_RISCV_SBI_EXT_UNAVAILABLE : + KVM_RISCV_SBI_EXT_AVAILABLE; + } +} -- 2.34.1 ^ permalink raw reply related [flat|nested] 96+ messages in thread
* [PATCH v3 3/9] RISC-V: KVM: Allow some SBI extensions to be disabled by default @ 2023-10-20 7:21 ` Anup Patel 0 siblings, 0 replies; 96+ messages in thread From: Anup Patel @ 2023-10-20 7:21 UTC (permalink / raw) To: Paolo Bonzini, Atish Patra, Palmer Dabbelt, Paul Walmsley, Greg Kroah-Hartman, Jiri Slaby Cc: Conor Dooley, Andrew Jones, kvm, kvm-riscv, linux-riscv, linux-serial, linuxppc-dev, linux-kernel, Anup Patel Currently, all SBI extensions are enabled by default which is problematic for SBI extensions (such as DBCN) which are forwarded to the KVM user-space because we might have an older KVM user-space which is not aware/ready to handle newer SBI extensions. Ideally, the SBI extensions forwarded to the KVM user-space must be disabled by default. To address above, we allow certain SBI extensions to be disabled by default so that KVM user-space must explicitly enable such SBI extensions to receive forwarded calls from Guest VCPU. Signed-off-by: Anup Patel <apatel@ventanamicro.com> --- arch/riscv/include/asm/kvm_vcpu_sbi.h | 4 ++ arch/riscv/kvm/vcpu.c | 6 +++ arch/riscv/kvm/vcpu_sbi.c | 57 +++++++++++++-------------- 3 files changed, 38 insertions(+), 29 deletions(-) diff --git a/arch/riscv/include/asm/kvm_vcpu_sbi.h b/arch/riscv/include/asm/kvm_vcpu_sbi.h index 8d6d4dce8a5e..c02bda5559d7 100644 --- a/arch/riscv/include/asm/kvm_vcpu_sbi.h +++ b/arch/riscv/include/asm/kvm_vcpu_sbi.h @@ -35,6 +35,9 @@ struct kvm_vcpu_sbi_return { struct kvm_vcpu_sbi_extension { unsigned long extid_start; unsigned long extid_end; + + bool default_unavail; + /** * SBI extension handler. It can be defined for a given extension or group of * extension. But it should always return linux error codes rather than SBI @@ -59,6 +62,7 @@ int kvm_riscv_vcpu_get_reg_sbi_ext(struct kvm_vcpu *vcpu, const struct kvm_vcpu_sbi_extension *kvm_vcpu_sbi_find_ext( struct kvm_vcpu *vcpu, unsigned long extid); int kvm_riscv_vcpu_sbi_ecall(struct kvm_vcpu *vcpu, struct kvm_run *run); +void kvm_riscv_vcpu_sbi_init(struct kvm_vcpu *vcpu); #ifdef CONFIG_RISCV_SBI_V01 extern const struct kvm_vcpu_sbi_extension vcpu_sbi_ext_v01; diff --git a/arch/riscv/kvm/vcpu.c b/arch/riscv/kvm/vcpu.c index c061a1c5fe98..e087c809073c 100644 --- a/arch/riscv/kvm/vcpu.c +++ b/arch/riscv/kvm/vcpu.c @@ -141,6 +141,12 @@ int kvm_arch_vcpu_create(struct kvm_vcpu *vcpu) if (rc) return rc; + /* + * Setup SBI extensions + * NOTE: This must be the last thing to be initialized. + */ + kvm_riscv_vcpu_sbi_init(vcpu); + /* Reset VCPU */ kvm_riscv_reset_vcpu(vcpu); diff --git a/arch/riscv/kvm/vcpu_sbi.c b/arch/riscv/kvm/vcpu_sbi.c index 9cd97091c723..bda8b0b33343 100644 --- a/arch/riscv/kvm/vcpu_sbi.c +++ b/arch/riscv/kvm/vcpu_sbi.c @@ -155,14 +155,8 @@ static int riscv_vcpu_set_sbi_ext_single(struct kvm_vcpu *vcpu, if (!sext) return -ENOENT; - /* - * We can't set the extension status to available here, since it may - * have a probe() function which needs to confirm availability first, - * but it may be too early to call that here. We can set the status to - * unavailable, though. - */ - if (!reg_val) - scontext->ext_status[sext->ext_idx] = + scontext->ext_status[sext->ext_idx] = (reg_val) ? + KVM_RISCV_SBI_EXT_AVAILABLE : KVM_RISCV_SBI_EXT_UNAVAILABLE; return 0; @@ -188,16 +182,8 @@ static int riscv_vcpu_get_sbi_ext_single(struct kvm_vcpu *vcpu, if (!sext) return -ENOENT; - /* - * If the extension status is still uninitialized, then we should probe - * to determine if it's available, but it may be too early to do that - * here. The best we can do is report that the extension has not been - * disabled, i.e. we return 1 when the extension is available and also - * when it only may be available. - */ - *reg_val = scontext->ext_status[sext->ext_idx] != - KVM_RISCV_SBI_EXT_UNAVAILABLE; - + *reg_val = scontext->ext_status[sext->ext_idx] == + KVM_RISCV_SBI_EXT_AVAILABLE; return 0; } @@ -337,18 +323,8 @@ const struct kvm_vcpu_sbi_extension *kvm_vcpu_sbi_find_ext( scontext->ext_status[entry->ext_idx] == KVM_RISCV_SBI_EXT_AVAILABLE) return ext; - if (scontext->ext_status[entry->ext_idx] == - KVM_RISCV_SBI_EXT_UNAVAILABLE) - return NULL; - if (ext->probe && !ext->probe(vcpu)) { - scontext->ext_status[entry->ext_idx] = - KVM_RISCV_SBI_EXT_UNAVAILABLE; - return NULL; - } - scontext->ext_status[entry->ext_idx] = - KVM_RISCV_SBI_EXT_AVAILABLE; - return ext; + return NULL; } } @@ -419,3 +395,26 @@ int kvm_riscv_vcpu_sbi_ecall(struct kvm_vcpu *vcpu, struct kvm_run *run) return ret; } + +void kvm_riscv_vcpu_sbi_init(struct kvm_vcpu *vcpu) +{ + struct kvm_vcpu_sbi_context *scontext = &vcpu->arch.sbi_context; + const struct kvm_riscv_sbi_extension_entry *entry; + const struct kvm_vcpu_sbi_extension *ext; + int i; + + for (i = 0; i < ARRAY_SIZE(sbi_ext); i++) { + entry = &sbi_ext[i]; + ext = entry->ext_ptr; + + if (ext->probe && !ext->probe(vcpu)) { + scontext->ext_status[entry->ext_idx] = + KVM_RISCV_SBI_EXT_UNAVAILABLE; + continue; + } + + scontext->ext_status[entry->ext_idx] = ext->default_unavail ? + KVM_RISCV_SBI_EXT_UNAVAILABLE : + KVM_RISCV_SBI_EXT_AVAILABLE; + } +} -- 2.34.1 _______________________________________________ linux-riscv mailing list linux-riscv@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-riscv ^ permalink raw reply related [flat|nested] 96+ messages in thread
* [PATCH v3 3/9] RISC-V: KVM: Allow some SBI extensions to be disabled by default 2023-10-20 7:21 ` Anup Patel (?) (?) @ 2023-10-20 8:13 ` Andrew Jones -1 siblings, 0 replies; 96+ messages in thread From: Andrew Jones @ 2023-10-20 8:13 UTC (permalink / raw) To: kvm-riscv On Fri, Oct 20, 2023 at 12:51:34PM +0530, Anup Patel wrote: > Currently, all SBI extensions are enabled by default which is > problematic for SBI extensions (such as DBCN) which are forwarded > to the KVM user-space because we might have an older KVM user-space > which is not aware/ready to handle newer SBI extensions. Ideally, > the SBI extensions forwarded to the KVM user-space must be > disabled by default. > > To address above, we allow certain SBI extensions to be disabled > by default so that KVM user-space must explicitly enable such > SBI extensions to receive forwarded calls from Guest VCPU. > > Signed-off-by: Anup Patel <apatel@ventanamicro.com> > --- > arch/riscv/include/asm/kvm_vcpu_sbi.h | 4 ++ > arch/riscv/kvm/vcpu.c | 6 +++ > arch/riscv/kvm/vcpu_sbi.c | 57 +++++++++++++-------------- > 3 files changed, 38 insertions(+), 29 deletions(-) > Reviewed-by: Andrew Jones <ajones@ventanamicro.com> ^ permalink raw reply [flat|nested] 96+ messages in thread
* Re: [PATCH v3 3/9] RISC-V: KVM: Allow some SBI extensions to be disabled by default @ 2023-10-20 8:13 ` Andrew Jones 0 siblings, 0 replies; 96+ messages in thread From: Andrew Jones @ 2023-10-20 8:13 UTC (permalink / raw) To: Anup Patel Cc: linux-serial, kvm, Greg Kroah-Hartman, Atish Patra, linuxppc-dev, Conor Dooley, linux-kernel, Palmer Dabbelt, kvm-riscv, Paul Walmsley, Paolo Bonzini, linux-riscv, Jiri Slaby On Fri, Oct 20, 2023 at 12:51:34PM +0530, Anup Patel wrote: > Currently, all SBI extensions are enabled by default which is > problematic for SBI extensions (such as DBCN) which are forwarded > to the KVM user-space because we might have an older KVM user-space > which is not aware/ready to handle newer SBI extensions. Ideally, > the SBI extensions forwarded to the KVM user-space must be > disabled by default. > > To address above, we allow certain SBI extensions to be disabled > by default so that KVM user-space must explicitly enable such > SBI extensions to receive forwarded calls from Guest VCPU. > > Signed-off-by: Anup Patel <apatel@ventanamicro.com> > --- > arch/riscv/include/asm/kvm_vcpu_sbi.h | 4 ++ > arch/riscv/kvm/vcpu.c | 6 +++ > arch/riscv/kvm/vcpu_sbi.c | 57 +++++++++++++-------------- > 3 files changed, 38 insertions(+), 29 deletions(-) > Reviewed-by: Andrew Jones <ajones@ventanamicro.com> ^ permalink raw reply [flat|nested] 96+ messages in thread
* Re: [PATCH v3 3/9] RISC-V: KVM: Allow some SBI extensions to be disabled by default @ 2023-10-20 8:13 ` Andrew Jones 0 siblings, 0 replies; 96+ messages in thread From: Andrew Jones @ 2023-10-20 8:13 UTC (permalink / raw) To: Anup Patel Cc: Paolo Bonzini, Atish Patra, Palmer Dabbelt, Paul Walmsley, Greg Kroah-Hartman, Jiri Slaby, Conor Dooley, kvm, kvm-riscv, linux-riscv, linux-serial, linuxppc-dev, linux-kernel On Fri, Oct 20, 2023 at 12:51:34PM +0530, Anup Patel wrote: > Currently, all SBI extensions are enabled by default which is > problematic for SBI extensions (such as DBCN) which are forwarded > to the KVM user-space because we might have an older KVM user-space > which is not aware/ready to handle newer SBI extensions. Ideally, > the SBI extensions forwarded to the KVM user-space must be > disabled by default. > > To address above, we allow certain SBI extensions to be disabled > by default so that KVM user-space must explicitly enable such > SBI extensions to receive forwarded calls from Guest VCPU. > > Signed-off-by: Anup Patel <apatel@ventanamicro.com> > --- > arch/riscv/include/asm/kvm_vcpu_sbi.h | 4 ++ > arch/riscv/kvm/vcpu.c | 6 +++ > arch/riscv/kvm/vcpu_sbi.c | 57 +++++++++++++-------------- > 3 files changed, 38 insertions(+), 29 deletions(-) > Reviewed-by: Andrew Jones <ajones@ventanamicro.com> ^ permalink raw reply [flat|nested] 96+ messages in thread
* Re: [PATCH v3 3/9] RISC-V: KVM: Allow some SBI extensions to be disabled by default @ 2023-10-20 8:13 ` Andrew Jones 0 siblings, 0 replies; 96+ messages in thread From: Andrew Jones @ 2023-10-20 8:13 UTC (permalink / raw) To: Anup Patel Cc: Paolo Bonzini, Atish Patra, Palmer Dabbelt, Paul Walmsley, Greg Kroah-Hartman, Jiri Slaby, Conor Dooley, kvm, kvm-riscv, linux-riscv, linux-serial, linuxppc-dev, linux-kernel On Fri, Oct 20, 2023 at 12:51:34PM +0530, Anup Patel wrote: > Currently, all SBI extensions are enabled by default which is > problematic for SBI extensions (such as DBCN) which are forwarded > to the KVM user-space because we might have an older KVM user-space > which is not aware/ready to handle newer SBI extensions. Ideally, > the SBI extensions forwarded to the KVM user-space must be > disabled by default. > > To address above, we allow certain SBI extensions to be disabled > by default so that KVM user-space must explicitly enable such > SBI extensions to receive forwarded calls from Guest VCPU. > > Signed-off-by: Anup Patel <apatel@ventanamicro.com> > --- > arch/riscv/include/asm/kvm_vcpu_sbi.h | 4 ++ > arch/riscv/kvm/vcpu.c | 6 +++ > arch/riscv/kvm/vcpu_sbi.c | 57 +++++++++++++-------------- > 3 files changed, 38 insertions(+), 29 deletions(-) > Reviewed-by: Andrew Jones <ajones@ventanamicro.com> _______________________________________________ linux-riscv mailing list linux-riscv@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-riscv ^ permalink raw reply [flat|nested] 96+ messages in thread
* [PATCH v3 4/9] RISC-V: KVM: Forward SBI DBCN extension to user-space 2023-10-20 7:21 ` Anup Patel (?) (?) @ 2023-10-20 7:21 ` Anup Patel -1 siblings, 0 replies; 96+ messages in thread From: Anup Patel @ 2023-10-20 7:21 UTC (permalink / raw) To: kvm-riscv The frozen SBI v2.0 specification defines the SBI debug console (DBCN) extension which replaces the legacy SBI v0.1 console functions namely sbi_console_getchar() and sbi_console_putchar(). The SBI DBCN extension needs to be emulated in the KVM user-space (i.e. QEMU-KVM or KVMTOOL) so we forward SBI DBCN calls from KVM guest to the KVM user-space which can then redirect the console input/output to wherever it wants (e.g. telnet, file, stdio, etc). The SBI debug console is simply a early console available to KVM guest for early prints and it does not intend to replace the proper console devices such as 8250, VirtIO console, etc. Signed-off-by: Anup Patel <apatel@ventanamicro.com> Reviewed-by: Andrew Jones <ajones@ventanamicro.com> --- arch/riscv/include/asm/kvm_vcpu_sbi.h | 1 + arch/riscv/include/uapi/asm/kvm.h | 1 + arch/riscv/kvm/vcpu_sbi.c | 4 ++++ arch/riscv/kvm/vcpu_sbi_replace.c | 32 +++++++++++++++++++++++++++ 4 files changed, 38 insertions(+) diff --git a/arch/riscv/include/asm/kvm_vcpu_sbi.h b/arch/riscv/include/asm/kvm_vcpu_sbi.h index c02bda5559d7..6a453f7f8b56 100644 --- a/arch/riscv/include/asm/kvm_vcpu_sbi.h +++ b/arch/riscv/include/asm/kvm_vcpu_sbi.h @@ -73,6 +73,7 @@ extern const struct kvm_vcpu_sbi_extension vcpu_sbi_ext_ipi; extern const struct kvm_vcpu_sbi_extension vcpu_sbi_ext_rfence; extern const struct kvm_vcpu_sbi_extension vcpu_sbi_ext_srst; extern const struct kvm_vcpu_sbi_extension vcpu_sbi_ext_hsm; +extern const struct kvm_vcpu_sbi_extension vcpu_sbi_ext_dbcn; extern const struct kvm_vcpu_sbi_extension vcpu_sbi_ext_experimental; extern const struct kvm_vcpu_sbi_extension vcpu_sbi_ext_vendor; diff --git a/arch/riscv/include/uapi/asm/kvm.h b/arch/riscv/include/uapi/asm/kvm.h index 917d8cc2489e..60d3b21dead7 100644 --- a/arch/riscv/include/uapi/asm/kvm.h +++ b/arch/riscv/include/uapi/asm/kvm.h @@ -156,6 +156,7 @@ enum KVM_RISCV_SBI_EXT_ID { KVM_RISCV_SBI_EXT_PMU, KVM_RISCV_SBI_EXT_EXPERIMENTAL, KVM_RISCV_SBI_EXT_VENDOR, + KVM_RISCV_SBI_EXT_DBCN, KVM_RISCV_SBI_EXT_MAX, }; diff --git a/arch/riscv/kvm/vcpu_sbi.c b/arch/riscv/kvm/vcpu_sbi.c index bda8b0b33343..a04ff98085d9 100644 --- a/arch/riscv/kvm/vcpu_sbi.c +++ b/arch/riscv/kvm/vcpu_sbi.c @@ -66,6 +66,10 @@ static const struct kvm_riscv_sbi_extension_entry sbi_ext[] = { .ext_idx = KVM_RISCV_SBI_EXT_PMU, .ext_ptr = &vcpu_sbi_ext_pmu, }, + { + .ext_idx = KVM_RISCV_SBI_EXT_DBCN, + .ext_ptr = &vcpu_sbi_ext_dbcn, + }, { .ext_idx = KVM_RISCV_SBI_EXT_EXPERIMENTAL, .ext_ptr = &vcpu_sbi_ext_experimental, diff --git a/arch/riscv/kvm/vcpu_sbi_replace.c b/arch/riscv/kvm/vcpu_sbi_replace.c index 7c4d5d38a339..23b57c931b15 100644 --- a/arch/riscv/kvm/vcpu_sbi_replace.c +++ b/arch/riscv/kvm/vcpu_sbi_replace.c @@ -175,3 +175,35 @@ const struct kvm_vcpu_sbi_extension vcpu_sbi_ext_srst = { .extid_end = SBI_EXT_SRST, .handler = kvm_sbi_ext_srst_handler, }; + +static int kvm_sbi_ext_dbcn_handler(struct kvm_vcpu *vcpu, + struct kvm_run *run, + struct kvm_vcpu_sbi_return *retdata) +{ + struct kvm_cpu_context *cp = &vcpu->arch.guest_context; + unsigned long funcid = cp->a6; + + switch (funcid) { + case SBI_EXT_DBCN_CONSOLE_WRITE: + case SBI_EXT_DBCN_CONSOLE_READ: + case SBI_EXT_DBCN_CONSOLE_WRITE_BYTE: + /* + * The SBI debug console functions are unconditionally + * forwarded to the userspace. + */ + kvm_riscv_vcpu_sbi_forward(vcpu, run); + retdata->uexit = true; + break; + default: + retdata->err_val = SBI_ERR_NOT_SUPPORTED; + } + + return 0; +} + +const struct kvm_vcpu_sbi_extension vcpu_sbi_ext_dbcn = { + .extid_start = SBI_EXT_DBCN, + .extid_end = SBI_EXT_DBCN, + .default_unavail = true, + .handler = kvm_sbi_ext_dbcn_handler, +}; -- 2.34.1 ^ permalink raw reply related [flat|nested] 96+ messages in thread
* [PATCH v3 4/9] RISC-V: KVM: Forward SBI DBCN extension to user-space @ 2023-10-20 7:21 ` Anup Patel 0 siblings, 0 replies; 96+ messages in thread From: Anup Patel @ 2023-10-20 7:21 UTC (permalink / raw) To: Paolo Bonzini, Atish Patra, Palmer Dabbelt, Paul Walmsley, Greg Kroah-Hartman, Jiri Slaby Cc: Anup Patel, linux-serial, kvm, linux-kernel, Conor Dooley, kvm-riscv, linux-riscv, linuxppc-dev, Andrew Jones The frozen SBI v2.0 specification defines the SBI debug console (DBCN) extension which replaces the legacy SBI v0.1 console functions namely sbi_console_getchar() and sbi_console_putchar(). The SBI DBCN extension needs to be emulated in the KVM user-space (i.e. QEMU-KVM or KVMTOOL) so we forward SBI DBCN calls from KVM guest to the KVM user-space which can then redirect the console input/output to wherever it wants (e.g. telnet, file, stdio, etc). The SBI debug console is simply a early console available to KVM guest for early prints and it does not intend to replace the proper console devices such as 8250, VirtIO console, etc. Signed-off-by: Anup Patel <apatel@ventanamicro.com> Reviewed-by: Andrew Jones <ajones@ventanamicro.com> --- arch/riscv/include/asm/kvm_vcpu_sbi.h | 1 + arch/riscv/include/uapi/asm/kvm.h | 1 + arch/riscv/kvm/vcpu_sbi.c | 4 ++++ arch/riscv/kvm/vcpu_sbi_replace.c | 32 +++++++++++++++++++++++++++ 4 files changed, 38 insertions(+) diff --git a/arch/riscv/include/asm/kvm_vcpu_sbi.h b/arch/riscv/include/asm/kvm_vcpu_sbi.h index c02bda5559d7..6a453f7f8b56 100644 --- a/arch/riscv/include/asm/kvm_vcpu_sbi.h +++ b/arch/riscv/include/asm/kvm_vcpu_sbi.h @@ -73,6 +73,7 @@ extern const struct kvm_vcpu_sbi_extension vcpu_sbi_ext_ipi; extern const struct kvm_vcpu_sbi_extension vcpu_sbi_ext_rfence; extern const struct kvm_vcpu_sbi_extension vcpu_sbi_ext_srst; extern const struct kvm_vcpu_sbi_extension vcpu_sbi_ext_hsm; +extern const struct kvm_vcpu_sbi_extension vcpu_sbi_ext_dbcn; extern const struct kvm_vcpu_sbi_extension vcpu_sbi_ext_experimental; extern const struct kvm_vcpu_sbi_extension vcpu_sbi_ext_vendor; diff --git a/arch/riscv/include/uapi/asm/kvm.h b/arch/riscv/include/uapi/asm/kvm.h index 917d8cc2489e..60d3b21dead7 100644 --- a/arch/riscv/include/uapi/asm/kvm.h +++ b/arch/riscv/include/uapi/asm/kvm.h @@ -156,6 +156,7 @@ enum KVM_RISCV_SBI_EXT_ID { KVM_RISCV_SBI_EXT_PMU, KVM_RISCV_SBI_EXT_EXPERIMENTAL, KVM_RISCV_SBI_EXT_VENDOR, + KVM_RISCV_SBI_EXT_DBCN, KVM_RISCV_SBI_EXT_MAX, }; diff --git a/arch/riscv/kvm/vcpu_sbi.c b/arch/riscv/kvm/vcpu_sbi.c index bda8b0b33343..a04ff98085d9 100644 --- a/arch/riscv/kvm/vcpu_sbi.c +++ b/arch/riscv/kvm/vcpu_sbi.c @@ -66,6 +66,10 @@ static const struct kvm_riscv_sbi_extension_entry sbi_ext[] = { .ext_idx = KVM_RISCV_SBI_EXT_PMU, .ext_ptr = &vcpu_sbi_ext_pmu, }, + { + .ext_idx = KVM_RISCV_SBI_EXT_DBCN, + .ext_ptr = &vcpu_sbi_ext_dbcn, + }, { .ext_idx = KVM_RISCV_SBI_EXT_EXPERIMENTAL, .ext_ptr = &vcpu_sbi_ext_experimental, diff --git a/arch/riscv/kvm/vcpu_sbi_replace.c b/arch/riscv/kvm/vcpu_sbi_replace.c index 7c4d5d38a339..23b57c931b15 100644 --- a/arch/riscv/kvm/vcpu_sbi_replace.c +++ b/arch/riscv/kvm/vcpu_sbi_replace.c @@ -175,3 +175,35 @@ const struct kvm_vcpu_sbi_extension vcpu_sbi_ext_srst = { .extid_end = SBI_EXT_SRST, .handler = kvm_sbi_ext_srst_handler, }; + +static int kvm_sbi_ext_dbcn_handler(struct kvm_vcpu *vcpu, + struct kvm_run *run, + struct kvm_vcpu_sbi_return *retdata) +{ + struct kvm_cpu_context *cp = &vcpu->arch.guest_context; + unsigned long funcid = cp->a6; + + switch (funcid) { + case SBI_EXT_DBCN_CONSOLE_WRITE: + case SBI_EXT_DBCN_CONSOLE_READ: + case SBI_EXT_DBCN_CONSOLE_WRITE_BYTE: + /* + * The SBI debug console functions are unconditionally + * forwarded to the userspace. + */ + kvm_riscv_vcpu_sbi_forward(vcpu, run); + retdata->uexit = true; + break; + default: + retdata->err_val = SBI_ERR_NOT_SUPPORTED; + } + + return 0; +} + +const struct kvm_vcpu_sbi_extension vcpu_sbi_ext_dbcn = { + .extid_start = SBI_EXT_DBCN, + .extid_end = SBI_EXT_DBCN, + .default_unavail = true, + .handler = kvm_sbi_ext_dbcn_handler, +}; -- 2.34.1 ^ permalink raw reply related [flat|nested] 96+ messages in thread
* [PATCH v3 4/9] RISC-V: KVM: Forward SBI DBCN extension to user-space @ 2023-10-20 7:21 ` Anup Patel 0 siblings, 0 replies; 96+ messages in thread From: Anup Patel @ 2023-10-20 7:21 UTC (permalink / raw) To: Paolo Bonzini, Atish Patra, Palmer Dabbelt, Paul Walmsley, Greg Kroah-Hartman, Jiri Slaby Cc: Conor Dooley, Andrew Jones, kvm, kvm-riscv, linux-riscv, linux-serial, linuxppc-dev, linux-kernel, Anup Patel The frozen SBI v2.0 specification defines the SBI debug console (DBCN) extension which replaces the legacy SBI v0.1 console functions namely sbi_console_getchar() and sbi_console_putchar(). The SBI DBCN extension needs to be emulated in the KVM user-space (i.e. QEMU-KVM or KVMTOOL) so we forward SBI DBCN calls from KVM guest to the KVM user-space which can then redirect the console input/output to wherever it wants (e.g. telnet, file, stdio, etc). The SBI debug console is simply a early console available to KVM guest for early prints and it does not intend to replace the proper console devices such as 8250, VirtIO console, etc. Signed-off-by: Anup Patel <apatel@ventanamicro.com> Reviewed-by: Andrew Jones <ajones@ventanamicro.com> --- arch/riscv/include/asm/kvm_vcpu_sbi.h | 1 + arch/riscv/include/uapi/asm/kvm.h | 1 + arch/riscv/kvm/vcpu_sbi.c | 4 ++++ arch/riscv/kvm/vcpu_sbi_replace.c | 32 +++++++++++++++++++++++++++ 4 files changed, 38 insertions(+) diff --git a/arch/riscv/include/asm/kvm_vcpu_sbi.h b/arch/riscv/include/asm/kvm_vcpu_sbi.h index c02bda5559d7..6a453f7f8b56 100644 --- a/arch/riscv/include/asm/kvm_vcpu_sbi.h +++ b/arch/riscv/include/asm/kvm_vcpu_sbi.h @@ -73,6 +73,7 @@ extern const struct kvm_vcpu_sbi_extension vcpu_sbi_ext_ipi; extern const struct kvm_vcpu_sbi_extension vcpu_sbi_ext_rfence; extern const struct kvm_vcpu_sbi_extension vcpu_sbi_ext_srst; extern const struct kvm_vcpu_sbi_extension vcpu_sbi_ext_hsm; +extern const struct kvm_vcpu_sbi_extension vcpu_sbi_ext_dbcn; extern const struct kvm_vcpu_sbi_extension vcpu_sbi_ext_experimental; extern const struct kvm_vcpu_sbi_extension vcpu_sbi_ext_vendor; diff --git a/arch/riscv/include/uapi/asm/kvm.h b/arch/riscv/include/uapi/asm/kvm.h index 917d8cc2489e..60d3b21dead7 100644 --- a/arch/riscv/include/uapi/asm/kvm.h +++ b/arch/riscv/include/uapi/asm/kvm.h @@ -156,6 +156,7 @@ enum KVM_RISCV_SBI_EXT_ID { KVM_RISCV_SBI_EXT_PMU, KVM_RISCV_SBI_EXT_EXPERIMENTAL, KVM_RISCV_SBI_EXT_VENDOR, + KVM_RISCV_SBI_EXT_DBCN, KVM_RISCV_SBI_EXT_MAX, }; diff --git a/arch/riscv/kvm/vcpu_sbi.c b/arch/riscv/kvm/vcpu_sbi.c index bda8b0b33343..a04ff98085d9 100644 --- a/arch/riscv/kvm/vcpu_sbi.c +++ b/arch/riscv/kvm/vcpu_sbi.c @@ -66,6 +66,10 @@ static const struct kvm_riscv_sbi_extension_entry sbi_ext[] = { .ext_idx = KVM_RISCV_SBI_EXT_PMU, .ext_ptr = &vcpu_sbi_ext_pmu, }, + { + .ext_idx = KVM_RISCV_SBI_EXT_DBCN, + .ext_ptr = &vcpu_sbi_ext_dbcn, + }, { .ext_idx = KVM_RISCV_SBI_EXT_EXPERIMENTAL, .ext_ptr = &vcpu_sbi_ext_experimental, diff --git a/arch/riscv/kvm/vcpu_sbi_replace.c b/arch/riscv/kvm/vcpu_sbi_replace.c index 7c4d5d38a339..23b57c931b15 100644 --- a/arch/riscv/kvm/vcpu_sbi_replace.c +++ b/arch/riscv/kvm/vcpu_sbi_replace.c @@ -175,3 +175,35 @@ const struct kvm_vcpu_sbi_extension vcpu_sbi_ext_srst = { .extid_end = SBI_EXT_SRST, .handler = kvm_sbi_ext_srst_handler, }; + +static int kvm_sbi_ext_dbcn_handler(struct kvm_vcpu *vcpu, + struct kvm_run *run, + struct kvm_vcpu_sbi_return *retdata) +{ + struct kvm_cpu_context *cp = &vcpu->arch.guest_context; + unsigned long funcid = cp->a6; + + switch (funcid) { + case SBI_EXT_DBCN_CONSOLE_WRITE: + case SBI_EXT_DBCN_CONSOLE_READ: + case SBI_EXT_DBCN_CONSOLE_WRITE_BYTE: + /* + * The SBI debug console functions are unconditionally + * forwarded to the userspace. + */ + kvm_riscv_vcpu_sbi_forward(vcpu, run); + retdata->uexit = true; + break; + default: + retdata->err_val = SBI_ERR_NOT_SUPPORTED; + } + + return 0; +} + +const struct kvm_vcpu_sbi_extension vcpu_sbi_ext_dbcn = { + .extid_start = SBI_EXT_DBCN, + .extid_end = SBI_EXT_DBCN, + .default_unavail = true, + .handler = kvm_sbi_ext_dbcn_handler, +}; -- 2.34.1 ^ permalink raw reply related [flat|nested] 96+ messages in thread
* [PATCH v3 4/9] RISC-V: KVM: Forward SBI DBCN extension to user-space @ 2023-10-20 7:21 ` Anup Patel 0 siblings, 0 replies; 96+ messages in thread From: Anup Patel @ 2023-10-20 7:21 UTC (permalink / raw) To: Paolo Bonzini, Atish Patra, Palmer Dabbelt, Paul Walmsley, Greg Kroah-Hartman, Jiri Slaby Cc: Conor Dooley, Andrew Jones, kvm, kvm-riscv, linux-riscv, linux-serial, linuxppc-dev, linux-kernel, Anup Patel The frozen SBI v2.0 specification defines the SBI debug console (DBCN) extension which replaces the legacy SBI v0.1 console functions namely sbi_console_getchar() and sbi_console_putchar(). The SBI DBCN extension needs to be emulated in the KVM user-space (i.e. QEMU-KVM or KVMTOOL) so we forward SBI DBCN calls from KVM guest to the KVM user-space which can then redirect the console input/output to wherever it wants (e.g. telnet, file, stdio, etc). The SBI debug console is simply a early console available to KVM guest for early prints and it does not intend to replace the proper console devices such as 8250, VirtIO console, etc. Signed-off-by: Anup Patel <apatel@ventanamicro.com> Reviewed-by: Andrew Jones <ajones@ventanamicro.com> --- arch/riscv/include/asm/kvm_vcpu_sbi.h | 1 + arch/riscv/include/uapi/asm/kvm.h | 1 + arch/riscv/kvm/vcpu_sbi.c | 4 ++++ arch/riscv/kvm/vcpu_sbi_replace.c | 32 +++++++++++++++++++++++++++ 4 files changed, 38 insertions(+) diff --git a/arch/riscv/include/asm/kvm_vcpu_sbi.h b/arch/riscv/include/asm/kvm_vcpu_sbi.h index c02bda5559d7..6a453f7f8b56 100644 --- a/arch/riscv/include/asm/kvm_vcpu_sbi.h +++ b/arch/riscv/include/asm/kvm_vcpu_sbi.h @@ -73,6 +73,7 @@ extern const struct kvm_vcpu_sbi_extension vcpu_sbi_ext_ipi; extern const struct kvm_vcpu_sbi_extension vcpu_sbi_ext_rfence; extern const struct kvm_vcpu_sbi_extension vcpu_sbi_ext_srst; extern const struct kvm_vcpu_sbi_extension vcpu_sbi_ext_hsm; +extern const struct kvm_vcpu_sbi_extension vcpu_sbi_ext_dbcn; extern const struct kvm_vcpu_sbi_extension vcpu_sbi_ext_experimental; extern const struct kvm_vcpu_sbi_extension vcpu_sbi_ext_vendor; diff --git a/arch/riscv/include/uapi/asm/kvm.h b/arch/riscv/include/uapi/asm/kvm.h index 917d8cc2489e..60d3b21dead7 100644 --- a/arch/riscv/include/uapi/asm/kvm.h +++ b/arch/riscv/include/uapi/asm/kvm.h @@ -156,6 +156,7 @@ enum KVM_RISCV_SBI_EXT_ID { KVM_RISCV_SBI_EXT_PMU, KVM_RISCV_SBI_EXT_EXPERIMENTAL, KVM_RISCV_SBI_EXT_VENDOR, + KVM_RISCV_SBI_EXT_DBCN, KVM_RISCV_SBI_EXT_MAX, }; diff --git a/arch/riscv/kvm/vcpu_sbi.c b/arch/riscv/kvm/vcpu_sbi.c index bda8b0b33343..a04ff98085d9 100644 --- a/arch/riscv/kvm/vcpu_sbi.c +++ b/arch/riscv/kvm/vcpu_sbi.c @@ -66,6 +66,10 @@ static const struct kvm_riscv_sbi_extension_entry sbi_ext[] = { .ext_idx = KVM_RISCV_SBI_EXT_PMU, .ext_ptr = &vcpu_sbi_ext_pmu, }, + { + .ext_idx = KVM_RISCV_SBI_EXT_DBCN, + .ext_ptr = &vcpu_sbi_ext_dbcn, + }, { .ext_idx = KVM_RISCV_SBI_EXT_EXPERIMENTAL, .ext_ptr = &vcpu_sbi_ext_experimental, diff --git a/arch/riscv/kvm/vcpu_sbi_replace.c b/arch/riscv/kvm/vcpu_sbi_replace.c index 7c4d5d38a339..23b57c931b15 100644 --- a/arch/riscv/kvm/vcpu_sbi_replace.c +++ b/arch/riscv/kvm/vcpu_sbi_replace.c @@ -175,3 +175,35 @@ const struct kvm_vcpu_sbi_extension vcpu_sbi_ext_srst = { .extid_end = SBI_EXT_SRST, .handler = kvm_sbi_ext_srst_handler, }; + +static int kvm_sbi_ext_dbcn_handler(struct kvm_vcpu *vcpu, + struct kvm_run *run, + struct kvm_vcpu_sbi_return *retdata) +{ + struct kvm_cpu_context *cp = &vcpu->arch.guest_context; + unsigned long funcid = cp->a6; + + switch (funcid) { + case SBI_EXT_DBCN_CONSOLE_WRITE: + case SBI_EXT_DBCN_CONSOLE_READ: + case SBI_EXT_DBCN_CONSOLE_WRITE_BYTE: + /* + * The SBI debug console functions are unconditionally + * forwarded to the userspace. + */ + kvm_riscv_vcpu_sbi_forward(vcpu, run); + retdata->uexit = true; + break; + default: + retdata->err_val = SBI_ERR_NOT_SUPPORTED; + } + + return 0; +} + +const struct kvm_vcpu_sbi_extension vcpu_sbi_ext_dbcn = { + .extid_start = SBI_EXT_DBCN, + .extid_end = SBI_EXT_DBCN, + .default_unavail = true, + .handler = kvm_sbi_ext_dbcn_handler, +}; -- 2.34.1 _______________________________________________ linux-riscv mailing list linux-riscv@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-riscv ^ permalink raw reply related [flat|nested] 96+ messages in thread
* [PATCH v3 5/9] KVM: riscv: selftests: Add SBI DBCN extension to get-reg-list test 2023-10-20 7:21 ` Anup Patel (?) (?) @ 2023-10-20 7:21 ` Anup Patel -1 siblings, 0 replies; 96+ messages in thread From: Anup Patel @ 2023-10-20 7:21 UTC (permalink / raw) To: kvm-riscv We have a new SBI debug console (DBCN) extension supported by in-kernel KVM so let us add this extension to get-reg-list test. Signed-off-by: Anup Patel <apatel@ventanamicro.com> --- tools/testing/selftests/kvm/riscv/get-reg-list.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/tools/testing/selftests/kvm/riscv/get-reg-list.c b/tools/testing/selftests/kvm/riscv/get-reg-list.c index 234006d035c9..6bedaea95395 100644 --- a/tools/testing/selftests/kvm/riscv/get-reg-list.c +++ b/tools/testing/selftests/kvm/riscv/get-reg-list.c @@ -394,6 +394,7 @@ static const char *sbi_ext_single_id_to_str(__u64 reg_off) KVM_SBI_EXT_ARR(KVM_RISCV_SBI_EXT_PMU), KVM_SBI_EXT_ARR(KVM_RISCV_SBI_EXT_EXPERIMENTAL), KVM_SBI_EXT_ARR(KVM_RISCV_SBI_EXT_VENDOR), + KVM_SBI_EXT_ARR(KVM_RISCV_SBI_EXT_DBCN), }; if (reg_off >= ARRAY_SIZE(kvm_sbi_ext_reg_name)) @@ -567,6 +568,7 @@ static __u64 base_regs[] = { KVM_REG_RISCV | KVM_REG_SIZE_ULONG | KVM_REG_RISCV_SBI_EXT | KVM_REG_RISCV_SBI_SINGLE | KVM_RISCV_SBI_EXT_PMU, KVM_REG_RISCV | KVM_REG_SIZE_ULONG | KVM_REG_RISCV_SBI_EXT | KVM_REG_RISCV_SBI_SINGLE | KVM_RISCV_SBI_EXT_EXPERIMENTAL, KVM_REG_RISCV | KVM_REG_SIZE_ULONG | KVM_REG_RISCV_SBI_EXT | KVM_REG_RISCV_SBI_SINGLE | KVM_RISCV_SBI_EXT_VENDOR, + KVM_REG_RISCV | KVM_REG_SIZE_ULONG | KVM_REG_RISCV_SBI_EXT | KVM_REG_RISCV_SBI_SINGLE | KVM_RISCV_SBI_EXT_DBCN, KVM_REG_RISCV | KVM_REG_SIZE_ULONG | KVM_REG_RISCV_SBI_EXT | KVM_REG_RISCV_SBI_MULTI_EN | 0, KVM_REG_RISCV | KVM_REG_SIZE_ULONG | KVM_REG_RISCV_SBI_EXT | KVM_REG_RISCV_SBI_MULTI_DIS | 0, }; -- 2.34.1 ^ permalink raw reply related [flat|nested] 96+ messages in thread
* [PATCH v3 5/9] KVM: riscv: selftests: Add SBI DBCN extension to get-reg-list test @ 2023-10-20 7:21 ` Anup Patel 0 siblings, 0 replies; 96+ messages in thread From: Anup Patel @ 2023-10-20 7:21 UTC (permalink / raw) To: Paolo Bonzini, Atish Patra, Palmer Dabbelt, Paul Walmsley, Greg Kroah-Hartman, Jiri Slaby Cc: Anup Patel, linux-serial, kvm, linux-kernel, Conor Dooley, kvm-riscv, linux-riscv, linuxppc-dev, Andrew Jones We have a new SBI debug console (DBCN) extension supported by in-kernel KVM so let us add this extension to get-reg-list test. Signed-off-by: Anup Patel <apatel@ventanamicro.com> --- tools/testing/selftests/kvm/riscv/get-reg-list.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/tools/testing/selftests/kvm/riscv/get-reg-list.c b/tools/testing/selftests/kvm/riscv/get-reg-list.c index 234006d035c9..6bedaea95395 100644 --- a/tools/testing/selftests/kvm/riscv/get-reg-list.c +++ b/tools/testing/selftests/kvm/riscv/get-reg-list.c @@ -394,6 +394,7 @@ static const char *sbi_ext_single_id_to_str(__u64 reg_off) KVM_SBI_EXT_ARR(KVM_RISCV_SBI_EXT_PMU), KVM_SBI_EXT_ARR(KVM_RISCV_SBI_EXT_EXPERIMENTAL), KVM_SBI_EXT_ARR(KVM_RISCV_SBI_EXT_VENDOR), + KVM_SBI_EXT_ARR(KVM_RISCV_SBI_EXT_DBCN), }; if (reg_off >= ARRAY_SIZE(kvm_sbi_ext_reg_name)) @@ -567,6 +568,7 @@ static __u64 base_regs[] = { KVM_REG_RISCV | KVM_REG_SIZE_ULONG | KVM_REG_RISCV_SBI_EXT | KVM_REG_RISCV_SBI_SINGLE | KVM_RISCV_SBI_EXT_PMU, KVM_REG_RISCV | KVM_REG_SIZE_ULONG | KVM_REG_RISCV_SBI_EXT | KVM_REG_RISCV_SBI_SINGLE | KVM_RISCV_SBI_EXT_EXPERIMENTAL, KVM_REG_RISCV | KVM_REG_SIZE_ULONG | KVM_REG_RISCV_SBI_EXT | KVM_REG_RISCV_SBI_SINGLE | KVM_RISCV_SBI_EXT_VENDOR, + KVM_REG_RISCV | KVM_REG_SIZE_ULONG | KVM_REG_RISCV_SBI_EXT | KVM_REG_RISCV_SBI_SINGLE | KVM_RISCV_SBI_EXT_DBCN, KVM_REG_RISCV | KVM_REG_SIZE_ULONG | KVM_REG_RISCV_SBI_EXT | KVM_REG_RISCV_SBI_MULTI_EN | 0, KVM_REG_RISCV | KVM_REG_SIZE_ULONG | KVM_REG_RISCV_SBI_EXT | KVM_REG_RISCV_SBI_MULTI_DIS | 0, }; -- 2.34.1 ^ permalink raw reply related [flat|nested] 96+ messages in thread
* [PATCH v3 5/9] KVM: riscv: selftests: Add SBI DBCN extension to get-reg-list test @ 2023-10-20 7:21 ` Anup Patel 0 siblings, 0 replies; 96+ messages in thread From: Anup Patel @ 2023-10-20 7:21 UTC (permalink / raw) To: Paolo Bonzini, Atish Patra, Palmer Dabbelt, Paul Walmsley, Greg Kroah-Hartman, Jiri Slaby Cc: Conor Dooley, Andrew Jones, kvm, kvm-riscv, linux-riscv, linux-serial, linuxppc-dev, linux-kernel, Anup Patel We have a new SBI debug console (DBCN) extension supported by in-kernel KVM so let us add this extension to get-reg-list test. Signed-off-by: Anup Patel <apatel@ventanamicro.com> --- tools/testing/selftests/kvm/riscv/get-reg-list.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/tools/testing/selftests/kvm/riscv/get-reg-list.c b/tools/testing/selftests/kvm/riscv/get-reg-list.c index 234006d035c9..6bedaea95395 100644 --- a/tools/testing/selftests/kvm/riscv/get-reg-list.c +++ b/tools/testing/selftests/kvm/riscv/get-reg-list.c @@ -394,6 +394,7 @@ static const char *sbi_ext_single_id_to_str(__u64 reg_off) KVM_SBI_EXT_ARR(KVM_RISCV_SBI_EXT_PMU), KVM_SBI_EXT_ARR(KVM_RISCV_SBI_EXT_EXPERIMENTAL), KVM_SBI_EXT_ARR(KVM_RISCV_SBI_EXT_VENDOR), + KVM_SBI_EXT_ARR(KVM_RISCV_SBI_EXT_DBCN), }; if (reg_off >= ARRAY_SIZE(kvm_sbi_ext_reg_name)) @@ -567,6 +568,7 @@ static __u64 base_regs[] = { KVM_REG_RISCV | KVM_REG_SIZE_ULONG | KVM_REG_RISCV_SBI_EXT | KVM_REG_RISCV_SBI_SINGLE | KVM_RISCV_SBI_EXT_PMU, KVM_REG_RISCV | KVM_REG_SIZE_ULONG | KVM_REG_RISCV_SBI_EXT | KVM_REG_RISCV_SBI_SINGLE | KVM_RISCV_SBI_EXT_EXPERIMENTAL, KVM_REG_RISCV | KVM_REG_SIZE_ULONG | KVM_REG_RISCV_SBI_EXT | KVM_REG_RISCV_SBI_SINGLE | KVM_RISCV_SBI_EXT_VENDOR, + KVM_REG_RISCV | KVM_REG_SIZE_ULONG | KVM_REG_RISCV_SBI_EXT | KVM_REG_RISCV_SBI_SINGLE | KVM_RISCV_SBI_EXT_DBCN, KVM_REG_RISCV | KVM_REG_SIZE_ULONG | KVM_REG_RISCV_SBI_EXT | KVM_REG_RISCV_SBI_MULTI_EN | 0, KVM_REG_RISCV | KVM_REG_SIZE_ULONG | KVM_REG_RISCV_SBI_EXT | KVM_REG_RISCV_SBI_MULTI_DIS | 0, }; -- 2.34.1 ^ permalink raw reply related [flat|nested] 96+ messages in thread
* [PATCH v3 5/9] KVM: riscv: selftests: Add SBI DBCN extension to get-reg-list test @ 2023-10-20 7:21 ` Anup Patel 0 siblings, 0 replies; 96+ messages in thread From: Anup Patel @ 2023-10-20 7:21 UTC (permalink / raw) To: Paolo Bonzini, Atish Patra, Palmer Dabbelt, Paul Walmsley, Greg Kroah-Hartman, Jiri Slaby Cc: Conor Dooley, Andrew Jones, kvm, kvm-riscv, linux-riscv, linux-serial, linuxppc-dev, linux-kernel, Anup Patel We have a new SBI debug console (DBCN) extension supported by in-kernel KVM so let us add this extension to get-reg-list test. Signed-off-by: Anup Patel <apatel@ventanamicro.com> --- tools/testing/selftests/kvm/riscv/get-reg-list.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/tools/testing/selftests/kvm/riscv/get-reg-list.c b/tools/testing/selftests/kvm/riscv/get-reg-list.c index 234006d035c9..6bedaea95395 100644 --- a/tools/testing/selftests/kvm/riscv/get-reg-list.c +++ b/tools/testing/selftests/kvm/riscv/get-reg-list.c @@ -394,6 +394,7 @@ static const char *sbi_ext_single_id_to_str(__u64 reg_off) KVM_SBI_EXT_ARR(KVM_RISCV_SBI_EXT_PMU), KVM_SBI_EXT_ARR(KVM_RISCV_SBI_EXT_EXPERIMENTAL), KVM_SBI_EXT_ARR(KVM_RISCV_SBI_EXT_VENDOR), + KVM_SBI_EXT_ARR(KVM_RISCV_SBI_EXT_DBCN), }; if (reg_off >= ARRAY_SIZE(kvm_sbi_ext_reg_name)) @@ -567,6 +568,7 @@ static __u64 base_regs[] = { KVM_REG_RISCV | KVM_REG_SIZE_ULONG | KVM_REG_RISCV_SBI_EXT | KVM_REG_RISCV_SBI_SINGLE | KVM_RISCV_SBI_EXT_PMU, KVM_REG_RISCV | KVM_REG_SIZE_ULONG | KVM_REG_RISCV_SBI_EXT | KVM_REG_RISCV_SBI_SINGLE | KVM_RISCV_SBI_EXT_EXPERIMENTAL, KVM_REG_RISCV | KVM_REG_SIZE_ULONG | KVM_REG_RISCV_SBI_EXT | KVM_REG_RISCV_SBI_SINGLE | KVM_RISCV_SBI_EXT_VENDOR, + KVM_REG_RISCV | KVM_REG_SIZE_ULONG | KVM_REG_RISCV_SBI_EXT | KVM_REG_RISCV_SBI_SINGLE | KVM_RISCV_SBI_EXT_DBCN, KVM_REG_RISCV | KVM_REG_SIZE_ULONG | KVM_REG_RISCV_SBI_EXT | KVM_REG_RISCV_SBI_MULTI_EN | 0, KVM_REG_RISCV | KVM_REG_SIZE_ULONG | KVM_REG_RISCV_SBI_EXT | KVM_REG_RISCV_SBI_MULTI_DIS | 0, }; -- 2.34.1 _______________________________________________ linux-riscv mailing list linux-riscv@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-riscv ^ permalink raw reply related [flat|nested] 96+ messages in thread
* [PATCH v3 5/9] KVM: riscv: selftests: Add SBI DBCN extension to get-reg-list test 2023-10-20 7:21 ` Anup Patel (?) (?) @ 2023-10-20 8:15 ` Andrew Jones -1 siblings, 0 replies; 96+ messages in thread From: Andrew Jones @ 2023-10-20 8:15 UTC (permalink / raw) To: kvm-riscv On Fri, Oct 20, 2023 at 12:51:36PM +0530, Anup Patel wrote: > We have a new SBI debug console (DBCN) extension supported by in-kernel > KVM so let us add this extension to get-reg-list test. > > Signed-off-by: Anup Patel <apatel@ventanamicro.com> > --- > tools/testing/selftests/kvm/riscv/get-reg-list.c | 2 ++ > 1 file changed, 2 insertions(+) > > diff --git a/tools/testing/selftests/kvm/riscv/get-reg-list.c b/tools/testing/selftests/kvm/riscv/get-reg-list.c > index 234006d035c9..6bedaea95395 100644 > --- a/tools/testing/selftests/kvm/riscv/get-reg-list.c > +++ b/tools/testing/selftests/kvm/riscv/get-reg-list.c > @@ -394,6 +394,7 @@ static const char *sbi_ext_single_id_to_str(__u64 reg_off) > KVM_SBI_EXT_ARR(KVM_RISCV_SBI_EXT_PMU), > KVM_SBI_EXT_ARR(KVM_RISCV_SBI_EXT_EXPERIMENTAL), > KVM_SBI_EXT_ARR(KVM_RISCV_SBI_EXT_VENDOR), > + KVM_SBI_EXT_ARR(KVM_RISCV_SBI_EXT_DBCN), > }; > > if (reg_off >= ARRAY_SIZE(kvm_sbi_ext_reg_name)) > @@ -567,6 +568,7 @@ static __u64 base_regs[] = { > KVM_REG_RISCV | KVM_REG_SIZE_ULONG | KVM_REG_RISCV_SBI_EXT | KVM_REG_RISCV_SBI_SINGLE | KVM_RISCV_SBI_EXT_PMU, > KVM_REG_RISCV | KVM_REG_SIZE_ULONG | KVM_REG_RISCV_SBI_EXT | KVM_REG_RISCV_SBI_SINGLE | KVM_RISCV_SBI_EXT_EXPERIMENTAL, > KVM_REG_RISCV | KVM_REG_SIZE_ULONG | KVM_REG_RISCV_SBI_EXT | KVM_REG_RISCV_SBI_SINGLE | KVM_RISCV_SBI_EXT_VENDOR, > + KVM_REG_RISCV | KVM_REG_SIZE_ULONG | KVM_REG_RISCV_SBI_EXT | KVM_REG_RISCV_SBI_SINGLE | KVM_RISCV_SBI_EXT_DBCN, > KVM_REG_RISCV | KVM_REG_SIZE_ULONG | KVM_REG_RISCV_SBI_EXT | KVM_REG_RISCV_SBI_MULTI_EN | 0, > KVM_REG_RISCV | KVM_REG_SIZE_ULONG | KVM_REG_RISCV_SBI_EXT | KVM_REG_RISCV_SBI_MULTI_DIS | 0, > }; > -- > 2.34.1 > Reviewed-by: Andrew Jones <ajones@ventanamicro.com> ^ permalink raw reply [flat|nested] 96+ messages in thread
* Re: [PATCH v3 5/9] KVM: riscv: selftests: Add SBI DBCN extension to get-reg-list test @ 2023-10-20 8:15 ` Andrew Jones 0 siblings, 0 replies; 96+ messages in thread From: Andrew Jones @ 2023-10-20 8:15 UTC (permalink / raw) To: Anup Patel Cc: linux-serial, kvm, Greg Kroah-Hartman, Atish Patra, linuxppc-dev, Conor Dooley, linux-kernel, Palmer Dabbelt, kvm-riscv, Paul Walmsley, Paolo Bonzini, linux-riscv, Jiri Slaby On Fri, Oct 20, 2023 at 12:51:36PM +0530, Anup Patel wrote: > We have a new SBI debug console (DBCN) extension supported by in-kernel > KVM so let us add this extension to get-reg-list test. > > Signed-off-by: Anup Patel <apatel@ventanamicro.com> > --- > tools/testing/selftests/kvm/riscv/get-reg-list.c | 2 ++ > 1 file changed, 2 insertions(+) > > diff --git a/tools/testing/selftests/kvm/riscv/get-reg-list.c b/tools/testing/selftests/kvm/riscv/get-reg-list.c > index 234006d035c9..6bedaea95395 100644 > --- a/tools/testing/selftests/kvm/riscv/get-reg-list.c > +++ b/tools/testing/selftests/kvm/riscv/get-reg-list.c > @@ -394,6 +394,7 @@ static const char *sbi_ext_single_id_to_str(__u64 reg_off) > KVM_SBI_EXT_ARR(KVM_RISCV_SBI_EXT_PMU), > KVM_SBI_EXT_ARR(KVM_RISCV_SBI_EXT_EXPERIMENTAL), > KVM_SBI_EXT_ARR(KVM_RISCV_SBI_EXT_VENDOR), > + KVM_SBI_EXT_ARR(KVM_RISCV_SBI_EXT_DBCN), > }; > > if (reg_off >= ARRAY_SIZE(kvm_sbi_ext_reg_name)) > @@ -567,6 +568,7 @@ static __u64 base_regs[] = { > KVM_REG_RISCV | KVM_REG_SIZE_ULONG | KVM_REG_RISCV_SBI_EXT | KVM_REG_RISCV_SBI_SINGLE | KVM_RISCV_SBI_EXT_PMU, > KVM_REG_RISCV | KVM_REG_SIZE_ULONG | KVM_REG_RISCV_SBI_EXT | KVM_REG_RISCV_SBI_SINGLE | KVM_RISCV_SBI_EXT_EXPERIMENTAL, > KVM_REG_RISCV | KVM_REG_SIZE_ULONG | KVM_REG_RISCV_SBI_EXT | KVM_REG_RISCV_SBI_SINGLE | KVM_RISCV_SBI_EXT_VENDOR, > + KVM_REG_RISCV | KVM_REG_SIZE_ULONG | KVM_REG_RISCV_SBI_EXT | KVM_REG_RISCV_SBI_SINGLE | KVM_RISCV_SBI_EXT_DBCN, > KVM_REG_RISCV | KVM_REG_SIZE_ULONG | KVM_REG_RISCV_SBI_EXT | KVM_REG_RISCV_SBI_MULTI_EN | 0, > KVM_REG_RISCV | KVM_REG_SIZE_ULONG | KVM_REG_RISCV_SBI_EXT | KVM_REG_RISCV_SBI_MULTI_DIS | 0, > }; > -- > 2.34.1 > Reviewed-by: Andrew Jones <ajones@ventanamicro.com> ^ permalink raw reply [flat|nested] 96+ messages in thread
* Re: [PATCH v3 5/9] KVM: riscv: selftests: Add SBI DBCN extension to get-reg-list test @ 2023-10-20 8:15 ` Andrew Jones 0 siblings, 0 replies; 96+ messages in thread From: Andrew Jones @ 2023-10-20 8:15 UTC (permalink / raw) To: Anup Patel Cc: Paolo Bonzini, Atish Patra, Palmer Dabbelt, Paul Walmsley, Greg Kroah-Hartman, Jiri Slaby, Conor Dooley, kvm, kvm-riscv, linux-riscv, linux-serial, linuxppc-dev, linux-kernel On Fri, Oct 20, 2023 at 12:51:36PM +0530, Anup Patel wrote: > We have a new SBI debug console (DBCN) extension supported by in-kernel > KVM so let us add this extension to get-reg-list test. > > Signed-off-by: Anup Patel <apatel@ventanamicro.com> > --- > tools/testing/selftests/kvm/riscv/get-reg-list.c | 2 ++ > 1 file changed, 2 insertions(+) > > diff --git a/tools/testing/selftests/kvm/riscv/get-reg-list.c b/tools/testing/selftests/kvm/riscv/get-reg-list.c > index 234006d035c9..6bedaea95395 100644 > --- a/tools/testing/selftests/kvm/riscv/get-reg-list.c > +++ b/tools/testing/selftests/kvm/riscv/get-reg-list.c > @@ -394,6 +394,7 @@ static const char *sbi_ext_single_id_to_str(__u64 reg_off) > KVM_SBI_EXT_ARR(KVM_RISCV_SBI_EXT_PMU), > KVM_SBI_EXT_ARR(KVM_RISCV_SBI_EXT_EXPERIMENTAL), > KVM_SBI_EXT_ARR(KVM_RISCV_SBI_EXT_VENDOR), > + KVM_SBI_EXT_ARR(KVM_RISCV_SBI_EXT_DBCN), > }; > > if (reg_off >= ARRAY_SIZE(kvm_sbi_ext_reg_name)) > @@ -567,6 +568,7 @@ static __u64 base_regs[] = { > KVM_REG_RISCV | KVM_REG_SIZE_ULONG | KVM_REG_RISCV_SBI_EXT | KVM_REG_RISCV_SBI_SINGLE | KVM_RISCV_SBI_EXT_PMU, > KVM_REG_RISCV | KVM_REG_SIZE_ULONG | KVM_REG_RISCV_SBI_EXT | KVM_REG_RISCV_SBI_SINGLE | KVM_RISCV_SBI_EXT_EXPERIMENTAL, > KVM_REG_RISCV | KVM_REG_SIZE_ULONG | KVM_REG_RISCV_SBI_EXT | KVM_REG_RISCV_SBI_SINGLE | KVM_RISCV_SBI_EXT_VENDOR, > + KVM_REG_RISCV | KVM_REG_SIZE_ULONG | KVM_REG_RISCV_SBI_EXT | KVM_REG_RISCV_SBI_SINGLE | KVM_RISCV_SBI_EXT_DBCN, > KVM_REG_RISCV | KVM_REG_SIZE_ULONG | KVM_REG_RISCV_SBI_EXT | KVM_REG_RISCV_SBI_MULTI_EN | 0, > KVM_REG_RISCV | KVM_REG_SIZE_ULONG | KVM_REG_RISCV_SBI_EXT | KVM_REG_RISCV_SBI_MULTI_DIS | 0, > }; > -- > 2.34.1 > Reviewed-by: Andrew Jones <ajones@ventanamicro.com> ^ permalink raw reply [flat|nested] 96+ messages in thread
* Re: [PATCH v3 5/9] KVM: riscv: selftests: Add SBI DBCN extension to get-reg-list test @ 2023-10-20 8:15 ` Andrew Jones 0 siblings, 0 replies; 96+ messages in thread From: Andrew Jones @ 2023-10-20 8:15 UTC (permalink / raw) To: Anup Patel Cc: Paolo Bonzini, Atish Patra, Palmer Dabbelt, Paul Walmsley, Greg Kroah-Hartman, Jiri Slaby, Conor Dooley, kvm, kvm-riscv, linux-riscv, linux-serial, linuxppc-dev, linux-kernel On Fri, Oct 20, 2023 at 12:51:36PM +0530, Anup Patel wrote: > We have a new SBI debug console (DBCN) extension supported by in-kernel > KVM so let us add this extension to get-reg-list test. > > Signed-off-by: Anup Patel <apatel@ventanamicro.com> > --- > tools/testing/selftests/kvm/riscv/get-reg-list.c | 2 ++ > 1 file changed, 2 insertions(+) > > diff --git a/tools/testing/selftests/kvm/riscv/get-reg-list.c b/tools/testing/selftests/kvm/riscv/get-reg-list.c > index 234006d035c9..6bedaea95395 100644 > --- a/tools/testing/selftests/kvm/riscv/get-reg-list.c > +++ b/tools/testing/selftests/kvm/riscv/get-reg-list.c > @@ -394,6 +394,7 @@ static const char *sbi_ext_single_id_to_str(__u64 reg_off) > KVM_SBI_EXT_ARR(KVM_RISCV_SBI_EXT_PMU), > KVM_SBI_EXT_ARR(KVM_RISCV_SBI_EXT_EXPERIMENTAL), > KVM_SBI_EXT_ARR(KVM_RISCV_SBI_EXT_VENDOR), > + KVM_SBI_EXT_ARR(KVM_RISCV_SBI_EXT_DBCN), > }; > > if (reg_off >= ARRAY_SIZE(kvm_sbi_ext_reg_name)) > @@ -567,6 +568,7 @@ static __u64 base_regs[] = { > KVM_REG_RISCV | KVM_REG_SIZE_ULONG | KVM_REG_RISCV_SBI_EXT | KVM_REG_RISCV_SBI_SINGLE | KVM_RISCV_SBI_EXT_PMU, > KVM_REG_RISCV | KVM_REG_SIZE_ULONG | KVM_REG_RISCV_SBI_EXT | KVM_REG_RISCV_SBI_SINGLE | KVM_RISCV_SBI_EXT_EXPERIMENTAL, > KVM_REG_RISCV | KVM_REG_SIZE_ULONG | KVM_REG_RISCV_SBI_EXT | KVM_REG_RISCV_SBI_SINGLE | KVM_RISCV_SBI_EXT_VENDOR, > + KVM_REG_RISCV | KVM_REG_SIZE_ULONG | KVM_REG_RISCV_SBI_EXT | KVM_REG_RISCV_SBI_SINGLE | KVM_RISCV_SBI_EXT_DBCN, > KVM_REG_RISCV | KVM_REG_SIZE_ULONG | KVM_REG_RISCV_SBI_EXT | KVM_REG_RISCV_SBI_MULTI_EN | 0, > KVM_REG_RISCV | KVM_REG_SIZE_ULONG | KVM_REG_RISCV_SBI_EXT | KVM_REG_RISCV_SBI_MULTI_DIS | 0, > }; > -- > 2.34.1 > Reviewed-by: Andrew Jones <ajones@ventanamicro.com> _______________________________________________ linux-riscv mailing list linux-riscv@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-riscv ^ permalink raw reply [flat|nested] 96+ messages in thread
* [PATCH v3 6/9] RISC-V: Add stubs for sbi_console_putchar/getchar() 2023-10-20 7:21 ` Anup Patel (?) (?) @ 2023-10-20 7:21 ` Anup Patel -1 siblings, 0 replies; 96+ messages in thread From: Anup Patel @ 2023-10-20 7:21 UTC (permalink / raw) To: kvm-riscv The functions sbi_console_putchar() and sbi_console_getchar() are not defined when CONFIG_RISCV_SBI_V01 is disabled so let us add stub of these functions to avoid "#ifdef" on user side. Signed-off-by: Anup Patel <apatel@ventanamicro.com> Reviewed-by: Andrew Jones <ajones@ventanamicro.com> --- arch/riscv/include/asm/sbi.h | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/arch/riscv/include/asm/sbi.h b/arch/riscv/include/asm/sbi.h index 12dfda6bb924..cbcefa344417 100644 --- a/arch/riscv/include/asm/sbi.h +++ b/arch/riscv/include/asm/sbi.h @@ -271,8 +271,13 @@ struct sbiret sbi_ecall(int ext, int fid, unsigned long arg0, unsigned long arg3, unsigned long arg4, unsigned long arg5); +#ifdef CONFIG_RISCV_SBI_V01 void sbi_console_putchar(int ch); int sbi_console_getchar(void); +#else +static inline void sbi_console_putchar(int ch) { } +static inline int sbi_console_getchar(void) { return -1; } +#endif long sbi_get_mvendorid(void); long sbi_get_marchid(void); long sbi_get_mimpid(void); -- 2.34.1 ^ permalink raw reply related [flat|nested] 96+ messages in thread
* [PATCH v3 6/9] RISC-V: Add stubs for sbi_console_putchar/getchar() @ 2023-10-20 7:21 ` Anup Patel 0 siblings, 0 replies; 96+ messages in thread From: Anup Patel @ 2023-10-20 7:21 UTC (permalink / raw) To: Paolo Bonzini, Atish Patra, Palmer Dabbelt, Paul Walmsley, Greg Kroah-Hartman, Jiri Slaby Cc: Anup Patel, linux-serial, kvm, linux-kernel, Conor Dooley, kvm-riscv, linux-riscv, linuxppc-dev, Andrew Jones The functions sbi_console_putchar() and sbi_console_getchar() are not defined when CONFIG_RISCV_SBI_V01 is disabled so let us add stub of these functions to avoid "#ifdef" on user side. Signed-off-by: Anup Patel <apatel@ventanamicro.com> Reviewed-by: Andrew Jones <ajones@ventanamicro.com> --- arch/riscv/include/asm/sbi.h | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/arch/riscv/include/asm/sbi.h b/arch/riscv/include/asm/sbi.h index 12dfda6bb924..cbcefa344417 100644 --- a/arch/riscv/include/asm/sbi.h +++ b/arch/riscv/include/asm/sbi.h @@ -271,8 +271,13 @@ struct sbiret sbi_ecall(int ext, int fid, unsigned long arg0, unsigned long arg3, unsigned long arg4, unsigned long arg5); +#ifdef CONFIG_RISCV_SBI_V01 void sbi_console_putchar(int ch); int sbi_console_getchar(void); +#else +static inline void sbi_console_putchar(int ch) { } +static inline int sbi_console_getchar(void) { return -1; } +#endif long sbi_get_mvendorid(void); long sbi_get_marchid(void); long sbi_get_mimpid(void); -- 2.34.1 ^ permalink raw reply related [flat|nested] 96+ messages in thread
* [PATCH v3 6/9] RISC-V: Add stubs for sbi_console_putchar/getchar() @ 2023-10-20 7:21 ` Anup Patel 0 siblings, 0 replies; 96+ messages in thread From: Anup Patel @ 2023-10-20 7:21 UTC (permalink / raw) To: Paolo Bonzini, Atish Patra, Palmer Dabbelt, Paul Walmsley, Greg Kroah-Hartman, Jiri Slaby Cc: Conor Dooley, Andrew Jones, kvm, kvm-riscv, linux-riscv, linux-serial, linuxppc-dev, linux-kernel, Anup Patel The functions sbi_console_putchar() and sbi_console_getchar() are not defined when CONFIG_RISCV_SBI_V01 is disabled so let us add stub of these functions to avoid "#ifdef" on user side. Signed-off-by: Anup Patel <apatel@ventanamicro.com> Reviewed-by: Andrew Jones <ajones@ventanamicro.com> --- arch/riscv/include/asm/sbi.h | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/arch/riscv/include/asm/sbi.h b/arch/riscv/include/asm/sbi.h index 12dfda6bb924..cbcefa344417 100644 --- a/arch/riscv/include/asm/sbi.h +++ b/arch/riscv/include/asm/sbi.h @@ -271,8 +271,13 @@ struct sbiret sbi_ecall(int ext, int fid, unsigned long arg0, unsigned long arg3, unsigned long arg4, unsigned long arg5); +#ifdef CONFIG_RISCV_SBI_V01 void sbi_console_putchar(int ch); int sbi_console_getchar(void); +#else +static inline void sbi_console_putchar(int ch) { } +static inline int sbi_console_getchar(void) { return -1; } +#endif long sbi_get_mvendorid(void); long sbi_get_marchid(void); long sbi_get_mimpid(void); -- 2.34.1 ^ permalink raw reply related [flat|nested] 96+ messages in thread
* [PATCH v3 6/9] RISC-V: Add stubs for sbi_console_putchar/getchar() @ 2023-10-20 7:21 ` Anup Patel 0 siblings, 0 replies; 96+ messages in thread From: Anup Patel @ 2023-10-20 7:21 UTC (permalink / raw) To: Paolo Bonzini, Atish Patra, Palmer Dabbelt, Paul Walmsley, Greg Kroah-Hartman, Jiri Slaby Cc: Conor Dooley, Andrew Jones, kvm, kvm-riscv, linux-riscv, linux-serial, linuxppc-dev, linux-kernel, Anup Patel The functions sbi_console_putchar() and sbi_console_getchar() are not defined when CONFIG_RISCV_SBI_V01 is disabled so let us add stub of these functions to avoid "#ifdef" on user side. Signed-off-by: Anup Patel <apatel@ventanamicro.com> Reviewed-by: Andrew Jones <ajones@ventanamicro.com> --- arch/riscv/include/asm/sbi.h | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/arch/riscv/include/asm/sbi.h b/arch/riscv/include/asm/sbi.h index 12dfda6bb924..cbcefa344417 100644 --- a/arch/riscv/include/asm/sbi.h +++ b/arch/riscv/include/asm/sbi.h @@ -271,8 +271,13 @@ struct sbiret sbi_ecall(int ext, int fid, unsigned long arg0, unsigned long arg3, unsigned long arg4, unsigned long arg5); +#ifdef CONFIG_RISCV_SBI_V01 void sbi_console_putchar(int ch); int sbi_console_getchar(void); +#else +static inline void sbi_console_putchar(int ch) { } +static inline int sbi_console_getchar(void) { return -1; } +#endif long sbi_get_mvendorid(void); long sbi_get_marchid(void); long sbi_get_mimpid(void); -- 2.34.1 _______________________________________________ linux-riscv mailing list linux-riscv@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-riscv ^ permalink raw reply related [flat|nested] 96+ messages in thread
* [PATCH v3 6/9] RISC-V: Add stubs for sbi_console_putchar/getchar() 2023-10-20 7:21 ` Anup Patel (?) (?) @ 2023-10-21 16:35 ` Greg Kroah-Hartman -1 siblings, 0 replies; 96+ messages in thread From: Greg Kroah-Hartman @ 2023-10-21 16:35 UTC (permalink / raw) To: kvm-riscv On Fri, Oct 20, 2023 at 12:51:37PM +0530, Anup Patel wrote: > The functions sbi_console_putchar() and sbi_console_getchar() are > not defined when CONFIG_RISCV_SBI_V01 is disabled so let us add > stub of these functions to avoid "#ifdef" on user side. > > Signed-off-by: Anup Patel <apatel@ventanamicro.com> > Reviewed-by: Andrew Jones <ajones@ventanamicro.com> > --- > arch/riscv/include/asm/sbi.h | 5 +++++ > 1 file changed, 5 insertions(+) > > diff --git a/arch/riscv/include/asm/sbi.h b/arch/riscv/include/asm/sbi.h > index 12dfda6bb924..cbcefa344417 100644 > --- a/arch/riscv/include/asm/sbi.h > +++ b/arch/riscv/include/asm/sbi.h > @@ -271,8 +271,13 @@ struct sbiret sbi_ecall(int ext, int fid, unsigned long arg0, > unsigned long arg3, unsigned long arg4, > unsigned long arg5); > > +#ifdef CONFIG_RISCV_SBI_V01 > void sbi_console_putchar(int ch); > int sbi_console_getchar(void); > +#else > +static inline void sbi_console_putchar(int ch) { } > +static inline int sbi_console_getchar(void) { return -1; } Why not return a real error, "-1" isn't that :) thanks, greg k-h ^ permalink raw reply [flat|nested] 96+ messages in thread
* Re: [PATCH v3 6/9] RISC-V: Add stubs for sbi_console_putchar/getchar() @ 2023-10-21 16:35 ` Greg Kroah-Hartman 0 siblings, 0 replies; 96+ messages in thread From: Greg Kroah-Hartman @ 2023-10-21 16:35 UTC (permalink / raw) To: Anup Patel Cc: linux-serial, kvm, linuxppc-dev, Atish Patra, linux-kernel, Conor Dooley, Palmer Dabbelt, kvm-riscv, Paul Walmsley, Paolo Bonzini, linux-riscv, Jiri Slaby, Andrew Jones On Fri, Oct 20, 2023 at 12:51:37PM +0530, Anup Patel wrote: > The functions sbi_console_putchar() and sbi_console_getchar() are > not defined when CONFIG_RISCV_SBI_V01 is disabled so let us add > stub of these functions to avoid "#ifdef" on user side. > > Signed-off-by: Anup Patel <apatel@ventanamicro.com> > Reviewed-by: Andrew Jones <ajones@ventanamicro.com> > --- > arch/riscv/include/asm/sbi.h | 5 +++++ > 1 file changed, 5 insertions(+) > > diff --git a/arch/riscv/include/asm/sbi.h b/arch/riscv/include/asm/sbi.h > index 12dfda6bb924..cbcefa344417 100644 > --- a/arch/riscv/include/asm/sbi.h > +++ b/arch/riscv/include/asm/sbi.h > @@ -271,8 +271,13 @@ struct sbiret sbi_ecall(int ext, int fid, unsigned long arg0, > unsigned long arg3, unsigned long arg4, > unsigned long arg5); > > +#ifdef CONFIG_RISCV_SBI_V01 > void sbi_console_putchar(int ch); > int sbi_console_getchar(void); > +#else > +static inline void sbi_console_putchar(int ch) { } > +static inline int sbi_console_getchar(void) { return -1; } Why not return a real error, "-1" isn't that :) thanks, greg k-h ^ permalink raw reply [flat|nested] 96+ messages in thread
* Re: [PATCH v3 6/9] RISC-V: Add stubs for sbi_console_putchar/getchar() @ 2023-10-21 16:35 ` Greg Kroah-Hartman 0 siblings, 0 replies; 96+ messages in thread From: Greg Kroah-Hartman @ 2023-10-21 16:35 UTC (permalink / raw) To: Anup Patel Cc: Paolo Bonzini, Atish Patra, Palmer Dabbelt, Paul Walmsley, Jiri Slaby, Conor Dooley, Andrew Jones, kvm, kvm-riscv, linux-riscv, linux-serial, linuxppc-dev, linux-kernel On Fri, Oct 20, 2023 at 12:51:37PM +0530, Anup Patel wrote: > The functions sbi_console_putchar() and sbi_console_getchar() are > not defined when CONFIG_RISCV_SBI_V01 is disabled so let us add > stub of these functions to avoid "#ifdef" on user side. > > Signed-off-by: Anup Patel <apatel@ventanamicro.com> > Reviewed-by: Andrew Jones <ajones@ventanamicro.com> > --- > arch/riscv/include/asm/sbi.h | 5 +++++ > 1 file changed, 5 insertions(+) > > diff --git a/arch/riscv/include/asm/sbi.h b/arch/riscv/include/asm/sbi.h > index 12dfda6bb924..cbcefa344417 100644 > --- a/arch/riscv/include/asm/sbi.h > +++ b/arch/riscv/include/asm/sbi.h > @@ -271,8 +271,13 @@ struct sbiret sbi_ecall(int ext, int fid, unsigned long arg0, > unsigned long arg3, unsigned long arg4, > unsigned long arg5); > > +#ifdef CONFIG_RISCV_SBI_V01 > void sbi_console_putchar(int ch); > int sbi_console_getchar(void); > +#else > +static inline void sbi_console_putchar(int ch) { } > +static inline int sbi_console_getchar(void) { return -1; } Why not return a real error, "-1" isn't that :) thanks, greg k-h ^ permalink raw reply [flat|nested] 96+ messages in thread
* Re: [PATCH v3 6/9] RISC-V: Add stubs for sbi_console_putchar/getchar() @ 2023-10-21 16:35 ` Greg Kroah-Hartman 0 siblings, 0 replies; 96+ messages in thread From: Greg Kroah-Hartman @ 2023-10-21 16:35 UTC (permalink / raw) To: Anup Patel Cc: Paolo Bonzini, Atish Patra, Palmer Dabbelt, Paul Walmsley, Jiri Slaby, Conor Dooley, Andrew Jones, kvm, kvm-riscv, linux-riscv, linux-serial, linuxppc-dev, linux-kernel On Fri, Oct 20, 2023 at 12:51:37PM +0530, Anup Patel wrote: > The functions sbi_console_putchar() and sbi_console_getchar() are > not defined when CONFIG_RISCV_SBI_V01 is disabled so let us add > stub of these functions to avoid "#ifdef" on user side. > > Signed-off-by: Anup Patel <apatel@ventanamicro.com> > Reviewed-by: Andrew Jones <ajones@ventanamicro.com> > --- > arch/riscv/include/asm/sbi.h | 5 +++++ > 1 file changed, 5 insertions(+) > > diff --git a/arch/riscv/include/asm/sbi.h b/arch/riscv/include/asm/sbi.h > index 12dfda6bb924..cbcefa344417 100644 > --- a/arch/riscv/include/asm/sbi.h > +++ b/arch/riscv/include/asm/sbi.h > @@ -271,8 +271,13 @@ struct sbiret sbi_ecall(int ext, int fid, unsigned long arg0, > unsigned long arg3, unsigned long arg4, > unsigned long arg5); > > +#ifdef CONFIG_RISCV_SBI_V01 > void sbi_console_putchar(int ch); > int sbi_console_getchar(void); > +#else > +static inline void sbi_console_putchar(int ch) { } > +static inline int sbi_console_getchar(void) { return -1; } Why not return a real error, "-1" isn't that :) thanks, greg k-h _______________________________________________ linux-riscv mailing list linux-riscv@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-riscv ^ permalink raw reply [flat|nested] 96+ messages in thread
* [PATCH v3 6/9] RISC-V: Add stubs for sbi_console_putchar/getchar() 2023-10-21 16:35 ` Greg Kroah-Hartman (?) (?) @ 2023-11-17 13:04 ` Anup Patel -1 siblings, 0 replies; 96+ messages in thread From: Anup Patel @ 2023-11-17 13:04 UTC (permalink / raw) To: kvm-riscv On Sat, Oct 21, 2023 at 10:05?PM Greg Kroah-Hartman <gregkh@linuxfoundation.org> wrote: > > On Fri, Oct 20, 2023 at 12:51:37PM +0530, Anup Patel wrote: > > The functions sbi_console_putchar() and sbi_console_getchar() are > > not defined when CONFIG_RISCV_SBI_V01 is disabled so let us add > > stub of these functions to avoid "#ifdef" on user side. > > > > Signed-off-by: Anup Patel <apatel@ventanamicro.com> > > Reviewed-by: Andrew Jones <ajones@ventanamicro.com> > > --- > > arch/riscv/include/asm/sbi.h | 5 +++++ > > 1 file changed, 5 insertions(+) > > > > diff --git a/arch/riscv/include/asm/sbi.h b/arch/riscv/include/asm/sbi.h > > index 12dfda6bb924..cbcefa344417 100644 > > --- a/arch/riscv/include/asm/sbi.h > > +++ b/arch/riscv/include/asm/sbi.h > > @@ -271,8 +271,13 @@ struct sbiret sbi_ecall(int ext, int fid, unsigned long arg0, > > unsigned long arg3, unsigned long arg4, > > unsigned long arg5); > > > > +#ifdef CONFIG_RISCV_SBI_V01 > > void sbi_console_putchar(int ch); > > int sbi_console_getchar(void); > > +#else > > +static inline void sbi_console_putchar(int ch) { } > > +static inline int sbi_console_getchar(void) { return -1; } > > Why not return a real error, "-1" isn't that :) As-per SBI spec, the legacy sbi_console_getchar() returns -1 upon failure hence the code. Refer, section 5.3 of the latest SBI spec https://github.com/riscv-non-isa/riscv-sbi-doc/releases/download/commit-fe4562532a9cc57e5743b6466946c5e5c98c73ca/riscv-sbi.pdf Although, the users of this function only expect a negative value upon failure so better to return proper error code here. I will update. > > thanks, > > greg k-h > > -- > kvm-riscv mailing list > kvm-riscv at lists.infradead.org > http://lists.infradead.org/mailman/listinfo/kvm-riscv Regards, Anup ^ permalink raw reply [flat|nested] 96+ messages in thread
* Re: [PATCH v3 6/9] RISC-V: Add stubs for sbi_console_putchar/getchar() @ 2023-11-17 13:04 ` Anup Patel 0 siblings, 0 replies; 96+ messages in thread From: Anup Patel @ 2023-11-17 13:04 UTC (permalink / raw) To: Greg Kroah-Hartman Cc: Anup Patel, linux-serial, kvm, linuxppc-dev, Atish Patra, linux-kernel, Conor Dooley, Palmer Dabbelt, kvm-riscv, Paul Walmsley, Paolo Bonzini, linux-riscv, Jiri Slaby, Andrew Jones On Sat, Oct 21, 2023 at 10:05 PM Greg Kroah-Hartman <gregkh@linuxfoundation.org> wrote: > > On Fri, Oct 20, 2023 at 12:51:37PM +0530, Anup Patel wrote: > > The functions sbi_console_putchar() and sbi_console_getchar() are > > not defined when CONFIG_RISCV_SBI_V01 is disabled so let us add > > stub of these functions to avoid "#ifdef" on user side. > > > > Signed-off-by: Anup Patel <apatel@ventanamicro.com> > > Reviewed-by: Andrew Jones <ajones@ventanamicro.com> > > --- > > arch/riscv/include/asm/sbi.h | 5 +++++ > > 1 file changed, 5 insertions(+) > > > > diff --git a/arch/riscv/include/asm/sbi.h b/arch/riscv/include/asm/sbi.h > > index 12dfda6bb924..cbcefa344417 100644 > > --- a/arch/riscv/include/asm/sbi.h > > +++ b/arch/riscv/include/asm/sbi.h > > @@ -271,8 +271,13 @@ struct sbiret sbi_ecall(int ext, int fid, unsigned long arg0, > > unsigned long arg3, unsigned long arg4, > > unsigned long arg5); > > > > +#ifdef CONFIG_RISCV_SBI_V01 > > void sbi_console_putchar(int ch); > > int sbi_console_getchar(void); > > +#else > > +static inline void sbi_console_putchar(int ch) { } > > +static inline int sbi_console_getchar(void) { return -1; } > > Why not return a real error, "-1" isn't that :) As-per SBI spec, the legacy sbi_console_getchar() returns -1 upon failure hence the code. Refer, section 5.3 of the latest SBI spec https://github.com/riscv-non-isa/riscv-sbi-doc/releases/download/commit-fe4562532a9cc57e5743b6466946c5e5c98c73ca/riscv-sbi.pdf Although, the users of this function only expect a negative value upon failure so better to return proper error code here. I will update. > > thanks, > > greg k-h > > -- > kvm-riscv mailing list > kvm-riscv@lists.infradead.org > http://lists.infradead.org/mailman/listinfo/kvm-riscv Regards, Anup ^ permalink raw reply [flat|nested] 96+ messages in thread
* Re: [PATCH v3 6/9] RISC-V: Add stubs for sbi_console_putchar/getchar() @ 2023-11-17 13:04 ` Anup Patel 0 siblings, 0 replies; 96+ messages in thread From: Anup Patel @ 2023-11-17 13:04 UTC (permalink / raw) To: Greg Kroah-Hartman Cc: Anup Patel, Paolo Bonzini, Atish Patra, Palmer Dabbelt, Paul Walmsley, Jiri Slaby, Conor Dooley, Andrew Jones, kvm, kvm-riscv, linux-riscv, linux-serial, linuxppc-dev, linux-kernel On Sat, Oct 21, 2023 at 10:05 PM Greg Kroah-Hartman <gregkh@linuxfoundation.org> wrote: > > On Fri, Oct 20, 2023 at 12:51:37PM +0530, Anup Patel wrote: > > The functions sbi_console_putchar() and sbi_console_getchar() are > > not defined when CONFIG_RISCV_SBI_V01 is disabled so let us add > > stub of these functions to avoid "#ifdef" on user side. > > > > Signed-off-by: Anup Patel <apatel@ventanamicro.com> > > Reviewed-by: Andrew Jones <ajones@ventanamicro.com> > > --- > > arch/riscv/include/asm/sbi.h | 5 +++++ > > 1 file changed, 5 insertions(+) > > > > diff --git a/arch/riscv/include/asm/sbi.h b/arch/riscv/include/asm/sbi.h > > index 12dfda6bb924..cbcefa344417 100644 > > --- a/arch/riscv/include/asm/sbi.h > > +++ b/arch/riscv/include/asm/sbi.h > > @@ -271,8 +271,13 @@ struct sbiret sbi_ecall(int ext, int fid, unsigned long arg0, > > unsigned long arg3, unsigned long arg4, > > unsigned long arg5); > > > > +#ifdef CONFIG_RISCV_SBI_V01 > > void sbi_console_putchar(int ch); > > int sbi_console_getchar(void); > > +#else > > +static inline void sbi_console_putchar(int ch) { } > > +static inline int sbi_console_getchar(void) { return -1; } > > Why not return a real error, "-1" isn't that :) As-per SBI spec, the legacy sbi_console_getchar() returns -1 upon failure hence the code. Refer, section 5.3 of the latest SBI spec https://github.com/riscv-non-isa/riscv-sbi-doc/releases/download/commit-fe4562532a9cc57e5743b6466946c5e5c98c73ca/riscv-sbi.pdf Although, the users of this function only expect a negative value upon failure so better to return proper error code here. I will update. > > thanks, > > greg k-h > > -- > kvm-riscv mailing list > kvm-riscv@lists.infradead.org > http://lists.infradead.org/mailman/listinfo/kvm-riscv Regards, Anup ^ permalink raw reply [flat|nested] 96+ messages in thread
* Re: [PATCH v3 6/9] RISC-V: Add stubs for sbi_console_putchar/getchar() @ 2023-11-17 13:04 ` Anup Patel 0 siblings, 0 replies; 96+ messages in thread From: Anup Patel @ 2023-11-17 13:04 UTC (permalink / raw) To: Greg Kroah-Hartman Cc: Anup Patel, Paolo Bonzini, Atish Patra, Palmer Dabbelt, Paul Walmsley, Jiri Slaby, Conor Dooley, Andrew Jones, kvm, kvm-riscv, linux-riscv, linux-serial, linuxppc-dev, linux-kernel On Sat, Oct 21, 2023 at 10:05 PM Greg Kroah-Hartman <gregkh@linuxfoundation.org> wrote: > > On Fri, Oct 20, 2023 at 12:51:37PM +0530, Anup Patel wrote: > > The functions sbi_console_putchar() and sbi_console_getchar() are > > not defined when CONFIG_RISCV_SBI_V01 is disabled so let us add > > stub of these functions to avoid "#ifdef" on user side. > > > > Signed-off-by: Anup Patel <apatel@ventanamicro.com> > > Reviewed-by: Andrew Jones <ajones@ventanamicro.com> > > --- > > arch/riscv/include/asm/sbi.h | 5 +++++ > > 1 file changed, 5 insertions(+) > > > > diff --git a/arch/riscv/include/asm/sbi.h b/arch/riscv/include/asm/sbi.h > > index 12dfda6bb924..cbcefa344417 100644 > > --- a/arch/riscv/include/asm/sbi.h > > +++ b/arch/riscv/include/asm/sbi.h > > @@ -271,8 +271,13 @@ struct sbiret sbi_ecall(int ext, int fid, unsigned long arg0, > > unsigned long arg3, unsigned long arg4, > > unsigned long arg5); > > > > +#ifdef CONFIG_RISCV_SBI_V01 > > void sbi_console_putchar(int ch); > > int sbi_console_getchar(void); > > +#else > > +static inline void sbi_console_putchar(int ch) { } > > +static inline int sbi_console_getchar(void) { return -1; } > > Why not return a real error, "-1" isn't that :) As-per SBI spec, the legacy sbi_console_getchar() returns -1 upon failure hence the code. Refer, section 5.3 of the latest SBI spec https://github.com/riscv-non-isa/riscv-sbi-doc/releases/download/commit-fe4562532a9cc57e5743b6466946c5e5c98c73ca/riscv-sbi.pdf Although, the users of this function only expect a negative value upon failure so better to return proper error code here. I will update. > > thanks, > > greg k-h > > -- > kvm-riscv mailing list > kvm-riscv@lists.infradead.org > http://lists.infradead.org/mailman/listinfo/kvm-riscv Regards, Anup _______________________________________________ linux-riscv mailing list linux-riscv@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-riscv ^ permalink raw reply [flat|nested] 96+ messages in thread
* [PATCH v3 7/9] tty/serial: Add RISC-V SBI debug console based earlycon 2023-10-20 7:21 ` Anup Patel (?) (?) @ 2023-10-20 7:21 ` Anup Patel -1 siblings, 0 replies; 96+ messages in thread From: Anup Patel @ 2023-10-20 7:21 UTC (permalink / raw) To: kvm-riscv We extend the existing RISC-V SBI earlycon support to use the new RISC-V SBI debug console extension. Signed-off-by: Anup Patel <apatel@ventanamicro.com> Reviewed-by: Andrew Jones <ajones@ventanamicro.com> --- drivers/tty/serial/Kconfig | 2 +- drivers/tty/serial/earlycon-riscv-sbi.c | 32 +++++++++++++++++++++---- 2 files changed, 29 insertions(+), 5 deletions(-) diff --git a/drivers/tty/serial/Kconfig b/drivers/tty/serial/Kconfig index bdc568a4ab66..cec46091a716 100644 --- a/drivers/tty/serial/Kconfig +++ b/drivers/tty/serial/Kconfig @@ -87,7 +87,7 @@ config SERIAL_EARLYCON_SEMIHOST config SERIAL_EARLYCON_RISCV_SBI bool "Early console using RISC-V SBI" - depends on RISCV_SBI_V01 + depends on RISCV_SBI select SERIAL_CORE select SERIAL_CORE_CONSOLE select SERIAL_EARLYCON diff --git a/drivers/tty/serial/earlycon-riscv-sbi.c b/drivers/tty/serial/earlycon-riscv-sbi.c index 27afb0b74ea7..c21cdef254e7 100644 --- a/drivers/tty/serial/earlycon-riscv-sbi.c +++ b/drivers/tty/serial/earlycon-riscv-sbi.c @@ -15,17 +15,41 @@ static void sbi_putc(struct uart_port *port, unsigned char c) sbi_console_putchar(c); } -static void sbi_console_write(struct console *con, - const char *s, unsigned n) +static void sbi_0_1_console_write(struct console *con, + const char *s, unsigned int n) { struct earlycon_device *dev = con->data; uart_console_write(&dev->port, s, n, sbi_putc); } +static void sbi_dbcn_console_write(struct console *con, + const char *s, unsigned int n) +{ + phys_addr_t pa = __pa(s); + + if (IS_ENABLED(CONFIG_32BIT)) + sbi_ecall(SBI_EXT_DBCN, SBI_EXT_DBCN_CONSOLE_WRITE, + n, lower_32_bits(pa), upper_32_bits(pa), 0, 0, 0); + else + sbi_ecall(SBI_EXT_DBCN, SBI_EXT_DBCN_CONSOLE_WRITE, + n, pa, 0, 0, 0, 0); +} + static int __init early_sbi_setup(struct earlycon_device *device, const char *opt) { - device->con->write = sbi_console_write; - return 0; + int ret = 0; + + if ((sbi_spec_version >= sbi_mk_version(2, 0)) && + (sbi_probe_extension(SBI_EXT_DBCN) > 0)) { + device->con->write = sbi_dbcn_console_write; + } else { + if (IS_ENABLED(CONFIG_RISCV_SBI_V01)) + device->con->write = sbi_0_1_console_write; + else + ret = -ENODEV; + } + + return ret; } EARLYCON_DECLARE(sbi, early_sbi_setup); -- 2.34.1 ^ permalink raw reply related [flat|nested] 96+ messages in thread
* [PATCH v3 7/9] tty/serial: Add RISC-V SBI debug console based earlycon @ 2023-10-20 7:21 ` Anup Patel 0 siblings, 0 replies; 96+ messages in thread From: Anup Patel @ 2023-10-20 7:21 UTC (permalink / raw) To: Paolo Bonzini, Atish Patra, Palmer Dabbelt, Paul Walmsley, Greg Kroah-Hartman, Jiri Slaby Cc: Anup Patel, linux-serial, kvm, linux-kernel, Conor Dooley, kvm-riscv, linux-riscv, linuxppc-dev, Andrew Jones We extend the existing RISC-V SBI earlycon support to use the new RISC-V SBI debug console extension. Signed-off-by: Anup Patel <apatel@ventanamicro.com> Reviewed-by: Andrew Jones <ajones@ventanamicro.com> --- drivers/tty/serial/Kconfig | 2 +- drivers/tty/serial/earlycon-riscv-sbi.c | 32 +++++++++++++++++++++---- 2 files changed, 29 insertions(+), 5 deletions(-) diff --git a/drivers/tty/serial/Kconfig b/drivers/tty/serial/Kconfig index bdc568a4ab66..cec46091a716 100644 --- a/drivers/tty/serial/Kconfig +++ b/drivers/tty/serial/Kconfig @@ -87,7 +87,7 @@ config SERIAL_EARLYCON_SEMIHOST config SERIAL_EARLYCON_RISCV_SBI bool "Early console using RISC-V SBI" - depends on RISCV_SBI_V01 + depends on RISCV_SBI select SERIAL_CORE select SERIAL_CORE_CONSOLE select SERIAL_EARLYCON diff --git a/drivers/tty/serial/earlycon-riscv-sbi.c b/drivers/tty/serial/earlycon-riscv-sbi.c index 27afb0b74ea7..c21cdef254e7 100644 --- a/drivers/tty/serial/earlycon-riscv-sbi.c +++ b/drivers/tty/serial/earlycon-riscv-sbi.c @@ -15,17 +15,41 @@ static void sbi_putc(struct uart_port *port, unsigned char c) sbi_console_putchar(c); } -static void sbi_console_write(struct console *con, - const char *s, unsigned n) +static void sbi_0_1_console_write(struct console *con, + const char *s, unsigned int n) { struct earlycon_device *dev = con->data; uart_console_write(&dev->port, s, n, sbi_putc); } +static void sbi_dbcn_console_write(struct console *con, + const char *s, unsigned int n) +{ + phys_addr_t pa = __pa(s); + + if (IS_ENABLED(CONFIG_32BIT)) + sbi_ecall(SBI_EXT_DBCN, SBI_EXT_DBCN_CONSOLE_WRITE, + n, lower_32_bits(pa), upper_32_bits(pa), 0, 0, 0); + else + sbi_ecall(SBI_EXT_DBCN, SBI_EXT_DBCN_CONSOLE_WRITE, + n, pa, 0, 0, 0, 0); +} + static int __init early_sbi_setup(struct earlycon_device *device, const char *opt) { - device->con->write = sbi_console_write; - return 0; + int ret = 0; + + if ((sbi_spec_version >= sbi_mk_version(2, 0)) && + (sbi_probe_extension(SBI_EXT_DBCN) > 0)) { + device->con->write = sbi_dbcn_console_write; + } else { + if (IS_ENABLED(CONFIG_RISCV_SBI_V01)) + device->con->write = sbi_0_1_console_write; + else + ret = -ENODEV; + } + + return ret; } EARLYCON_DECLARE(sbi, early_sbi_setup); -- 2.34.1 ^ permalink raw reply related [flat|nested] 96+ messages in thread
* [PATCH v3 7/9] tty/serial: Add RISC-V SBI debug console based earlycon @ 2023-10-20 7:21 ` Anup Patel 0 siblings, 0 replies; 96+ messages in thread From: Anup Patel @ 2023-10-20 7:21 UTC (permalink / raw) To: Paolo Bonzini, Atish Patra, Palmer Dabbelt, Paul Walmsley, Greg Kroah-Hartman, Jiri Slaby Cc: Conor Dooley, Andrew Jones, kvm, kvm-riscv, linux-riscv, linux-serial, linuxppc-dev, linux-kernel, Anup Patel We extend the existing RISC-V SBI earlycon support to use the new RISC-V SBI debug console extension. Signed-off-by: Anup Patel <apatel@ventanamicro.com> Reviewed-by: Andrew Jones <ajones@ventanamicro.com> --- drivers/tty/serial/Kconfig | 2 +- drivers/tty/serial/earlycon-riscv-sbi.c | 32 +++++++++++++++++++++---- 2 files changed, 29 insertions(+), 5 deletions(-) diff --git a/drivers/tty/serial/Kconfig b/drivers/tty/serial/Kconfig index bdc568a4ab66..cec46091a716 100644 --- a/drivers/tty/serial/Kconfig +++ b/drivers/tty/serial/Kconfig @@ -87,7 +87,7 @@ config SERIAL_EARLYCON_SEMIHOST config SERIAL_EARLYCON_RISCV_SBI bool "Early console using RISC-V SBI" - depends on RISCV_SBI_V01 + depends on RISCV_SBI select SERIAL_CORE select SERIAL_CORE_CONSOLE select SERIAL_EARLYCON diff --git a/drivers/tty/serial/earlycon-riscv-sbi.c b/drivers/tty/serial/earlycon-riscv-sbi.c index 27afb0b74ea7..c21cdef254e7 100644 --- a/drivers/tty/serial/earlycon-riscv-sbi.c +++ b/drivers/tty/serial/earlycon-riscv-sbi.c @@ -15,17 +15,41 @@ static void sbi_putc(struct uart_port *port, unsigned char c) sbi_console_putchar(c); } -static void sbi_console_write(struct console *con, - const char *s, unsigned n) +static void sbi_0_1_console_write(struct console *con, + const char *s, unsigned int n) { struct earlycon_device *dev = con->data; uart_console_write(&dev->port, s, n, sbi_putc); } +static void sbi_dbcn_console_write(struct console *con, + const char *s, unsigned int n) +{ + phys_addr_t pa = __pa(s); + + if (IS_ENABLED(CONFIG_32BIT)) + sbi_ecall(SBI_EXT_DBCN, SBI_EXT_DBCN_CONSOLE_WRITE, + n, lower_32_bits(pa), upper_32_bits(pa), 0, 0, 0); + else + sbi_ecall(SBI_EXT_DBCN, SBI_EXT_DBCN_CONSOLE_WRITE, + n, pa, 0, 0, 0, 0); +} + static int __init early_sbi_setup(struct earlycon_device *device, const char *opt) { - device->con->write = sbi_console_write; - return 0; + int ret = 0; + + if ((sbi_spec_version >= sbi_mk_version(2, 0)) && + (sbi_probe_extension(SBI_EXT_DBCN) > 0)) { + device->con->write = sbi_dbcn_console_write; + } else { + if (IS_ENABLED(CONFIG_RISCV_SBI_V01)) + device->con->write = sbi_0_1_console_write; + else + ret = -ENODEV; + } + + return ret; } EARLYCON_DECLARE(sbi, early_sbi_setup); -- 2.34.1 ^ permalink raw reply related [flat|nested] 96+ messages in thread
* [PATCH v3 7/9] tty/serial: Add RISC-V SBI debug console based earlycon @ 2023-10-20 7:21 ` Anup Patel 0 siblings, 0 replies; 96+ messages in thread From: Anup Patel @ 2023-10-20 7:21 UTC (permalink / raw) To: Paolo Bonzini, Atish Patra, Palmer Dabbelt, Paul Walmsley, Greg Kroah-Hartman, Jiri Slaby Cc: Conor Dooley, Andrew Jones, kvm, kvm-riscv, linux-riscv, linux-serial, linuxppc-dev, linux-kernel, Anup Patel We extend the existing RISC-V SBI earlycon support to use the new RISC-V SBI debug console extension. Signed-off-by: Anup Patel <apatel@ventanamicro.com> Reviewed-by: Andrew Jones <ajones@ventanamicro.com> --- drivers/tty/serial/Kconfig | 2 +- drivers/tty/serial/earlycon-riscv-sbi.c | 32 +++++++++++++++++++++---- 2 files changed, 29 insertions(+), 5 deletions(-) diff --git a/drivers/tty/serial/Kconfig b/drivers/tty/serial/Kconfig index bdc568a4ab66..cec46091a716 100644 --- a/drivers/tty/serial/Kconfig +++ b/drivers/tty/serial/Kconfig @@ -87,7 +87,7 @@ config SERIAL_EARLYCON_SEMIHOST config SERIAL_EARLYCON_RISCV_SBI bool "Early console using RISC-V SBI" - depends on RISCV_SBI_V01 + depends on RISCV_SBI select SERIAL_CORE select SERIAL_CORE_CONSOLE select SERIAL_EARLYCON diff --git a/drivers/tty/serial/earlycon-riscv-sbi.c b/drivers/tty/serial/earlycon-riscv-sbi.c index 27afb0b74ea7..c21cdef254e7 100644 --- a/drivers/tty/serial/earlycon-riscv-sbi.c +++ b/drivers/tty/serial/earlycon-riscv-sbi.c @@ -15,17 +15,41 @@ static void sbi_putc(struct uart_port *port, unsigned char c) sbi_console_putchar(c); } -static void sbi_console_write(struct console *con, - const char *s, unsigned n) +static void sbi_0_1_console_write(struct console *con, + const char *s, unsigned int n) { struct earlycon_device *dev = con->data; uart_console_write(&dev->port, s, n, sbi_putc); } +static void sbi_dbcn_console_write(struct console *con, + const char *s, unsigned int n) +{ + phys_addr_t pa = __pa(s); + + if (IS_ENABLED(CONFIG_32BIT)) + sbi_ecall(SBI_EXT_DBCN, SBI_EXT_DBCN_CONSOLE_WRITE, + n, lower_32_bits(pa), upper_32_bits(pa), 0, 0, 0); + else + sbi_ecall(SBI_EXT_DBCN, SBI_EXT_DBCN_CONSOLE_WRITE, + n, pa, 0, 0, 0, 0); +} + static int __init early_sbi_setup(struct earlycon_device *device, const char *opt) { - device->con->write = sbi_console_write; - return 0; + int ret = 0; + + if ((sbi_spec_version >= sbi_mk_version(2, 0)) && + (sbi_probe_extension(SBI_EXT_DBCN) > 0)) { + device->con->write = sbi_dbcn_console_write; + } else { + if (IS_ENABLED(CONFIG_RISCV_SBI_V01)) + device->con->write = sbi_0_1_console_write; + else + ret = -ENODEV; + } + + return ret; } EARLYCON_DECLARE(sbi, early_sbi_setup); -- 2.34.1 _______________________________________________ linux-riscv mailing list linux-riscv@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-riscv ^ permalink raw reply related [flat|nested] 96+ messages in thread
* [PATCH v3 7/9] tty/serial: Add RISC-V SBI debug console based earlycon 2023-10-20 7:21 ` Anup Patel (?) (?) @ 2023-10-21 16:45 ` Greg Kroah-Hartman -1 siblings, 0 replies; 96+ messages in thread From: Greg Kroah-Hartman @ 2023-10-21 16:45 UTC (permalink / raw) To: kvm-riscv On Fri, Oct 20, 2023 at 12:51:38PM +0530, Anup Patel wrote: > We extend the existing RISC-V SBI earlycon support to use the new > RISC-V SBI debug console extension. > > Signed-off-by: Anup Patel <apatel@ventanamicro.com> > Reviewed-by: Andrew Jones <ajones@ventanamicro.com> > --- > drivers/tty/serial/Kconfig | 2 +- > drivers/tty/serial/earlycon-riscv-sbi.c | 32 +++++++++++++++++++++---- > 2 files changed, 29 insertions(+), 5 deletions(-) > > diff --git a/drivers/tty/serial/Kconfig b/drivers/tty/serial/Kconfig > index bdc568a4ab66..cec46091a716 100644 > --- a/drivers/tty/serial/Kconfig > +++ b/drivers/tty/serial/Kconfig > @@ -87,7 +87,7 @@ config SERIAL_EARLYCON_SEMIHOST > > config SERIAL_EARLYCON_RISCV_SBI > bool "Early console using RISC-V SBI" > - depends on RISCV_SBI_V01 > + depends on RISCV_SBI > select SERIAL_CORE > select SERIAL_CORE_CONSOLE > select SERIAL_EARLYCON > diff --git a/drivers/tty/serial/earlycon-riscv-sbi.c b/drivers/tty/serial/earlycon-riscv-sbi.c > index 27afb0b74ea7..c21cdef254e7 100644 > --- a/drivers/tty/serial/earlycon-riscv-sbi.c > +++ b/drivers/tty/serial/earlycon-riscv-sbi.c > @@ -15,17 +15,41 @@ static void sbi_putc(struct uart_port *port, unsigned char c) > sbi_console_putchar(c); > } > > -static void sbi_console_write(struct console *con, > - const char *s, unsigned n) > +static void sbi_0_1_console_write(struct console *con, > + const char *s, unsigned int n) > { > struct earlycon_device *dev = con->data; > uart_console_write(&dev->port, s, n, sbi_putc); > } > > +static void sbi_dbcn_console_write(struct console *con, > + const char *s, unsigned int n) > +{ > + phys_addr_t pa = __pa(s); > + > + if (IS_ENABLED(CONFIG_32BIT)) > + sbi_ecall(SBI_EXT_DBCN, SBI_EXT_DBCN_CONSOLE_WRITE, > + n, lower_32_bits(pa), upper_32_bits(pa), 0, 0, 0); > + else > + sbi_ecall(SBI_EXT_DBCN, SBI_EXT_DBCN_CONSOLE_WRITE, > + n, pa, 0, 0, 0, 0); This is still a bit hard to follow, and I guarantee it will be a pain to maintain over time, trying to keep both calls in sync, right? Why not fix up sbi_ecall() to get this correct instead? It should be handling phys_addr_t values, not forcing you to do odd bit masking every single time you call it, right? That would make things much easier overall, and this patch simpler, as well as the next one. Oh wait, sbi_ecall() is crazy, and just a pass-through, so that's not going to work, you need a wrapper function for this mess to do that bit twiddeling for you instead of forcing you to do it each time, I guess that's what you are trying to do here, but ick, is it correct? thanks, greg k-h ^ permalink raw reply [flat|nested] 96+ messages in thread
* Re: [PATCH v3 7/9] tty/serial: Add RISC-V SBI debug console based earlycon @ 2023-10-21 16:45 ` Greg Kroah-Hartman 0 siblings, 0 replies; 96+ messages in thread From: Greg Kroah-Hartman @ 2023-10-21 16:45 UTC (permalink / raw) To: Anup Patel Cc: linux-serial, kvm, linuxppc-dev, Atish Patra, linux-kernel, Conor Dooley, Palmer Dabbelt, kvm-riscv, Paul Walmsley, Paolo Bonzini, linux-riscv, Jiri Slaby, Andrew Jones On Fri, Oct 20, 2023 at 12:51:38PM +0530, Anup Patel wrote: > We extend the existing RISC-V SBI earlycon support to use the new > RISC-V SBI debug console extension. > > Signed-off-by: Anup Patel <apatel@ventanamicro.com> > Reviewed-by: Andrew Jones <ajones@ventanamicro.com> > --- > drivers/tty/serial/Kconfig | 2 +- > drivers/tty/serial/earlycon-riscv-sbi.c | 32 +++++++++++++++++++++---- > 2 files changed, 29 insertions(+), 5 deletions(-) > > diff --git a/drivers/tty/serial/Kconfig b/drivers/tty/serial/Kconfig > index bdc568a4ab66..cec46091a716 100644 > --- a/drivers/tty/serial/Kconfig > +++ b/drivers/tty/serial/Kconfig > @@ -87,7 +87,7 @@ config SERIAL_EARLYCON_SEMIHOST > > config SERIAL_EARLYCON_RISCV_SBI > bool "Early console using RISC-V SBI" > - depends on RISCV_SBI_V01 > + depends on RISCV_SBI > select SERIAL_CORE > select SERIAL_CORE_CONSOLE > select SERIAL_EARLYCON > diff --git a/drivers/tty/serial/earlycon-riscv-sbi.c b/drivers/tty/serial/earlycon-riscv-sbi.c > index 27afb0b74ea7..c21cdef254e7 100644 > --- a/drivers/tty/serial/earlycon-riscv-sbi.c > +++ b/drivers/tty/serial/earlycon-riscv-sbi.c > @@ -15,17 +15,41 @@ static void sbi_putc(struct uart_port *port, unsigned char c) > sbi_console_putchar(c); > } > > -static void sbi_console_write(struct console *con, > - const char *s, unsigned n) > +static void sbi_0_1_console_write(struct console *con, > + const char *s, unsigned int n) > { > struct earlycon_device *dev = con->data; > uart_console_write(&dev->port, s, n, sbi_putc); > } > > +static void sbi_dbcn_console_write(struct console *con, > + const char *s, unsigned int n) > +{ > + phys_addr_t pa = __pa(s); > + > + if (IS_ENABLED(CONFIG_32BIT)) > + sbi_ecall(SBI_EXT_DBCN, SBI_EXT_DBCN_CONSOLE_WRITE, > + n, lower_32_bits(pa), upper_32_bits(pa), 0, 0, 0); > + else > + sbi_ecall(SBI_EXT_DBCN, SBI_EXT_DBCN_CONSOLE_WRITE, > + n, pa, 0, 0, 0, 0); This is still a bit hard to follow, and I guarantee it will be a pain to maintain over time, trying to keep both calls in sync, right? Why not fix up sbi_ecall() to get this correct instead? It should be handling phys_addr_t values, not forcing you to do odd bit masking every single time you call it, right? That would make things much easier overall, and this patch simpler, as well as the next one. Oh wait, sbi_ecall() is crazy, and just a pass-through, so that's not going to work, you need a wrapper function for this mess to do that bit twiddeling for you instead of forcing you to do it each time, I guess that's what you are trying to do here, but ick, is it correct? thanks, greg k-h ^ permalink raw reply [flat|nested] 96+ messages in thread
* Re: [PATCH v3 7/9] tty/serial: Add RISC-V SBI debug console based earlycon @ 2023-10-21 16:45 ` Greg Kroah-Hartman 0 siblings, 0 replies; 96+ messages in thread From: Greg Kroah-Hartman @ 2023-10-21 16:45 UTC (permalink / raw) To: Anup Patel Cc: Paolo Bonzini, Atish Patra, Palmer Dabbelt, Paul Walmsley, Jiri Slaby, Conor Dooley, Andrew Jones, kvm, kvm-riscv, linux-riscv, linux-serial, linuxppc-dev, linux-kernel On Fri, Oct 20, 2023 at 12:51:38PM +0530, Anup Patel wrote: > We extend the existing RISC-V SBI earlycon support to use the new > RISC-V SBI debug console extension. > > Signed-off-by: Anup Patel <apatel@ventanamicro.com> > Reviewed-by: Andrew Jones <ajones@ventanamicro.com> > --- > drivers/tty/serial/Kconfig | 2 +- > drivers/tty/serial/earlycon-riscv-sbi.c | 32 +++++++++++++++++++++---- > 2 files changed, 29 insertions(+), 5 deletions(-) > > diff --git a/drivers/tty/serial/Kconfig b/drivers/tty/serial/Kconfig > index bdc568a4ab66..cec46091a716 100644 > --- a/drivers/tty/serial/Kconfig > +++ b/drivers/tty/serial/Kconfig > @@ -87,7 +87,7 @@ config SERIAL_EARLYCON_SEMIHOST > > config SERIAL_EARLYCON_RISCV_SBI > bool "Early console using RISC-V SBI" > - depends on RISCV_SBI_V01 > + depends on RISCV_SBI > select SERIAL_CORE > select SERIAL_CORE_CONSOLE > select SERIAL_EARLYCON > diff --git a/drivers/tty/serial/earlycon-riscv-sbi.c b/drivers/tty/serial/earlycon-riscv-sbi.c > index 27afb0b74ea7..c21cdef254e7 100644 > --- a/drivers/tty/serial/earlycon-riscv-sbi.c > +++ b/drivers/tty/serial/earlycon-riscv-sbi.c > @@ -15,17 +15,41 @@ static void sbi_putc(struct uart_port *port, unsigned char c) > sbi_console_putchar(c); > } > > -static void sbi_console_write(struct console *con, > - const char *s, unsigned n) > +static void sbi_0_1_console_write(struct console *con, > + const char *s, unsigned int n) > { > struct earlycon_device *dev = con->data; > uart_console_write(&dev->port, s, n, sbi_putc); > } > > +static void sbi_dbcn_console_write(struct console *con, > + const char *s, unsigned int n) > +{ > + phys_addr_t pa = __pa(s); > + > + if (IS_ENABLED(CONFIG_32BIT)) > + sbi_ecall(SBI_EXT_DBCN, SBI_EXT_DBCN_CONSOLE_WRITE, > + n, lower_32_bits(pa), upper_32_bits(pa), 0, 0, 0); > + else > + sbi_ecall(SBI_EXT_DBCN, SBI_EXT_DBCN_CONSOLE_WRITE, > + n, pa, 0, 0, 0, 0); This is still a bit hard to follow, and I guarantee it will be a pain to maintain over time, trying to keep both calls in sync, right? Why not fix up sbi_ecall() to get this correct instead? It should be handling phys_addr_t values, not forcing you to do odd bit masking every single time you call it, right? That would make things much easier overall, and this patch simpler, as well as the next one. Oh wait, sbi_ecall() is crazy, and just a pass-through, so that's not going to work, you need a wrapper function for this mess to do that bit twiddeling for you instead of forcing you to do it each time, I guess that's what you are trying to do here, but ick, is it correct? thanks, greg k-h ^ permalink raw reply [flat|nested] 96+ messages in thread
* Re: [PATCH v3 7/9] tty/serial: Add RISC-V SBI debug console based earlycon @ 2023-10-21 16:45 ` Greg Kroah-Hartman 0 siblings, 0 replies; 96+ messages in thread From: Greg Kroah-Hartman @ 2023-10-21 16:45 UTC (permalink / raw) To: Anup Patel Cc: Paolo Bonzini, Atish Patra, Palmer Dabbelt, Paul Walmsley, Jiri Slaby, Conor Dooley, Andrew Jones, kvm, kvm-riscv, linux-riscv, linux-serial, linuxppc-dev, linux-kernel On Fri, Oct 20, 2023 at 12:51:38PM +0530, Anup Patel wrote: > We extend the existing RISC-V SBI earlycon support to use the new > RISC-V SBI debug console extension. > > Signed-off-by: Anup Patel <apatel@ventanamicro.com> > Reviewed-by: Andrew Jones <ajones@ventanamicro.com> > --- > drivers/tty/serial/Kconfig | 2 +- > drivers/tty/serial/earlycon-riscv-sbi.c | 32 +++++++++++++++++++++---- > 2 files changed, 29 insertions(+), 5 deletions(-) > > diff --git a/drivers/tty/serial/Kconfig b/drivers/tty/serial/Kconfig > index bdc568a4ab66..cec46091a716 100644 > --- a/drivers/tty/serial/Kconfig > +++ b/drivers/tty/serial/Kconfig > @@ -87,7 +87,7 @@ config SERIAL_EARLYCON_SEMIHOST > > config SERIAL_EARLYCON_RISCV_SBI > bool "Early console using RISC-V SBI" > - depends on RISCV_SBI_V01 > + depends on RISCV_SBI > select SERIAL_CORE > select SERIAL_CORE_CONSOLE > select SERIAL_EARLYCON > diff --git a/drivers/tty/serial/earlycon-riscv-sbi.c b/drivers/tty/serial/earlycon-riscv-sbi.c > index 27afb0b74ea7..c21cdef254e7 100644 > --- a/drivers/tty/serial/earlycon-riscv-sbi.c > +++ b/drivers/tty/serial/earlycon-riscv-sbi.c > @@ -15,17 +15,41 @@ static void sbi_putc(struct uart_port *port, unsigned char c) > sbi_console_putchar(c); > } > > -static void sbi_console_write(struct console *con, > - const char *s, unsigned n) > +static void sbi_0_1_console_write(struct console *con, > + const char *s, unsigned int n) > { > struct earlycon_device *dev = con->data; > uart_console_write(&dev->port, s, n, sbi_putc); > } > > +static void sbi_dbcn_console_write(struct console *con, > + const char *s, unsigned int n) > +{ > + phys_addr_t pa = __pa(s); > + > + if (IS_ENABLED(CONFIG_32BIT)) > + sbi_ecall(SBI_EXT_DBCN, SBI_EXT_DBCN_CONSOLE_WRITE, > + n, lower_32_bits(pa), upper_32_bits(pa), 0, 0, 0); > + else > + sbi_ecall(SBI_EXT_DBCN, SBI_EXT_DBCN_CONSOLE_WRITE, > + n, pa, 0, 0, 0, 0); This is still a bit hard to follow, and I guarantee it will be a pain to maintain over time, trying to keep both calls in sync, right? Why not fix up sbi_ecall() to get this correct instead? It should be handling phys_addr_t values, not forcing you to do odd bit masking every single time you call it, right? That would make things much easier overall, and this patch simpler, as well as the next one. Oh wait, sbi_ecall() is crazy, and just a pass-through, so that's not going to work, you need a wrapper function for this mess to do that bit twiddeling for you instead of forcing you to do it each time, I guess that's what you are trying to do here, but ick, is it correct? thanks, greg k-h _______________________________________________ linux-riscv mailing list linux-riscv@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-riscv ^ permalink raw reply [flat|nested] 96+ messages in thread
* [PATCH v3 7/9] tty/serial: Add RISC-V SBI debug console based earlycon 2023-10-21 16:45 ` Greg Kroah-Hartman (?) (?) @ 2023-11-17 13:10 ` Anup Patel -1 siblings, 0 replies; 96+ messages in thread From: Anup Patel @ 2023-11-17 13:10 UTC (permalink / raw) To: kvm-riscv On Sat, Oct 21, 2023 at 10:16?PM Greg Kroah-Hartman <gregkh@linuxfoundation.org> wrote: > > On Fri, Oct 20, 2023 at 12:51:38PM +0530, Anup Patel wrote: > > We extend the existing RISC-V SBI earlycon support to use the new > > RISC-V SBI debug console extension. > > > > Signed-off-by: Anup Patel <apatel@ventanamicro.com> > > Reviewed-by: Andrew Jones <ajones@ventanamicro.com> > > --- > > drivers/tty/serial/Kconfig | 2 +- > > drivers/tty/serial/earlycon-riscv-sbi.c | 32 +++++++++++++++++++++---- > > 2 files changed, 29 insertions(+), 5 deletions(-) > > > > diff --git a/drivers/tty/serial/Kconfig b/drivers/tty/serial/Kconfig > > index bdc568a4ab66..cec46091a716 100644 > > --- a/drivers/tty/serial/Kconfig > > +++ b/drivers/tty/serial/Kconfig > > @@ -87,7 +87,7 @@ config SERIAL_EARLYCON_SEMIHOST > > > > config SERIAL_EARLYCON_RISCV_SBI > > bool "Early console using RISC-V SBI" > > - depends on RISCV_SBI_V01 > > + depends on RISCV_SBI > > select SERIAL_CORE > > select SERIAL_CORE_CONSOLE > > select SERIAL_EARLYCON > > diff --git a/drivers/tty/serial/earlycon-riscv-sbi.c b/drivers/tty/serial/earlycon-riscv-sbi.c > > index 27afb0b74ea7..c21cdef254e7 100644 > > --- a/drivers/tty/serial/earlycon-riscv-sbi.c > > +++ b/drivers/tty/serial/earlycon-riscv-sbi.c > > @@ -15,17 +15,41 @@ static void sbi_putc(struct uart_port *port, unsigned char c) > > sbi_console_putchar(c); > > } > > > > -static void sbi_console_write(struct console *con, > > - const char *s, unsigned n) > > +static void sbi_0_1_console_write(struct console *con, > > + const char *s, unsigned int n) > > { > > struct earlycon_device *dev = con->data; > > uart_console_write(&dev->port, s, n, sbi_putc); > > } > > > > +static void sbi_dbcn_console_write(struct console *con, > > + const char *s, unsigned int n) > > +{ > > + phys_addr_t pa = __pa(s); > > + > > + if (IS_ENABLED(CONFIG_32BIT)) > > + sbi_ecall(SBI_EXT_DBCN, SBI_EXT_DBCN_CONSOLE_WRITE, > > + n, lower_32_bits(pa), upper_32_bits(pa), 0, 0, 0); > > + else > > + sbi_ecall(SBI_EXT_DBCN, SBI_EXT_DBCN_CONSOLE_WRITE, > > + n, pa, 0, 0, 0, 0); > > This is still a bit hard to follow, and I guarantee it will be a pain to > maintain over time, trying to keep both calls in sync, right? > > Why not fix up sbi_ecall() to get this correct instead? It should be > handling phys_addr_t values, not forcing you to do odd bit masking every > single time you call it, right? That would make things much easier > overall, and this patch simpler, as well as the next one. On RV32 systems, the physical address can be 34bits wide hence the on RV32 we have to pass physical address as two parameters whereas on RV64 entier physical address can be passed as single parameter. > > Oh wait, sbi_ecall() is crazy, and just a pass-through, so that's not > going to work, you need a wrapper function for this mess to do that bit > twiddeling for you instead of forcing you to do it each time, I guess > that's what you are trying to do here, but ick, is it correct? Yes, it is better to have a wrapper function to hide the differences of RV32 and RV64 systems. I will update. > > thanks, > > greg k-h > > -- > kvm-riscv mailing list > kvm-riscv at lists.infradead.org > http://lists.infradead.org/mailman/listinfo/kvm-riscv Regards, Anup ^ permalink raw reply [flat|nested] 96+ messages in thread
* Re: [PATCH v3 7/9] tty/serial: Add RISC-V SBI debug console based earlycon @ 2023-11-17 13:10 ` Anup Patel 0 siblings, 0 replies; 96+ messages in thread From: Anup Patel @ 2023-11-17 13:10 UTC (permalink / raw) To: Greg Kroah-Hartman Cc: Anup Patel, linux-serial, kvm, linuxppc-dev, Atish Patra, linux-kernel, Conor Dooley, Palmer Dabbelt, kvm-riscv, Paul Walmsley, Paolo Bonzini, linux-riscv, Jiri Slaby, Andrew Jones On Sat, Oct 21, 2023 at 10:16 PM Greg Kroah-Hartman <gregkh@linuxfoundation.org> wrote: > > On Fri, Oct 20, 2023 at 12:51:38PM +0530, Anup Patel wrote: > > We extend the existing RISC-V SBI earlycon support to use the new > > RISC-V SBI debug console extension. > > > > Signed-off-by: Anup Patel <apatel@ventanamicro.com> > > Reviewed-by: Andrew Jones <ajones@ventanamicro.com> > > --- > > drivers/tty/serial/Kconfig | 2 +- > > drivers/tty/serial/earlycon-riscv-sbi.c | 32 +++++++++++++++++++++---- > > 2 files changed, 29 insertions(+), 5 deletions(-) > > > > diff --git a/drivers/tty/serial/Kconfig b/drivers/tty/serial/Kconfig > > index bdc568a4ab66..cec46091a716 100644 > > --- a/drivers/tty/serial/Kconfig > > +++ b/drivers/tty/serial/Kconfig > > @@ -87,7 +87,7 @@ config SERIAL_EARLYCON_SEMIHOST > > > > config SERIAL_EARLYCON_RISCV_SBI > > bool "Early console using RISC-V SBI" > > - depends on RISCV_SBI_V01 > > + depends on RISCV_SBI > > select SERIAL_CORE > > select SERIAL_CORE_CONSOLE > > select SERIAL_EARLYCON > > diff --git a/drivers/tty/serial/earlycon-riscv-sbi.c b/drivers/tty/serial/earlycon-riscv-sbi.c > > index 27afb0b74ea7..c21cdef254e7 100644 > > --- a/drivers/tty/serial/earlycon-riscv-sbi.c > > +++ b/drivers/tty/serial/earlycon-riscv-sbi.c > > @@ -15,17 +15,41 @@ static void sbi_putc(struct uart_port *port, unsigned char c) > > sbi_console_putchar(c); > > } > > > > -static void sbi_console_write(struct console *con, > > - const char *s, unsigned n) > > +static void sbi_0_1_console_write(struct console *con, > > + const char *s, unsigned int n) > > { > > struct earlycon_device *dev = con->data; > > uart_console_write(&dev->port, s, n, sbi_putc); > > } > > > > +static void sbi_dbcn_console_write(struct console *con, > > + const char *s, unsigned int n) > > +{ > > + phys_addr_t pa = __pa(s); > > + > > + if (IS_ENABLED(CONFIG_32BIT)) > > + sbi_ecall(SBI_EXT_DBCN, SBI_EXT_DBCN_CONSOLE_WRITE, > > + n, lower_32_bits(pa), upper_32_bits(pa), 0, 0, 0); > > + else > > + sbi_ecall(SBI_EXT_DBCN, SBI_EXT_DBCN_CONSOLE_WRITE, > > + n, pa, 0, 0, 0, 0); > > This is still a bit hard to follow, and I guarantee it will be a pain to > maintain over time, trying to keep both calls in sync, right? > > Why not fix up sbi_ecall() to get this correct instead? It should be > handling phys_addr_t values, not forcing you to do odd bit masking every > single time you call it, right? That would make things much easier > overall, and this patch simpler, as well as the next one. On RV32 systems, the physical address can be 34bits wide hence the on RV32 we have to pass physical address as two parameters whereas on RV64 entier physical address can be passed as single parameter. > > Oh wait, sbi_ecall() is crazy, and just a pass-through, so that's not > going to work, you need a wrapper function for this mess to do that bit > twiddeling for you instead of forcing you to do it each time, I guess > that's what you are trying to do here, but ick, is it correct? Yes, it is better to have a wrapper function to hide the differences of RV32 and RV64 systems. I will update. > > thanks, > > greg k-h > > -- > kvm-riscv mailing list > kvm-riscv@lists.infradead.org > http://lists.infradead.org/mailman/listinfo/kvm-riscv Regards, Anup ^ permalink raw reply [flat|nested] 96+ messages in thread
* Re: [PATCH v3 7/9] tty/serial: Add RISC-V SBI debug console based earlycon @ 2023-11-17 13:10 ` Anup Patel 0 siblings, 0 replies; 96+ messages in thread From: Anup Patel @ 2023-11-17 13:10 UTC (permalink / raw) To: Greg Kroah-Hartman Cc: Anup Patel, Paolo Bonzini, Atish Patra, Palmer Dabbelt, Paul Walmsley, Jiri Slaby, Conor Dooley, Andrew Jones, kvm, kvm-riscv, linux-riscv, linux-serial, linuxppc-dev, linux-kernel On Sat, Oct 21, 2023 at 10:16 PM Greg Kroah-Hartman <gregkh@linuxfoundation.org> wrote: > > On Fri, Oct 20, 2023 at 12:51:38PM +0530, Anup Patel wrote: > > We extend the existing RISC-V SBI earlycon support to use the new > > RISC-V SBI debug console extension. > > > > Signed-off-by: Anup Patel <apatel@ventanamicro.com> > > Reviewed-by: Andrew Jones <ajones@ventanamicro.com> > > --- > > drivers/tty/serial/Kconfig | 2 +- > > drivers/tty/serial/earlycon-riscv-sbi.c | 32 +++++++++++++++++++++---- > > 2 files changed, 29 insertions(+), 5 deletions(-) > > > > diff --git a/drivers/tty/serial/Kconfig b/drivers/tty/serial/Kconfig > > index bdc568a4ab66..cec46091a716 100644 > > --- a/drivers/tty/serial/Kconfig > > +++ b/drivers/tty/serial/Kconfig > > @@ -87,7 +87,7 @@ config SERIAL_EARLYCON_SEMIHOST > > > > config SERIAL_EARLYCON_RISCV_SBI > > bool "Early console using RISC-V SBI" > > - depends on RISCV_SBI_V01 > > + depends on RISCV_SBI > > select SERIAL_CORE > > select SERIAL_CORE_CONSOLE > > select SERIAL_EARLYCON > > diff --git a/drivers/tty/serial/earlycon-riscv-sbi.c b/drivers/tty/serial/earlycon-riscv-sbi.c > > index 27afb0b74ea7..c21cdef254e7 100644 > > --- a/drivers/tty/serial/earlycon-riscv-sbi.c > > +++ b/drivers/tty/serial/earlycon-riscv-sbi.c > > @@ -15,17 +15,41 @@ static void sbi_putc(struct uart_port *port, unsigned char c) > > sbi_console_putchar(c); > > } > > > > -static void sbi_console_write(struct console *con, > > - const char *s, unsigned n) > > +static void sbi_0_1_console_write(struct console *con, > > + const char *s, unsigned int n) > > { > > struct earlycon_device *dev = con->data; > > uart_console_write(&dev->port, s, n, sbi_putc); > > } > > > > +static void sbi_dbcn_console_write(struct console *con, > > + const char *s, unsigned int n) > > +{ > > + phys_addr_t pa = __pa(s); > > + > > + if (IS_ENABLED(CONFIG_32BIT)) > > + sbi_ecall(SBI_EXT_DBCN, SBI_EXT_DBCN_CONSOLE_WRITE, > > + n, lower_32_bits(pa), upper_32_bits(pa), 0, 0, 0); > > + else > > + sbi_ecall(SBI_EXT_DBCN, SBI_EXT_DBCN_CONSOLE_WRITE, > > + n, pa, 0, 0, 0, 0); > > This is still a bit hard to follow, and I guarantee it will be a pain to > maintain over time, trying to keep both calls in sync, right? > > Why not fix up sbi_ecall() to get this correct instead? It should be > handling phys_addr_t values, not forcing you to do odd bit masking every > single time you call it, right? That would make things much easier > overall, and this patch simpler, as well as the next one. On RV32 systems, the physical address can be 34bits wide hence the on RV32 we have to pass physical address as two parameters whereas on RV64 entier physical address can be passed as single parameter. > > Oh wait, sbi_ecall() is crazy, and just a pass-through, so that's not > going to work, you need a wrapper function for this mess to do that bit > twiddeling for you instead of forcing you to do it each time, I guess > that's what you are trying to do here, but ick, is it correct? Yes, it is better to have a wrapper function to hide the differences of RV32 and RV64 systems. I will update. > > thanks, > > greg k-h > > -- > kvm-riscv mailing list > kvm-riscv@lists.infradead.org > http://lists.infradead.org/mailman/listinfo/kvm-riscv Regards, Anup ^ permalink raw reply [flat|nested] 96+ messages in thread
* Re: [PATCH v3 7/9] tty/serial: Add RISC-V SBI debug console based earlycon @ 2023-11-17 13:10 ` Anup Patel 0 siblings, 0 replies; 96+ messages in thread From: Anup Patel @ 2023-11-17 13:10 UTC (permalink / raw) To: Greg Kroah-Hartman Cc: Anup Patel, Paolo Bonzini, Atish Patra, Palmer Dabbelt, Paul Walmsley, Jiri Slaby, Conor Dooley, Andrew Jones, kvm, kvm-riscv, linux-riscv, linux-serial, linuxppc-dev, linux-kernel On Sat, Oct 21, 2023 at 10:16 PM Greg Kroah-Hartman <gregkh@linuxfoundation.org> wrote: > > On Fri, Oct 20, 2023 at 12:51:38PM +0530, Anup Patel wrote: > > We extend the existing RISC-V SBI earlycon support to use the new > > RISC-V SBI debug console extension. > > > > Signed-off-by: Anup Patel <apatel@ventanamicro.com> > > Reviewed-by: Andrew Jones <ajones@ventanamicro.com> > > --- > > drivers/tty/serial/Kconfig | 2 +- > > drivers/tty/serial/earlycon-riscv-sbi.c | 32 +++++++++++++++++++++---- > > 2 files changed, 29 insertions(+), 5 deletions(-) > > > > diff --git a/drivers/tty/serial/Kconfig b/drivers/tty/serial/Kconfig > > index bdc568a4ab66..cec46091a716 100644 > > --- a/drivers/tty/serial/Kconfig > > +++ b/drivers/tty/serial/Kconfig > > @@ -87,7 +87,7 @@ config SERIAL_EARLYCON_SEMIHOST > > > > config SERIAL_EARLYCON_RISCV_SBI > > bool "Early console using RISC-V SBI" > > - depends on RISCV_SBI_V01 > > + depends on RISCV_SBI > > select SERIAL_CORE > > select SERIAL_CORE_CONSOLE > > select SERIAL_EARLYCON > > diff --git a/drivers/tty/serial/earlycon-riscv-sbi.c b/drivers/tty/serial/earlycon-riscv-sbi.c > > index 27afb0b74ea7..c21cdef254e7 100644 > > --- a/drivers/tty/serial/earlycon-riscv-sbi.c > > +++ b/drivers/tty/serial/earlycon-riscv-sbi.c > > @@ -15,17 +15,41 @@ static void sbi_putc(struct uart_port *port, unsigned char c) > > sbi_console_putchar(c); > > } > > > > -static void sbi_console_write(struct console *con, > > - const char *s, unsigned n) > > +static void sbi_0_1_console_write(struct console *con, > > + const char *s, unsigned int n) > > { > > struct earlycon_device *dev = con->data; > > uart_console_write(&dev->port, s, n, sbi_putc); > > } > > > > +static void sbi_dbcn_console_write(struct console *con, > > + const char *s, unsigned int n) > > +{ > > + phys_addr_t pa = __pa(s); > > + > > + if (IS_ENABLED(CONFIG_32BIT)) > > + sbi_ecall(SBI_EXT_DBCN, SBI_EXT_DBCN_CONSOLE_WRITE, > > + n, lower_32_bits(pa), upper_32_bits(pa), 0, 0, 0); > > + else > > + sbi_ecall(SBI_EXT_DBCN, SBI_EXT_DBCN_CONSOLE_WRITE, > > + n, pa, 0, 0, 0, 0); > > This is still a bit hard to follow, and I guarantee it will be a pain to > maintain over time, trying to keep both calls in sync, right? > > Why not fix up sbi_ecall() to get this correct instead? It should be > handling phys_addr_t values, not forcing you to do odd bit masking every > single time you call it, right? That would make things much easier > overall, and this patch simpler, as well as the next one. On RV32 systems, the physical address can be 34bits wide hence the on RV32 we have to pass physical address as two parameters whereas on RV64 entier physical address can be passed as single parameter. > > Oh wait, sbi_ecall() is crazy, and just a pass-through, so that's not > going to work, you need a wrapper function for this mess to do that bit > twiddeling for you instead of forcing you to do it each time, I guess > that's what you are trying to do here, but ick, is it correct? Yes, it is better to have a wrapper function to hide the differences of RV32 and RV64 systems. I will update. > > thanks, > > greg k-h > > -- > kvm-riscv mailing list > kvm-riscv@lists.infradead.org > http://lists.infradead.org/mailman/listinfo/kvm-riscv Regards, Anup _______________________________________________ linux-riscv mailing list linux-riscv@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-riscv ^ permalink raw reply [flat|nested] 96+ messages in thread
* [PATCH v3 8/9] tty: Add SBI debug console support to HVC SBI driver 2023-10-20 7:21 ` Anup Patel (?) (?) @ 2023-10-20 7:21 ` Anup Patel -1 siblings, 0 replies; 96+ messages in thread From: Anup Patel @ 2023-10-20 7:21 UTC (permalink / raw) To: kvm-riscv From: Atish Patra <atishp@rivosinc.com> 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 <atishp@rivosinc.com> Signed-off-by: Anup Patel <apatel@ventanamicro.com> --- drivers/tty/hvc/Kconfig | 2 +- drivers/tty/hvc/hvc_riscv_sbi.c | 82 ++++++++++++++++++++++++++++++--- 2 files changed, 76 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..56da1a4b5aca 100644 --- a/drivers/tty/hvc/hvc_riscv_sbi.c +++ b/drivers/tty/hvc/hvc_riscv_sbi.c @@ -39,21 +39,89 @@ 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)); + phys_addr_t pa; + struct sbiret ret; + + if (is_vmalloc_addr(buf)) { + pa = page_to_phys(vmalloc_to_page(buf)) + offset_in_page(buf); + if (PAGE_SIZE < (offset_in_page(buf) + count)) + count = PAGE_SIZE - offset_in_page(buf); + } else { + pa = __pa(buf); + } + + if (IS_ENABLED(CONFIG_32BIT)) + ret = sbi_ecall(SBI_EXT_DBCN, SBI_EXT_DBCN_CONSOLE_WRITE, + count, lower_32_bits(pa), upper_32_bits(pa), + 0, 0, 0); + else + ret = sbi_ecall(SBI_EXT_DBCN, SBI_EXT_DBCN_CONSOLE_WRITE, + count, pa, 0, 0, 0, 0); + if (ret.error) + return 0; + + return 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); + phys_addr_t pa; + struct sbiret ret; + + if (is_vmalloc_addr(buf)) { + pa = page_to_phys(vmalloc_to_page(buf)) + offset_in_page(buf); + if (PAGE_SIZE < (offset_in_page(buf) + count)) + count = PAGE_SIZE - offset_in_page(buf); + } else { + pa = __pa(buf); + } + + if (IS_ENABLED(CONFIG_32BIT)) + ret = sbi_ecall(SBI_EXT_DBCN, SBI_EXT_DBCN_CONSOLE_READ, + count, lower_32_bits(pa), upper_32_bits(pa), + 0, 0, 0); + else + ret = sbi_ecall(SBI_EXT_DBCN, SBI_EXT_DBCN_CONSOLE_READ, + count, pa, 0, 0, 0, 0); + if (ret.error) + return 0; + + return ret.value; +} + +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_spec_version >= sbi_mk_version(2, 0)) && + (sbi_probe_extension(SBI_EXT_DBCN) > 0)) { + err = PTR_ERR_OR_ZERO(hvc_alloc(0, 0, &hvc_sbi_dbcn_ops, 16)); + 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, 16)); + 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 ^ permalink raw reply related [flat|nested] 96+ messages in thread
* [PATCH v3 8/9] tty: Add SBI debug console support to HVC SBI driver @ 2023-10-20 7:21 ` Anup Patel 0 siblings, 0 replies; 96+ messages in thread From: Anup Patel @ 2023-10-20 7:21 UTC (permalink / raw) To: Paolo Bonzini, Atish Patra, Palmer Dabbelt, Paul Walmsley, Greg Kroah-Hartman, Jiri Slaby Cc: Anup Patel, linux-serial, kvm, Atish Patra, linux-kernel, Conor Dooley, kvm-riscv, linux-riscv, linuxppc-dev, Andrew Jones From: Atish Patra <atishp@rivosinc.com> 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 <atishp@rivosinc.com> Signed-off-by: Anup Patel <apatel@ventanamicro.com> --- drivers/tty/hvc/Kconfig | 2 +- drivers/tty/hvc/hvc_riscv_sbi.c | 82 ++++++++++++++++++++++++++++++--- 2 files changed, 76 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..56da1a4b5aca 100644 --- a/drivers/tty/hvc/hvc_riscv_sbi.c +++ b/drivers/tty/hvc/hvc_riscv_sbi.c @@ -39,21 +39,89 @@ 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)); + phys_addr_t pa; + struct sbiret ret; + + if (is_vmalloc_addr(buf)) { + pa = page_to_phys(vmalloc_to_page(buf)) + offset_in_page(buf); + if (PAGE_SIZE < (offset_in_page(buf) + count)) + count = PAGE_SIZE - offset_in_page(buf); + } else { + pa = __pa(buf); + } + + if (IS_ENABLED(CONFIG_32BIT)) + ret = sbi_ecall(SBI_EXT_DBCN, SBI_EXT_DBCN_CONSOLE_WRITE, + count, lower_32_bits(pa), upper_32_bits(pa), + 0, 0, 0); + else + ret = sbi_ecall(SBI_EXT_DBCN, SBI_EXT_DBCN_CONSOLE_WRITE, + count, pa, 0, 0, 0, 0); + if (ret.error) + return 0; + + return 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); + phys_addr_t pa; + struct sbiret ret; + + if (is_vmalloc_addr(buf)) { + pa = page_to_phys(vmalloc_to_page(buf)) + offset_in_page(buf); + if (PAGE_SIZE < (offset_in_page(buf) + count)) + count = PAGE_SIZE - offset_in_page(buf); + } else { + pa = __pa(buf); + } + + if (IS_ENABLED(CONFIG_32BIT)) + ret = sbi_ecall(SBI_EXT_DBCN, SBI_EXT_DBCN_CONSOLE_READ, + count, lower_32_bits(pa), upper_32_bits(pa), + 0, 0, 0); + else + ret = sbi_ecall(SBI_EXT_DBCN, SBI_EXT_DBCN_CONSOLE_READ, + count, pa, 0, 0, 0, 0); + if (ret.error) + return 0; + + return ret.value; +} + +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_spec_version >= sbi_mk_version(2, 0)) && + (sbi_probe_extension(SBI_EXT_DBCN) > 0)) { + err = PTR_ERR_OR_ZERO(hvc_alloc(0, 0, &hvc_sbi_dbcn_ops, 16)); + 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, 16)); + 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 ^ permalink raw reply related [flat|nested] 96+ messages in thread
* [PATCH v3 8/9] tty: Add SBI debug console support to HVC SBI driver @ 2023-10-20 7:21 ` Anup Patel 0 siblings, 0 replies; 96+ messages in thread From: Anup Patel @ 2023-10-20 7:21 UTC (permalink / raw) To: Paolo Bonzini, Atish Patra, Palmer Dabbelt, Paul Walmsley, Greg Kroah-Hartman, Jiri Slaby Cc: Conor Dooley, Andrew Jones, kvm, kvm-riscv, linux-riscv, linux-serial, linuxppc-dev, linux-kernel, Atish Patra, Anup Patel From: Atish Patra <atishp@rivosinc.com> 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 <atishp@rivosinc.com> Signed-off-by: Anup Patel <apatel@ventanamicro.com> --- drivers/tty/hvc/Kconfig | 2 +- drivers/tty/hvc/hvc_riscv_sbi.c | 82 ++++++++++++++++++++++++++++++--- 2 files changed, 76 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..56da1a4b5aca 100644 --- a/drivers/tty/hvc/hvc_riscv_sbi.c +++ b/drivers/tty/hvc/hvc_riscv_sbi.c @@ -39,21 +39,89 @@ 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)); + phys_addr_t pa; + struct sbiret ret; + + if (is_vmalloc_addr(buf)) { + pa = page_to_phys(vmalloc_to_page(buf)) + offset_in_page(buf); + if (PAGE_SIZE < (offset_in_page(buf) + count)) + count = PAGE_SIZE - offset_in_page(buf); + } else { + pa = __pa(buf); + } + + if (IS_ENABLED(CONFIG_32BIT)) + ret = sbi_ecall(SBI_EXT_DBCN, SBI_EXT_DBCN_CONSOLE_WRITE, + count, lower_32_bits(pa), upper_32_bits(pa), + 0, 0, 0); + else + ret = sbi_ecall(SBI_EXT_DBCN, SBI_EXT_DBCN_CONSOLE_WRITE, + count, pa, 0, 0, 0, 0); + if (ret.error) + return 0; + + return 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); + phys_addr_t pa; + struct sbiret ret; + + if (is_vmalloc_addr(buf)) { + pa = page_to_phys(vmalloc_to_page(buf)) + offset_in_page(buf); + if (PAGE_SIZE < (offset_in_page(buf) + count)) + count = PAGE_SIZE - offset_in_page(buf); + } else { + pa = __pa(buf); + } + + if (IS_ENABLED(CONFIG_32BIT)) + ret = sbi_ecall(SBI_EXT_DBCN, SBI_EXT_DBCN_CONSOLE_READ, + count, lower_32_bits(pa), upper_32_bits(pa), + 0, 0, 0); + else + ret = sbi_ecall(SBI_EXT_DBCN, SBI_EXT_DBCN_CONSOLE_READ, + count, pa, 0, 0, 0, 0); + if (ret.error) + return 0; + + return ret.value; +} + +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_spec_version >= sbi_mk_version(2, 0)) && + (sbi_probe_extension(SBI_EXT_DBCN) > 0)) { + err = PTR_ERR_OR_ZERO(hvc_alloc(0, 0, &hvc_sbi_dbcn_ops, 16)); + 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, 16)); + 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 ^ permalink raw reply related [flat|nested] 96+ messages in thread
* [PATCH v3 8/9] tty: Add SBI debug console support to HVC SBI driver @ 2023-10-20 7:21 ` Anup Patel 0 siblings, 0 replies; 96+ messages in thread From: Anup Patel @ 2023-10-20 7:21 UTC (permalink / raw) To: Paolo Bonzini, Atish Patra, Palmer Dabbelt, Paul Walmsley, Greg Kroah-Hartman, Jiri Slaby Cc: Conor Dooley, Andrew Jones, kvm, kvm-riscv, linux-riscv, linux-serial, linuxppc-dev, linux-kernel, Atish Patra, Anup Patel From: Atish Patra <atishp@rivosinc.com> 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 <atishp@rivosinc.com> Signed-off-by: Anup Patel <apatel@ventanamicro.com> --- drivers/tty/hvc/Kconfig | 2 +- drivers/tty/hvc/hvc_riscv_sbi.c | 82 ++++++++++++++++++++++++++++++--- 2 files changed, 76 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..56da1a4b5aca 100644 --- a/drivers/tty/hvc/hvc_riscv_sbi.c +++ b/drivers/tty/hvc/hvc_riscv_sbi.c @@ -39,21 +39,89 @@ 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)); + phys_addr_t pa; + struct sbiret ret; + + if (is_vmalloc_addr(buf)) { + pa = page_to_phys(vmalloc_to_page(buf)) + offset_in_page(buf); + if (PAGE_SIZE < (offset_in_page(buf) + count)) + count = PAGE_SIZE - offset_in_page(buf); + } else { + pa = __pa(buf); + } + + if (IS_ENABLED(CONFIG_32BIT)) + ret = sbi_ecall(SBI_EXT_DBCN, SBI_EXT_DBCN_CONSOLE_WRITE, + count, lower_32_bits(pa), upper_32_bits(pa), + 0, 0, 0); + else + ret = sbi_ecall(SBI_EXT_DBCN, SBI_EXT_DBCN_CONSOLE_WRITE, + count, pa, 0, 0, 0, 0); + if (ret.error) + return 0; + + return 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); + phys_addr_t pa; + struct sbiret ret; + + if (is_vmalloc_addr(buf)) { + pa = page_to_phys(vmalloc_to_page(buf)) + offset_in_page(buf); + if (PAGE_SIZE < (offset_in_page(buf) + count)) + count = PAGE_SIZE - offset_in_page(buf); + } else { + pa = __pa(buf); + } + + if (IS_ENABLED(CONFIG_32BIT)) + ret = sbi_ecall(SBI_EXT_DBCN, SBI_EXT_DBCN_CONSOLE_READ, + count, lower_32_bits(pa), upper_32_bits(pa), + 0, 0, 0); + else + ret = sbi_ecall(SBI_EXT_DBCN, SBI_EXT_DBCN_CONSOLE_READ, + count, pa, 0, 0, 0, 0); + if (ret.error) + return 0; + + return ret.value; +} + +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_spec_version >= sbi_mk_version(2, 0)) && + (sbi_probe_extension(SBI_EXT_DBCN) > 0)) { + err = PTR_ERR_OR_ZERO(hvc_alloc(0, 0, &hvc_sbi_dbcn_ops, 16)); + 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, 16)); + 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 _______________________________________________ linux-riscv mailing list linux-riscv@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-riscv ^ permalink raw reply related [flat|nested] 96+ messages in thread
* [PATCH v3 8/9] tty: Add SBI debug console support to HVC SBI driver 2023-10-20 7:21 ` Anup Patel (?) (?) @ 2023-10-20 9:55 ` Björn Töpel -1 siblings, 0 replies; 96+ messages in thread From: Björn Töpel @ 2023-10-20 9:55 UTC (permalink / raw) To: kvm-riscv Anup Patel <apatel@ventanamicro.com> writes: > From: Atish Patra <atishp@rivosinc.com> > > 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 <atishp@rivosinc.com> > Signed-off-by: Anup Patel <apatel@ventanamicro.com> > --- > drivers/tty/hvc/Kconfig | 2 +- > drivers/tty/hvc/hvc_riscv_sbi.c | 82 ++++++++++++++++++++++++++++++--- > 2 files changed, 76 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..56da1a4b5aca 100644 > --- a/drivers/tty/hvc/hvc_riscv_sbi.c > +++ b/drivers/tty/hvc/hvc_riscv_sbi.c > @@ -39,21 +39,89 @@ 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)); > + phys_addr_t pa; > + struct sbiret ret; > + > + if (is_vmalloc_addr(buf)) { > + pa = page_to_phys(vmalloc_to_page(buf)) + offset_in_page(buf); > + if (PAGE_SIZE < (offset_in_page(buf) + count)) > + count = PAGE_SIZE - offset_in_page(buf); Thanks for fixing the cross-page issue. Now you're cutting the buffer off. What about doing two SBI calls instead? (Dito on the get side) Bj?rn ^ permalink raw reply [flat|nested] 96+ messages in thread
* Re: [PATCH v3 8/9] tty: Add SBI debug console support to HVC SBI driver @ 2023-10-20 9:55 ` Björn Töpel 0 siblings, 0 replies; 96+ messages in thread From: Björn Töpel @ 2023-10-20 9:55 UTC (permalink / raw) To: Anup Patel, Paolo Bonzini, Atish Patra, Palmer Dabbelt, Paul Walmsley, Greg Kroah-Hartman, Jiri Slaby Cc: Anup Patel, linux-serial, kvm, Atish Patra, linux-kernel, Conor Dooley, kvm-riscv, linux-riscv, linuxppc-dev, Andrew Jones Anup Patel <apatel@ventanamicro.com> writes: > From: Atish Patra <atishp@rivosinc.com> > > 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 <atishp@rivosinc.com> > Signed-off-by: Anup Patel <apatel@ventanamicro.com> > --- > drivers/tty/hvc/Kconfig | 2 +- > drivers/tty/hvc/hvc_riscv_sbi.c | 82 ++++++++++++++++++++++++++++++--- > 2 files changed, 76 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..56da1a4b5aca 100644 > --- a/drivers/tty/hvc/hvc_riscv_sbi.c > +++ b/drivers/tty/hvc/hvc_riscv_sbi.c > @@ -39,21 +39,89 @@ 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)); > + phys_addr_t pa; > + struct sbiret ret; > + > + if (is_vmalloc_addr(buf)) { > + pa = page_to_phys(vmalloc_to_page(buf)) + offset_in_page(buf); > + if (PAGE_SIZE < (offset_in_page(buf) + count)) > + count = PAGE_SIZE - offset_in_page(buf); Thanks for fixing the cross-page issue. Now you're cutting the buffer off. What about doing two SBI calls instead? (Dito on the get side) Björn ^ permalink raw reply [flat|nested] 96+ messages in thread
* Re: [PATCH v3 8/9] tty: Add SBI debug console support to HVC SBI driver @ 2023-10-20 9:55 ` Björn Töpel 0 siblings, 0 replies; 96+ messages in thread From: Björn Töpel @ 2023-10-20 9:55 UTC (permalink / raw) To: Anup Patel, Paolo Bonzini, Atish Patra, Palmer Dabbelt, Paul Walmsley, Greg Kroah-Hartman, Jiri Slaby Cc: Conor Dooley, Andrew Jones, kvm, kvm-riscv, linux-riscv, linux-serial, linuxppc-dev, linux-kernel, Atish Patra, Anup Patel Anup Patel <apatel@ventanamicro.com> writes: > From: Atish Patra <atishp@rivosinc.com> > > 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 <atishp@rivosinc.com> > Signed-off-by: Anup Patel <apatel@ventanamicro.com> > --- > drivers/tty/hvc/Kconfig | 2 +- > drivers/tty/hvc/hvc_riscv_sbi.c | 82 ++++++++++++++++++++++++++++++--- > 2 files changed, 76 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..56da1a4b5aca 100644 > --- a/drivers/tty/hvc/hvc_riscv_sbi.c > +++ b/drivers/tty/hvc/hvc_riscv_sbi.c > @@ -39,21 +39,89 @@ 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)); > + phys_addr_t pa; > + struct sbiret ret; > + > + if (is_vmalloc_addr(buf)) { > + pa = page_to_phys(vmalloc_to_page(buf)) + offset_in_page(buf); > + if (PAGE_SIZE < (offset_in_page(buf) + count)) > + count = PAGE_SIZE - offset_in_page(buf); Thanks for fixing the cross-page issue. Now you're cutting the buffer off. What about doing two SBI calls instead? (Dito on the get side) Björn ^ permalink raw reply [flat|nested] 96+ messages in thread
* Re: [PATCH v3 8/9] tty: Add SBI debug console support to HVC SBI driver @ 2023-10-20 9:55 ` Björn Töpel 0 siblings, 0 replies; 96+ messages in thread From: Björn Töpel @ 2023-10-20 9:55 UTC (permalink / raw) To: Anup Patel, Paolo Bonzini, Atish Patra, Palmer Dabbelt, Paul Walmsley, Greg Kroah-Hartman, Jiri Slaby Cc: Conor Dooley, Andrew Jones, kvm, kvm-riscv, linux-riscv, linux-serial, linuxppc-dev, linux-kernel, Atish Patra, Anup Patel Anup Patel <apatel@ventanamicro.com> writes: > From: Atish Patra <atishp@rivosinc.com> > > 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 <atishp@rivosinc.com> > Signed-off-by: Anup Patel <apatel@ventanamicro.com> > --- > drivers/tty/hvc/Kconfig | 2 +- > drivers/tty/hvc/hvc_riscv_sbi.c | 82 ++++++++++++++++++++++++++++++--- > 2 files changed, 76 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..56da1a4b5aca 100644 > --- a/drivers/tty/hvc/hvc_riscv_sbi.c > +++ b/drivers/tty/hvc/hvc_riscv_sbi.c > @@ -39,21 +39,89 @@ 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)); > + phys_addr_t pa; > + struct sbiret ret; > + > + if (is_vmalloc_addr(buf)) { > + pa = page_to_phys(vmalloc_to_page(buf)) + offset_in_page(buf); > + if (PAGE_SIZE < (offset_in_page(buf) + count)) > + count = PAGE_SIZE - offset_in_page(buf); Thanks for fixing the cross-page issue. Now you're cutting the buffer off. What about doing two SBI calls instead? (Dito on the get side) Björn _______________________________________________ linux-riscv mailing list linux-riscv@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-riscv ^ permalink raw reply [flat|nested] 96+ messages in thread
* [PATCH v3 8/9] tty: Add SBI debug console support to HVC SBI driver 2023-10-20 9:55 ` Björn Töpel (?) (?) @ 2023-10-20 10:06 ` Anup Patel -1 siblings, 0 replies; 96+ messages in thread From: Anup Patel @ 2023-10-20 10:06 UTC (permalink / raw) To: kvm-riscv On Fri, Oct 20, 2023 at 3:25?PM Bj?rn T?pel <bjorn@kernel.org> wrote: > > Anup Patel <apatel@ventanamicro.com> writes: > > > From: Atish Patra <atishp@rivosinc.com> > > > > 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 <atishp@rivosinc.com> > > Signed-off-by: Anup Patel <apatel@ventanamicro.com> > > --- > > drivers/tty/hvc/Kconfig | 2 +- > > drivers/tty/hvc/hvc_riscv_sbi.c | 82 ++++++++++++++++++++++++++++++--- > > 2 files changed, 76 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..56da1a4b5aca 100644 > > --- a/drivers/tty/hvc/hvc_riscv_sbi.c > > +++ b/drivers/tty/hvc/hvc_riscv_sbi.c > > @@ -39,21 +39,89 @@ 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)); > > + phys_addr_t pa; > > + struct sbiret ret; > > + > > + if (is_vmalloc_addr(buf)) { > > + pa = page_to_phys(vmalloc_to_page(buf)) + offset_in_page(buf); > > + if (PAGE_SIZE < (offset_in_page(buf) + count)) > > + count = PAGE_SIZE - offset_in_page(buf); > > Thanks for fixing the cross-page issue. Now you're cutting the buffer > off. What about doing two SBI calls instead? (Dito on the get side) We don't need to handle that because the hvc_console framework will ensure remaining characters are sent-out. Same applies to get side as well. Regards, Anup ^ permalink raw reply [flat|nested] 96+ messages in thread
* Re: [PATCH v3 8/9] tty: Add SBI debug console support to HVC SBI driver @ 2023-10-20 10:06 ` Anup Patel 0 siblings, 0 replies; 96+ messages in thread From: Anup Patel @ 2023-10-20 10:06 UTC (permalink / raw) To: Björn Töpel Cc: linux-serial, kvm, Greg Kroah-Hartman, Atish Patra, Atish Patra, linuxppc-dev, Conor Dooley, linux-kernel, Palmer Dabbelt, kvm-riscv, Paul Walmsley, Paolo Bonzini, linux-riscv, Jiri Slaby, Andrew Jones On Fri, Oct 20, 2023 at 3:25 PM Björn Töpel <bjorn@kernel.org> wrote: > > Anup Patel <apatel@ventanamicro.com> writes: > > > From: Atish Patra <atishp@rivosinc.com> > > > > 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 <atishp@rivosinc.com> > > Signed-off-by: Anup Patel <apatel@ventanamicro.com> > > --- > > drivers/tty/hvc/Kconfig | 2 +- > > drivers/tty/hvc/hvc_riscv_sbi.c | 82 ++++++++++++++++++++++++++++++--- > > 2 files changed, 76 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..56da1a4b5aca 100644 > > --- a/drivers/tty/hvc/hvc_riscv_sbi.c > > +++ b/drivers/tty/hvc/hvc_riscv_sbi.c > > @@ -39,21 +39,89 @@ 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)); > > + phys_addr_t pa; > > + struct sbiret ret; > > + > > + if (is_vmalloc_addr(buf)) { > > + pa = page_to_phys(vmalloc_to_page(buf)) + offset_in_page(buf); > > + if (PAGE_SIZE < (offset_in_page(buf) + count)) > > + count = PAGE_SIZE - offset_in_page(buf); > > Thanks for fixing the cross-page issue. Now you're cutting the buffer > off. What about doing two SBI calls instead? (Dito on the get side) We don't need to handle that because the hvc_console framework will ensure remaining characters are sent-out. Same applies to get side as well. Regards, Anup ^ permalink raw reply [flat|nested] 96+ messages in thread
* Re: [PATCH v3 8/9] tty: Add SBI debug console support to HVC SBI driver @ 2023-10-20 10:06 ` Anup Patel 0 siblings, 0 replies; 96+ messages in thread From: Anup Patel @ 2023-10-20 10:06 UTC (permalink / raw) To: Björn Töpel Cc: Paolo Bonzini, Atish Patra, Palmer Dabbelt, Paul Walmsley, Greg Kroah-Hartman, Jiri Slaby, Conor Dooley, Andrew Jones, kvm, kvm-riscv, linux-riscv, linux-serial, linuxppc-dev, linux-kernel, Atish Patra On Fri, Oct 20, 2023 at 3:25 PM Björn Töpel <bjorn@kernel.org> wrote: > > Anup Patel <apatel@ventanamicro.com> writes: > > > From: Atish Patra <atishp@rivosinc.com> > > > > 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 <atishp@rivosinc.com> > > Signed-off-by: Anup Patel <apatel@ventanamicro.com> > > --- > > drivers/tty/hvc/Kconfig | 2 +- > > drivers/tty/hvc/hvc_riscv_sbi.c | 82 ++++++++++++++++++++++++++++++--- > > 2 files changed, 76 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..56da1a4b5aca 100644 > > --- a/drivers/tty/hvc/hvc_riscv_sbi.c > > +++ b/drivers/tty/hvc/hvc_riscv_sbi.c > > @@ -39,21 +39,89 @@ 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)); > > + phys_addr_t pa; > > + struct sbiret ret; > > + > > + if (is_vmalloc_addr(buf)) { > > + pa = page_to_phys(vmalloc_to_page(buf)) + offset_in_page(buf); > > + if (PAGE_SIZE < (offset_in_page(buf) + count)) > > + count = PAGE_SIZE - offset_in_page(buf); > > Thanks for fixing the cross-page issue. Now you're cutting the buffer > off. What about doing two SBI calls instead? (Dito on the get side) We don't need to handle that because the hvc_console framework will ensure remaining characters are sent-out. Same applies to get side as well. Regards, Anup ^ permalink raw reply [flat|nested] 96+ messages in thread
* Re: [PATCH v3 8/9] tty: Add SBI debug console support to HVC SBI driver @ 2023-10-20 10:06 ` Anup Patel 0 siblings, 0 replies; 96+ messages in thread From: Anup Patel @ 2023-10-20 10:06 UTC (permalink / raw) To: Björn Töpel Cc: Paolo Bonzini, Atish Patra, Palmer Dabbelt, Paul Walmsley, Greg Kroah-Hartman, Jiri Slaby, Conor Dooley, Andrew Jones, kvm, kvm-riscv, linux-riscv, linux-serial, linuxppc-dev, linux-kernel, Atish Patra On Fri, Oct 20, 2023 at 3:25 PM Björn Töpel <bjorn@kernel.org> wrote: > > Anup Patel <apatel@ventanamicro.com> writes: > > > From: Atish Patra <atishp@rivosinc.com> > > > > 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 <atishp@rivosinc.com> > > Signed-off-by: Anup Patel <apatel@ventanamicro.com> > > --- > > drivers/tty/hvc/Kconfig | 2 +- > > drivers/tty/hvc/hvc_riscv_sbi.c | 82 ++++++++++++++++++++++++++++++--- > > 2 files changed, 76 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..56da1a4b5aca 100644 > > --- a/drivers/tty/hvc/hvc_riscv_sbi.c > > +++ b/drivers/tty/hvc/hvc_riscv_sbi.c > > @@ -39,21 +39,89 @@ 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)); > > + phys_addr_t pa; > > + struct sbiret ret; > > + > > + if (is_vmalloc_addr(buf)) { > > + pa = page_to_phys(vmalloc_to_page(buf)) + offset_in_page(buf); > > + if (PAGE_SIZE < (offset_in_page(buf) + count)) > > + count = PAGE_SIZE - offset_in_page(buf); > > Thanks for fixing the cross-page issue. Now you're cutting the buffer > off. What about doing two SBI calls instead? (Dito on the get side) We don't need to handle that because the hvc_console framework will ensure remaining characters are sent-out. Same applies to get side as well. Regards, Anup _______________________________________________ linux-riscv mailing list linux-riscv@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-riscv ^ permalink raw reply [flat|nested] 96+ messages in thread
* [PATCH v3 8/9] tty: Add SBI debug console support to HVC SBI driver 2023-10-20 7:21 ` Anup Patel (?) (?) @ 2023-10-20 10:46 ` Andrew Jones -1 siblings, 0 replies; 96+ messages in thread From: Andrew Jones @ 2023-10-20 10:46 UTC (permalink / raw) To: kvm-riscv On Fri, Oct 20, 2023 at 12:51:39PM +0530, Anup Patel wrote: > From: Atish Patra <atishp@rivosinc.com> > > 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 <atishp@rivosinc.com> > Signed-off-by: Anup Patel <apatel@ventanamicro.com> > --- > drivers/tty/hvc/Kconfig | 2 +- > drivers/tty/hvc/hvc_riscv_sbi.c | 82 ++++++++++++++++++++++++++++++--- > 2 files changed, 76 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..56da1a4b5aca 100644 > --- a/drivers/tty/hvc/hvc_riscv_sbi.c > +++ b/drivers/tty/hvc/hvc_riscv_sbi.c > @@ -39,21 +39,89 @@ 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)); > + phys_addr_t pa; > + struct sbiret ret; > + > + if (is_vmalloc_addr(buf)) { > + pa = page_to_phys(vmalloc_to_page(buf)) + offset_in_page(buf); > + if (PAGE_SIZE < (offset_in_page(buf) + count)) I thought checkpatch complained about uppercase constants being on the left in comparisons. > + count = PAGE_SIZE - offset_in_page(buf); > + } else { > + pa = __pa(buf); > + } > + > + if (IS_ENABLED(CONFIG_32BIT)) > + ret = sbi_ecall(SBI_EXT_DBCN, SBI_EXT_DBCN_CONSOLE_WRITE, > + count, lower_32_bits(pa), upper_32_bits(pa), > + 0, 0, 0); > + else > + ret = sbi_ecall(SBI_EXT_DBCN, SBI_EXT_DBCN_CONSOLE_WRITE, > + count, pa, 0, 0, 0, 0); > + if (ret.error) > + return 0; > + > + return count; Shouldn't we return ret.value here in case it's less than count? I see we already do that below in get(). > } > -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); > + phys_addr_t pa; > + struct sbiret ret; > + > + if (is_vmalloc_addr(buf)) { > + pa = page_to_phys(vmalloc_to_page(buf)) + offset_in_page(buf); > + if (PAGE_SIZE < (offset_in_page(buf) + count)) > + count = PAGE_SIZE - offset_in_page(buf); > + } else { > + pa = __pa(buf); > + } > + > + if (IS_ENABLED(CONFIG_32BIT)) > + ret = sbi_ecall(SBI_EXT_DBCN, SBI_EXT_DBCN_CONSOLE_READ, > + count, lower_32_bits(pa), upper_32_bits(pa), > + 0, 0, 0); > + else > + ret = sbi_ecall(SBI_EXT_DBCN, SBI_EXT_DBCN_CONSOLE_READ, > + count, pa, 0, 0, 0, 0); > + if (ret.error) > + return 0; > + > + return ret.value; > +} > + > +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_spec_version >= sbi_mk_version(2, 0)) && > + (sbi_probe_extension(SBI_EXT_DBCN) > 0)) { > + err = PTR_ERR_OR_ZERO(hvc_alloc(0, 0, &hvc_sbi_dbcn_ops, 16)); Why an outbuf size of only 16? > + 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, 16)); > + 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 > Thanks, drew ^ permalink raw reply [flat|nested] 96+ messages in thread
* Re: [PATCH v3 8/9] tty: Add SBI debug console support to HVC SBI driver @ 2023-10-20 10:46 ` Andrew Jones 0 siblings, 0 replies; 96+ messages in thread From: Andrew Jones @ 2023-10-20 10:46 UTC (permalink / raw) To: Anup Patel Cc: linux-serial, kvm, Greg Kroah-Hartman, Atish Patra, Atish Patra, linuxppc-dev, Conor Dooley, linux-kernel, Palmer Dabbelt, kvm-riscv, Paul Walmsley, Paolo Bonzini, linux-riscv, Jiri Slaby On Fri, Oct 20, 2023 at 12:51:39PM +0530, Anup Patel wrote: > From: Atish Patra <atishp@rivosinc.com> > > 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 <atishp@rivosinc.com> > Signed-off-by: Anup Patel <apatel@ventanamicro.com> > --- > drivers/tty/hvc/Kconfig | 2 +- > drivers/tty/hvc/hvc_riscv_sbi.c | 82 ++++++++++++++++++++++++++++++--- > 2 files changed, 76 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..56da1a4b5aca 100644 > --- a/drivers/tty/hvc/hvc_riscv_sbi.c > +++ b/drivers/tty/hvc/hvc_riscv_sbi.c > @@ -39,21 +39,89 @@ 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)); > + phys_addr_t pa; > + struct sbiret ret; > + > + if (is_vmalloc_addr(buf)) { > + pa = page_to_phys(vmalloc_to_page(buf)) + offset_in_page(buf); > + if (PAGE_SIZE < (offset_in_page(buf) + count)) I thought checkpatch complained about uppercase constants being on the left in comparisons. > + count = PAGE_SIZE - offset_in_page(buf); > + } else { > + pa = __pa(buf); > + } > + > + if (IS_ENABLED(CONFIG_32BIT)) > + ret = sbi_ecall(SBI_EXT_DBCN, SBI_EXT_DBCN_CONSOLE_WRITE, > + count, lower_32_bits(pa), upper_32_bits(pa), > + 0, 0, 0); > + else > + ret = sbi_ecall(SBI_EXT_DBCN, SBI_EXT_DBCN_CONSOLE_WRITE, > + count, pa, 0, 0, 0, 0); > + if (ret.error) > + return 0; > + > + return count; Shouldn't we return ret.value here in case it's less than count? I see we already do that below in get(). > } > -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); > + phys_addr_t pa; > + struct sbiret ret; > + > + if (is_vmalloc_addr(buf)) { > + pa = page_to_phys(vmalloc_to_page(buf)) + offset_in_page(buf); > + if (PAGE_SIZE < (offset_in_page(buf) + count)) > + count = PAGE_SIZE - offset_in_page(buf); > + } else { > + pa = __pa(buf); > + } > + > + if (IS_ENABLED(CONFIG_32BIT)) > + ret = sbi_ecall(SBI_EXT_DBCN, SBI_EXT_DBCN_CONSOLE_READ, > + count, lower_32_bits(pa), upper_32_bits(pa), > + 0, 0, 0); > + else > + ret = sbi_ecall(SBI_EXT_DBCN, SBI_EXT_DBCN_CONSOLE_READ, > + count, pa, 0, 0, 0, 0); > + if (ret.error) > + return 0; > + > + return ret.value; > +} > + > +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_spec_version >= sbi_mk_version(2, 0)) && > + (sbi_probe_extension(SBI_EXT_DBCN) > 0)) { > + err = PTR_ERR_OR_ZERO(hvc_alloc(0, 0, &hvc_sbi_dbcn_ops, 16)); Why an outbuf size of only 16? > + 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, 16)); > + 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 > Thanks, drew ^ permalink raw reply [flat|nested] 96+ messages in thread
* Re: [PATCH v3 8/9] tty: Add SBI debug console support to HVC SBI driver @ 2023-10-20 10:46 ` Andrew Jones 0 siblings, 0 replies; 96+ messages in thread From: Andrew Jones @ 2023-10-20 10:46 UTC (permalink / raw) To: Anup Patel Cc: Paolo Bonzini, Atish Patra, Palmer Dabbelt, Paul Walmsley, Greg Kroah-Hartman, Jiri Slaby, Conor Dooley, kvm, kvm-riscv, linux-riscv, linux-serial, linuxppc-dev, linux-kernel, Atish Patra On Fri, Oct 20, 2023 at 12:51:39PM +0530, Anup Patel wrote: > From: Atish Patra <atishp@rivosinc.com> > > 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 <atishp@rivosinc.com> > Signed-off-by: Anup Patel <apatel@ventanamicro.com> > --- > drivers/tty/hvc/Kconfig | 2 +- > drivers/tty/hvc/hvc_riscv_sbi.c | 82 ++++++++++++++++++++++++++++++--- > 2 files changed, 76 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..56da1a4b5aca 100644 > --- a/drivers/tty/hvc/hvc_riscv_sbi.c > +++ b/drivers/tty/hvc/hvc_riscv_sbi.c > @@ -39,21 +39,89 @@ 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)); > + phys_addr_t pa; > + struct sbiret ret; > + > + if (is_vmalloc_addr(buf)) { > + pa = page_to_phys(vmalloc_to_page(buf)) + offset_in_page(buf); > + if (PAGE_SIZE < (offset_in_page(buf) + count)) I thought checkpatch complained about uppercase constants being on the left in comparisons. > + count = PAGE_SIZE - offset_in_page(buf); > + } else { > + pa = __pa(buf); > + } > + > + if (IS_ENABLED(CONFIG_32BIT)) > + ret = sbi_ecall(SBI_EXT_DBCN, SBI_EXT_DBCN_CONSOLE_WRITE, > + count, lower_32_bits(pa), upper_32_bits(pa), > + 0, 0, 0); > + else > + ret = sbi_ecall(SBI_EXT_DBCN, SBI_EXT_DBCN_CONSOLE_WRITE, > + count, pa, 0, 0, 0, 0); > + if (ret.error) > + return 0; > + > + return count; Shouldn't we return ret.value here in case it's less than count? I see we already do that below in get(). > } > -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); > + phys_addr_t pa; > + struct sbiret ret; > + > + if (is_vmalloc_addr(buf)) { > + pa = page_to_phys(vmalloc_to_page(buf)) + offset_in_page(buf); > + if (PAGE_SIZE < (offset_in_page(buf) + count)) > + count = PAGE_SIZE - offset_in_page(buf); > + } else { > + pa = __pa(buf); > + } > + > + if (IS_ENABLED(CONFIG_32BIT)) > + ret = sbi_ecall(SBI_EXT_DBCN, SBI_EXT_DBCN_CONSOLE_READ, > + count, lower_32_bits(pa), upper_32_bits(pa), > + 0, 0, 0); > + else > + ret = sbi_ecall(SBI_EXT_DBCN, SBI_EXT_DBCN_CONSOLE_READ, > + count, pa, 0, 0, 0, 0); > + if (ret.error) > + return 0; > + > + return ret.value; > +} > + > +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_spec_version >= sbi_mk_version(2, 0)) && > + (sbi_probe_extension(SBI_EXT_DBCN) > 0)) { > + err = PTR_ERR_OR_ZERO(hvc_alloc(0, 0, &hvc_sbi_dbcn_ops, 16)); Why an outbuf size of only 16? > + 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, 16)); > + 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 > Thanks, drew ^ permalink raw reply [flat|nested] 96+ messages in thread
* Re: [PATCH v3 8/9] tty: Add SBI debug console support to HVC SBI driver @ 2023-10-20 10:46 ` Andrew Jones 0 siblings, 0 replies; 96+ messages in thread From: Andrew Jones @ 2023-10-20 10:46 UTC (permalink / raw) To: Anup Patel Cc: Paolo Bonzini, Atish Patra, Palmer Dabbelt, Paul Walmsley, Greg Kroah-Hartman, Jiri Slaby, Conor Dooley, kvm, kvm-riscv, linux-riscv, linux-serial, linuxppc-dev, linux-kernel, Atish Patra On Fri, Oct 20, 2023 at 12:51:39PM +0530, Anup Patel wrote: > From: Atish Patra <atishp@rivosinc.com> > > 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 <atishp@rivosinc.com> > Signed-off-by: Anup Patel <apatel@ventanamicro.com> > --- > drivers/tty/hvc/Kconfig | 2 +- > drivers/tty/hvc/hvc_riscv_sbi.c | 82 ++++++++++++++++++++++++++++++--- > 2 files changed, 76 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..56da1a4b5aca 100644 > --- a/drivers/tty/hvc/hvc_riscv_sbi.c > +++ b/drivers/tty/hvc/hvc_riscv_sbi.c > @@ -39,21 +39,89 @@ 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)); > + phys_addr_t pa; > + struct sbiret ret; > + > + if (is_vmalloc_addr(buf)) { > + pa = page_to_phys(vmalloc_to_page(buf)) + offset_in_page(buf); > + if (PAGE_SIZE < (offset_in_page(buf) + count)) I thought checkpatch complained about uppercase constants being on the left in comparisons. > + count = PAGE_SIZE - offset_in_page(buf); > + } else { > + pa = __pa(buf); > + } > + > + if (IS_ENABLED(CONFIG_32BIT)) > + ret = sbi_ecall(SBI_EXT_DBCN, SBI_EXT_DBCN_CONSOLE_WRITE, > + count, lower_32_bits(pa), upper_32_bits(pa), > + 0, 0, 0); > + else > + ret = sbi_ecall(SBI_EXT_DBCN, SBI_EXT_DBCN_CONSOLE_WRITE, > + count, pa, 0, 0, 0, 0); > + if (ret.error) > + return 0; > + > + return count; Shouldn't we return ret.value here in case it's less than count? I see we already do that below in get(). > } > -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); > + phys_addr_t pa; > + struct sbiret ret; > + > + if (is_vmalloc_addr(buf)) { > + pa = page_to_phys(vmalloc_to_page(buf)) + offset_in_page(buf); > + if (PAGE_SIZE < (offset_in_page(buf) + count)) > + count = PAGE_SIZE - offset_in_page(buf); > + } else { > + pa = __pa(buf); > + } > + > + if (IS_ENABLED(CONFIG_32BIT)) > + ret = sbi_ecall(SBI_EXT_DBCN, SBI_EXT_DBCN_CONSOLE_READ, > + count, lower_32_bits(pa), upper_32_bits(pa), > + 0, 0, 0); > + else > + ret = sbi_ecall(SBI_EXT_DBCN, SBI_EXT_DBCN_CONSOLE_READ, > + count, pa, 0, 0, 0, 0); > + if (ret.error) > + return 0; > + > + return ret.value; > +} > + > +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_spec_version >= sbi_mk_version(2, 0)) && > + (sbi_probe_extension(SBI_EXT_DBCN) > 0)) { > + err = PTR_ERR_OR_ZERO(hvc_alloc(0, 0, &hvc_sbi_dbcn_ops, 16)); Why an outbuf size of only 16? > + 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, 16)); > + 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 > Thanks, drew _______________________________________________ linux-riscv mailing list linux-riscv@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-riscv ^ permalink raw reply [flat|nested] 96+ messages in thread
* [PATCH v3 8/9] tty: Add SBI debug console support to HVC SBI driver 2023-10-20 10:46 ` Andrew Jones (?) (?) @ 2023-10-20 13:47 ` Anup Patel -1 siblings, 0 replies; 96+ messages in thread From: Anup Patel @ 2023-10-20 13:47 UTC (permalink / raw) To: kvm-riscv On Fri, Oct 20, 2023 at 4:16?PM Andrew Jones <ajones@ventanamicro.com> wrote: > > On Fri, Oct 20, 2023 at 12:51:39PM +0530, Anup Patel wrote: > > From: Atish Patra <atishp@rivosinc.com> > > > > 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 <atishp@rivosinc.com> > > Signed-off-by: Anup Patel <apatel@ventanamicro.com> > > --- > > drivers/tty/hvc/Kconfig | 2 +- > > drivers/tty/hvc/hvc_riscv_sbi.c | 82 ++++++++++++++++++++++++++++++--- > > 2 files changed, 76 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..56da1a4b5aca 100644 > > --- a/drivers/tty/hvc/hvc_riscv_sbi.c > > +++ b/drivers/tty/hvc/hvc_riscv_sbi.c > > @@ -39,21 +39,89 @@ 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)); > > + phys_addr_t pa; > > + struct sbiret ret; > > + > > + if (is_vmalloc_addr(buf)) { > > + pa = page_to_phys(vmalloc_to_page(buf)) + offset_in_page(buf); > > + if (PAGE_SIZE < (offset_in_page(buf) + count)) > > I thought checkpatch complained about uppercase constants being on the > left in comparisons. Nope checkpatch does not complain about this. > > > + count = PAGE_SIZE - offset_in_page(buf); > > + } else { > > + pa = __pa(buf); > > + } > > + > > + if (IS_ENABLED(CONFIG_32BIT)) > > + ret = sbi_ecall(SBI_EXT_DBCN, SBI_EXT_DBCN_CONSOLE_WRITE, > > + count, lower_32_bits(pa), upper_32_bits(pa), > > + 0, 0, 0); > > + else > > + ret = sbi_ecall(SBI_EXT_DBCN, SBI_EXT_DBCN_CONSOLE_WRITE, > > + count, pa, 0, 0, 0, 0); > > + if (ret.error) > > + return 0; > > + > > + return count; > > Shouldn't we return ret.value here in case it's less than count? I see we > already do that below in get(). Ahh, yes. Good catch, I will update. > > > } > > -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); > > + phys_addr_t pa; > > + struct sbiret ret; > > + > > + if (is_vmalloc_addr(buf)) { > > + pa = page_to_phys(vmalloc_to_page(buf)) + offset_in_page(buf); > > + if (PAGE_SIZE < (offset_in_page(buf) + count)) > > + count = PAGE_SIZE - offset_in_page(buf); > > + } else { > > + pa = __pa(buf); > > + } > > + > > + if (IS_ENABLED(CONFIG_32BIT)) > > + ret = sbi_ecall(SBI_EXT_DBCN, SBI_EXT_DBCN_CONSOLE_READ, > > + count, lower_32_bits(pa), upper_32_bits(pa), > > + 0, 0, 0); > > + else > > + ret = sbi_ecall(SBI_EXT_DBCN, SBI_EXT_DBCN_CONSOLE_READ, > > + count, pa, 0, 0, 0, 0); > > + if (ret.error) > > + return 0; > > + > > + return ret.value; > > +} > > + > > +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_spec_version >= sbi_mk_version(2, 0)) && > > + (sbi_probe_extension(SBI_EXT_DBCN) > 0)) { > > + err = PTR_ERR_OR_ZERO(hvc_alloc(0, 0, &hvc_sbi_dbcn_ops, 16)); > > Why an outbuf size of only 16? The output buffer size of 16 is a very common choice across HVC drivers. The next best choice is 256. I guess 256 is better so I will go with that. > > > + 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, 16)); > > + 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 > > > > Thanks, > drew Regards, Anup ^ permalink raw reply [flat|nested] 96+ messages in thread
* Re: [PATCH v3 8/9] tty: Add SBI debug console support to HVC SBI driver @ 2023-10-20 13:47 ` Anup Patel 0 siblings, 0 replies; 96+ messages in thread From: Anup Patel @ 2023-10-20 13:47 UTC (permalink / raw) To: Andrew Jones Cc: linux-serial, kvm, Greg Kroah-Hartman, Atish Patra, Atish Patra, linuxppc-dev, Conor Dooley, linux-kernel, Palmer Dabbelt, kvm-riscv, Paul Walmsley, Paolo Bonzini, linux-riscv, Jiri Slaby On Fri, Oct 20, 2023 at 4:16 PM Andrew Jones <ajones@ventanamicro.com> wrote: > > On Fri, Oct 20, 2023 at 12:51:39PM +0530, Anup Patel wrote: > > From: Atish Patra <atishp@rivosinc.com> > > > > 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 <atishp@rivosinc.com> > > Signed-off-by: Anup Patel <apatel@ventanamicro.com> > > --- > > drivers/tty/hvc/Kconfig | 2 +- > > drivers/tty/hvc/hvc_riscv_sbi.c | 82 ++++++++++++++++++++++++++++++--- > > 2 files changed, 76 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..56da1a4b5aca 100644 > > --- a/drivers/tty/hvc/hvc_riscv_sbi.c > > +++ b/drivers/tty/hvc/hvc_riscv_sbi.c > > @@ -39,21 +39,89 @@ 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)); > > + phys_addr_t pa; > > + struct sbiret ret; > > + > > + if (is_vmalloc_addr(buf)) { > > + pa = page_to_phys(vmalloc_to_page(buf)) + offset_in_page(buf); > > + if (PAGE_SIZE < (offset_in_page(buf) + count)) > > I thought checkpatch complained about uppercase constants being on the > left in comparisons. Nope checkpatch does not complain about this. > > > + count = PAGE_SIZE - offset_in_page(buf); > > + } else { > > + pa = __pa(buf); > > + } > > + > > + if (IS_ENABLED(CONFIG_32BIT)) > > + ret = sbi_ecall(SBI_EXT_DBCN, SBI_EXT_DBCN_CONSOLE_WRITE, > > + count, lower_32_bits(pa), upper_32_bits(pa), > > + 0, 0, 0); > > + else > > + ret = sbi_ecall(SBI_EXT_DBCN, SBI_EXT_DBCN_CONSOLE_WRITE, > > + count, pa, 0, 0, 0, 0); > > + if (ret.error) > > + return 0; > > + > > + return count; > > Shouldn't we return ret.value here in case it's less than count? I see we > already do that below in get(). Ahh, yes. Good catch, I will update. > > > } > > -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); > > + phys_addr_t pa; > > + struct sbiret ret; > > + > > + if (is_vmalloc_addr(buf)) { > > + pa = page_to_phys(vmalloc_to_page(buf)) + offset_in_page(buf); > > + if (PAGE_SIZE < (offset_in_page(buf) + count)) > > + count = PAGE_SIZE - offset_in_page(buf); > > + } else { > > + pa = __pa(buf); > > + } > > + > > + if (IS_ENABLED(CONFIG_32BIT)) > > + ret = sbi_ecall(SBI_EXT_DBCN, SBI_EXT_DBCN_CONSOLE_READ, > > + count, lower_32_bits(pa), upper_32_bits(pa), > > + 0, 0, 0); > > + else > > + ret = sbi_ecall(SBI_EXT_DBCN, SBI_EXT_DBCN_CONSOLE_READ, > > + count, pa, 0, 0, 0, 0); > > + if (ret.error) > > + return 0; > > + > > + return ret.value; > > +} > > + > > +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_spec_version >= sbi_mk_version(2, 0)) && > > + (sbi_probe_extension(SBI_EXT_DBCN) > 0)) { > > + err = PTR_ERR_OR_ZERO(hvc_alloc(0, 0, &hvc_sbi_dbcn_ops, 16)); > > Why an outbuf size of only 16? The output buffer size of 16 is a very common choice across HVC drivers. The next best choice is 256. I guess 256 is better so I will go with that. > > > + 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, 16)); > > + 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 > > > > Thanks, > drew Regards, Anup ^ permalink raw reply [flat|nested] 96+ messages in thread
* Re: [PATCH v3 8/9] tty: Add SBI debug console support to HVC SBI driver @ 2023-10-20 13:47 ` Anup Patel 0 siblings, 0 replies; 96+ messages in thread From: Anup Patel @ 2023-10-20 13:47 UTC (permalink / raw) To: Andrew Jones Cc: Paolo Bonzini, Atish Patra, Palmer Dabbelt, Paul Walmsley, Greg Kroah-Hartman, Jiri Slaby, Conor Dooley, kvm, kvm-riscv, linux-riscv, linux-serial, linuxppc-dev, linux-kernel, Atish Patra On Fri, Oct 20, 2023 at 4:16 PM Andrew Jones <ajones@ventanamicro.com> wrote: > > On Fri, Oct 20, 2023 at 12:51:39PM +0530, Anup Patel wrote: > > From: Atish Patra <atishp@rivosinc.com> > > > > 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 <atishp@rivosinc.com> > > Signed-off-by: Anup Patel <apatel@ventanamicro.com> > > --- > > drivers/tty/hvc/Kconfig | 2 +- > > drivers/tty/hvc/hvc_riscv_sbi.c | 82 ++++++++++++++++++++++++++++++--- > > 2 files changed, 76 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..56da1a4b5aca 100644 > > --- a/drivers/tty/hvc/hvc_riscv_sbi.c > > +++ b/drivers/tty/hvc/hvc_riscv_sbi.c > > @@ -39,21 +39,89 @@ 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)); > > + phys_addr_t pa; > > + struct sbiret ret; > > + > > + if (is_vmalloc_addr(buf)) { > > + pa = page_to_phys(vmalloc_to_page(buf)) + offset_in_page(buf); > > + if (PAGE_SIZE < (offset_in_page(buf) + count)) > > I thought checkpatch complained about uppercase constants being on the > left in comparisons. Nope checkpatch does not complain about this. > > > + count = PAGE_SIZE - offset_in_page(buf); > > + } else { > > + pa = __pa(buf); > > + } > > + > > + if (IS_ENABLED(CONFIG_32BIT)) > > + ret = sbi_ecall(SBI_EXT_DBCN, SBI_EXT_DBCN_CONSOLE_WRITE, > > + count, lower_32_bits(pa), upper_32_bits(pa), > > + 0, 0, 0); > > + else > > + ret = sbi_ecall(SBI_EXT_DBCN, SBI_EXT_DBCN_CONSOLE_WRITE, > > + count, pa, 0, 0, 0, 0); > > + if (ret.error) > > + return 0; > > + > > + return count; > > Shouldn't we return ret.value here in case it's less than count? I see we > already do that below in get(). Ahh, yes. Good catch, I will update. > > > } > > -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); > > + phys_addr_t pa; > > + struct sbiret ret; > > + > > + if (is_vmalloc_addr(buf)) { > > + pa = page_to_phys(vmalloc_to_page(buf)) + offset_in_page(buf); > > + if (PAGE_SIZE < (offset_in_page(buf) + count)) > > + count = PAGE_SIZE - offset_in_page(buf); > > + } else { > > + pa = __pa(buf); > > + } > > + > > + if (IS_ENABLED(CONFIG_32BIT)) > > + ret = sbi_ecall(SBI_EXT_DBCN, SBI_EXT_DBCN_CONSOLE_READ, > > + count, lower_32_bits(pa), upper_32_bits(pa), > > + 0, 0, 0); > > + else > > + ret = sbi_ecall(SBI_EXT_DBCN, SBI_EXT_DBCN_CONSOLE_READ, > > + count, pa, 0, 0, 0, 0); > > + if (ret.error) > > + return 0; > > + > > + return ret.value; > > +} > > + > > +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_spec_version >= sbi_mk_version(2, 0)) && > > + (sbi_probe_extension(SBI_EXT_DBCN) > 0)) { > > + err = PTR_ERR_OR_ZERO(hvc_alloc(0, 0, &hvc_sbi_dbcn_ops, 16)); > > Why an outbuf size of only 16? The output buffer size of 16 is a very common choice across HVC drivers. The next best choice is 256. I guess 256 is better so I will go with that. > > > + 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, 16)); > > + 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 > > > > Thanks, > drew Regards, Anup ^ permalink raw reply [flat|nested] 96+ messages in thread
* Re: [PATCH v3 8/9] tty: Add SBI debug console support to HVC SBI driver @ 2023-10-20 13:47 ` Anup Patel 0 siblings, 0 replies; 96+ messages in thread From: Anup Patel @ 2023-10-20 13:47 UTC (permalink / raw) To: Andrew Jones Cc: Paolo Bonzini, Atish Patra, Palmer Dabbelt, Paul Walmsley, Greg Kroah-Hartman, Jiri Slaby, Conor Dooley, kvm, kvm-riscv, linux-riscv, linux-serial, linuxppc-dev, linux-kernel, Atish Patra On Fri, Oct 20, 2023 at 4:16 PM Andrew Jones <ajones@ventanamicro.com> wrote: > > On Fri, Oct 20, 2023 at 12:51:39PM +0530, Anup Patel wrote: > > From: Atish Patra <atishp@rivosinc.com> > > > > 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 <atishp@rivosinc.com> > > Signed-off-by: Anup Patel <apatel@ventanamicro.com> > > --- > > drivers/tty/hvc/Kconfig | 2 +- > > drivers/tty/hvc/hvc_riscv_sbi.c | 82 ++++++++++++++++++++++++++++++--- > > 2 files changed, 76 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..56da1a4b5aca 100644 > > --- a/drivers/tty/hvc/hvc_riscv_sbi.c > > +++ b/drivers/tty/hvc/hvc_riscv_sbi.c > > @@ -39,21 +39,89 @@ 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)); > > + phys_addr_t pa; > > + struct sbiret ret; > > + > > + if (is_vmalloc_addr(buf)) { > > + pa = page_to_phys(vmalloc_to_page(buf)) + offset_in_page(buf); > > + if (PAGE_SIZE < (offset_in_page(buf) + count)) > > I thought checkpatch complained about uppercase constants being on the > left in comparisons. Nope checkpatch does not complain about this. > > > + count = PAGE_SIZE - offset_in_page(buf); > > + } else { > > + pa = __pa(buf); > > + } > > + > > + if (IS_ENABLED(CONFIG_32BIT)) > > + ret = sbi_ecall(SBI_EXT_DBCN, SBI_EXT_DBCN_CONSOLE_WRITE, > > + count, lower_32_bits(pa), upper_32_bits(pa), > > + 0, 0, 0); > > + else > > + ret = sbi_ecall(SBI_EXT_DBCN, SBI_EXT_DBCN_CONSOLE_WRITE, > > + count, pa, 0, 0, 0, 0); > > + if (ret.error) > > + return 0; > > + > > + return count; > > Shouldn't we return ret.value here in case it's less than count? I see we > already do that below in get(). Ahh, yes. Good catch, I will update. > > > } > > -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); > > + phys_addr_t pa; > > + struct sbiret ret; > > + > > + if (is_vmalloc_addr(buf)) { > > + pa = page_to_phys(vmalloc_to_page(buf)) + offset_in_page(buf); > > + if (PAGE_SIZE < (offset_in_page(buf) + count)) > > + count = PAGE_SIZE - offset_in_page(buf); > > + } else { > > + pa = __pa(buf); > > + } > > + > > + if (IS_ENABLED(CONFIG_32BIT)) > > + ret = sbi_ecall(SBI_EXT_DBCN, SBI_EXT_DBCN_CONSOLE_READ, > > + count, lower_32_bits(pa), upper_32_bits(pa), > > + 0, 0, 0); > > + else > > + ret = sbi_ecall(SBI_EXT_DBCN, SBI_EXT_DBCN_CONSOLE_READ, > > + count, pa, 0, 0, 0, 0); > > + if (ret.error) > > + return 0; > > + > > + return ret.value; > > +} > > + > > +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_spec_version >= sbi_mk_version(2, 0)) && > > + (sbi_probe_extension(SBI_EXT_DBCN) > 0)) { > > + err = PTR_ERR_OR_ZERO(hvc_alloc(0, 0, &hvc_sbi_dbcn_ops, 16)); > > Why an outbuf size of only 16? The output buffer size of 16 is a very common choice across HVC drivers. The next best choice is 256. I guess 256 is better so I will go with that. > > > + 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, 16)); > > + 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 > > > > Thanks, > drew Regards, Anup _______________________________________________ linux-riscv mailing list linux-riscv@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-riscv ^ permalink raw reply [flat|nested] 96+ messages in thread
* [PATCH v3 8/9] tty: Add SBI debug console support to HVC SBI driver 2023-10-20 7:21 ` Anup Patel (?) (?) @ 2023-10-21 16:46 ` Greg Kroah-Hartman -1 siblings, 0 replies; 96+ messages in thread From: Greg Kroah-Hartman @ 2023-10-21 16:46 UTC (permalink / raw) To: kvm-riscv On Fri, Oct 20, 2023 at 12:51:39PM +0530, Anup Patel wrote: > From: Atish Patra <atishp@rivosinc.com> > > 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 <atishp@rivosinc.com> > Signed-off-by: Anup Patel <apatel@ventanamicro.com> > --- > drivers/tty/hvc/Kconfig | 2 +- > drivers/tty/hvc/hvc_riscv_sbi.c | 82 ++++++++++++++++++++++++++++++--- > 2 files changed, 76 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..56da1a4b5aca 100644 > --- a/drivers/tty/hvc/hvc_riscv_sbi.c > +++ b/drivers/tty/hvc/hvc_riscv_sbi.c > @@ -39,21 +39,89 @@ 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)); > + phys_addr_t pa; > + struct sbiret ret; > + > + if (is_vmalloc_addr(buf)) { > + pa = page_to_phys(vmalloc_to_page(buf)) + offset_in_page(buf); > + if (PAGE_SIZE < (offset_in_page(buf) + count)) > + count = PAGE_SIZE - offset_in_page(buf); > + } else { > + pa = __pa(buf); > + } > + > + if (IS_ENABLED(CONFIG_32BIT)) > + ret = sbi_ecall(SBI_EXT_DBCN, SBI_EXT_DBCN_CONSOLE_WRITE, > + count, lower_32_bits(pa), upper_32_bits(pa), > + 0, 0, 0); > + else > + ret = sbi_ecall(SBI_EXT_DBCN, SBI_EXT_DBCN_CONSOLE_WRITE, > + count, pa, 0, 0, 0, 0); Again, you need a helper function here to keep you from having to keep this all in sync. > + if (ret.error) > + return 0; > + > + return 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); > + phys_addr_t pa; > + struct sbiret ret; > + > + if (is_vmalloc_addr(buf)) { > + pa = page_to_phys(vmalloc_to_page(buf)) + offset_in_page(buf); > + if (PAGE_SIZE < (offset_in_page(buf) + count)) > + count = PAGE_SIZE - offset_in_page(buf); > + } else { > + pa = __pa(buf); > + } > + > + if (IS_ENABLED(CONFIG_32BIT)) > + ret = sbi_ecall(SBI_EXT_DBCN, SBI_EXT_DBCN_CONSOLE_READ, > + count, lower_32_bits(pa), upper_32_bits(pa), > + 0, 0, 0); > + else > + ret = sbi_ecall(SBI_EXT_DBCN, SBI_EXT_DBCN_CONSOLE_READ, > + count, pa, 0, 0, 0, 0); And here too. thanks, greg k-h ^ permalink raw reply [flat|nested] 96+ messages in thread
* Re: [PATCH v3 8/9] tty: Add SBI debug console support to HVC SBI driver @ 2023-10-21 16:46 ` Greg Kroah-Hartman 0 siblings, 0 replies; 96+ messages in thread From: Greg Kroah-Hartman @ 2023-10-21 16:46 UTC (permalink / raw) To: Anup Patel Cc: linux-serial, kvm, linuxppc-dev, Atish Patra, Atish Patra, linux-kernel, Conor Dooley, Palmer Dabbelt, kvm-riscv, Paul Walmsley, Paolo Bonzini, linux-riscv, Jiri Slaby, Andrew Jones On Fri, Oct 20, 2023 at 12:51:39PM +0530, Anup Patel wrote: > From: Atish Patra <atishp@rivosinc.com> > > 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 <atishp@rivosinc.com> > Signed-off-by: Anup Patel <apatel@ventanamicro.com> > --- > drivers/tty/hvc/Kconfig | 2 +- > drivers/tty/hvc/hvc_riscv_sbi.c | 82 ++++++++++++++++++++++++++++++--- > 2 files changed, 76 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..56da1a4b5aca 100644 > --- a/drivers/tty/hvc/hvc_riscv_sbi.c > +++ b/drivers/tty/hvc/hvc_riscv_sbi.c > @@ -39,21 +39,89 @@ 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)); > + phys_addr_t pa; > + struct sbiret ret; > + > + if (is_vmalloc_addr(buf)) { > + pa = page_to_phys(vmalloc_to_page(buf)) + offset_in_page(buf); > + if (PAGE_SIZE < (offset_in_page(buf) + count)) > + count = PAGE_SIZE - offset_in_page(buf); > + } else { > + pa = __pa(buf); > + } > + > + if (IS_ENABLED(CONFIG_32BIT)) > + ret = sbi_ecall(SBI_EXT_DBCN, SBI_EXT_DBCN_CONSOLE_WRITE, > + count, lower_32_bits(pa), upper_32_bits(pa), > + 0, 0, 0); > + else > + ret = sbi_ecall(SBI_EXT_DBCN, SBI_EXT_DBCN_CONSOLE_WRITE, > + count, pa, 0, 0, 0, 0); Again, you need a helper function here to keep you from having to keep this all in sync. > + if (ret.error) > + return 0; > + > + return 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); > + phys_addr_t pa; > + struct sbiret ret; > + > + if (is_vmalloc_addr(buf)) { > + pa = page_to_phys(vmalloc_to_page(buf)) + offset_in_page(buf); > + if (PAGE_SIZE < (offset_in_page(buf) + count)) > + count = PAGE_SIZE - offset_in_page(buf); > + } else { > + pa = __pa(buf); > + } > + > + if (IS_ENABLED(CONFIG_32BIT)) > + ret = sbi_ecall(SBI_EXT_DBCN, SBI_EXT_DBCN_CONSOLE_READ, > + count, lower_32_bits(pa), upper_32_bits(pa), > + 0, 0, 0); > + else > + ret = sbi_ecall(SBI_EXT_DBCN, SBI_EXT_DBCN_CONSOLE_READ, > + count, pa, 0, 0, 0, 0); And here too. thanks, greg k-h ^ permalink raw reply [flat|nested] 96+ messages in thread
* Re: [PATCH v3 8/9] tty: Add SBI debug console support to HVC SBI driver @ 2023-10-21 16:46 ` Greg Kroah-Hartman 0 siblings, 0 replies; 96+ messages in thread From: Greg Kroah-Hartman @ 2023-10-21 16:46 UTC (permalink / raw) To: Anup Patel Cc: Paolo Bonzini, Atish Patra, Palmer Dabbelt, Paul Walmsley, Jiri Slaby, Conor Dooley, Andrew Jones, kvm, kvm-riscv, linux-riscv, linux-serial, linuxppc-dev, linux-kernel, Atish Patra On Fri, Oct 20, 2023 at 12:51:39PM +0530, Anup Patel wrote: > From: Atish Patra <atishp@rivosinc.com> > > 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 <atishp@rivosinc.com> > Signed-off-by: Anup Patel <apatel@ventanamicro.com> > --- > drivers/tty/hvc/Kconfig | 2 +- > drivers/tty/hvc/hvc_riscv_sbi.c | 82 ++++++++++++++++++++++++++++++--- > 2 files changed, 76 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..56da1a4b5aca 100644 > --- a/drivers/tty/hvc/hvc_riscv_sbi.c > +++ b/drivers/tty/hvc/hvc_riscv_sbi.c > @@ -39,21 +39,89 @@ 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)); > + phys_addr_t pa; > + struct sbiret ret; > + > + if (is_vmalloc_addr(buf)) { > + pa = page_to_phys(vmalloc_to_page(buf)) + offset_in_page(buf); > + if (PAGE_SIZE < (offset_in_page(buf) + count)) > + count = PAGE_SIZE - offset_in_page(buf); > + } else { > + pa = __pa(buf); > + } > + > + if (IS_ENABLED(CONFIG_32BIT)) > + ret = sbi_ecall(SBI_EXT_DBCN, SBI_EXT_DBCN_CONSOLE_WRITE, > + count, lower_32_bits(pa), upper_32_bits(pa), > + 0, 0, 0); > + else > + ret = sbi_ecall(SBI_EXT_DBCN, SBI_EXT_DBCN_CONSOLE_WRITE, > + count, pa, 0, 0, 0, 0); Again, you need a helper function here to keep you from having to keep this all in sync. > + if (ret.error) > + return 0; > + > + return 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); > + phys_addr_t pa; > + struct sbiret ret; > + > + if (is_vmalloc_addr(buf)) { > + pa = page_to_phys(vmalloc_to_page(buf)) + offset_in_page(buf); > + if (PAGE_SIZE < (offset_in_page(buf) + count)) > + count = PAGE_SIZE - offset_in_page(buf); > + } else { > + pa = __pa(buf); > + } > + > + if (IS_ENABLED(CONFIG_32BIT)) > + ret = sbi_ecall(SBI_EXT_DBCN, SBI_EXT_DBCN_CONSOLE_READ, > + count, lower_32_bits(pa), upper_32_bits(pa), > + 0, 0, 0); > + else > + ret = sbi_ecall(SBI_EXT_DBCN, SBI_EXT_DBCN_CONSOLE_READ, > + count, pa, 0, 0, 0, 0); And here too. thanks, greg k-h ^ permalink raw reply [flat|nested] 96+ messages in thread
* Re: [PATCH v3 8/9] tty: Add SBI debug console support to HVC SBI driver @ 2023-10-21 16:46 ` Greg Kroah-Hartman 0 siblings, 0 replies; 96+ messages in thread From: Greg Kroah-Hartman @ 2023-10-21 16:46 UTC (permalink / raw) To: Anup Patel Cc: Paolo Bonzini, Atish Patra, Palmer Dabbelt, Paul Walmsley, Jiri Slaby, Conor Dooley, Andrew Jones, kvm, kvm-riscv, linux-riscv, linux-serial, linuxppc-dev, linux-kernel, Atish Patra On Fri, Oct 20, 2023 at 12:51:39PM +0530, Anup Patel wrote: > From: Atish Patra <atishp@rivosinc.com> > > 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 <atishp@rivosinc.com> > Signed-off-by: Anup Patel <apatel@ventanamicro.com> > --- > drivers/tty/hvc/Kconfig | 2 +- > drivers/tty/hvc/hvc_riscv_sbi.c | 82 ++++++++++++++++++++++++++++++--- > 2 files changed, 76 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..56da1a4b5aca 100644 > --- a/drivers/tty/hvc/hvc_riscv_sbi.c > +++ b/drivers/tty/hvc/hvc_riscv_sbi.c > @@ -39,21 +39,89 @@ 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)); > + phys_addr_t pa; > + struct sbiret ret; > + > + if (is_vmalloc_addr(buf)) { > + pa = page_to_phys(vmalloc_to_page(buf)) + offset_in_page(buf); > + if (PAGE_SIZE < (offset_in_page(buf) + count)) > + count = PAGE_SIZE - offset_in_page(buf); > + } else { > + pa = __pa(buf); > + } > + > + if (IS_ENABLED(CONFIG_32BIT)) > + ret = sbi_ecall(SBI_EXT_DBCN, SBI_EXT_DBCN_CONSOLE_WRITE, > + count, lower_32_bits(pa), upper_32_bits(pa), > + 0, 0, 0); > + else > + ret = sbi_ecall(SBI_EXT_DBCN, SBI_EXT_DBCN_CONSOLE_WRITE, > + count, pa, 0, 0, 0, 0); Again, you need a helper function here to keep you from having to keep this all in sync. > + if (ret.error) > + return 0; > + > + return 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); > + phys_addr_t pa; > + struct sbiret ret; > + > + if (is_vmalloc_addr(buf)) { > + pa = page_to_phys(vmalloc_to_page(buf)) + offset_in_page(buf); > + if (PAGE_SIZE < (offset_in_page(buf) + count)) > + count = PAGE_SIZE - offset_in_page(buf); > + } else { > + pa = __pa(buf); > + } > + > + if (IS_ENABLED(CONFIG_32BIT)) > + ret = sbi_ecall(SBI_EXT_DBCN, SBI_EXT_DBCN_CONSOLE_READ, > + count, lower_32_bits(pa), upper_32_bits(pa), > + 0, 0, 0); > + else > + ret = sbi_ecall(SBI_EXT_DBCN, SBI_EXT_DBCN_CONSOLE_READ, > + count, pa, 0, 0, 0, 0); And here too. thanks, greg k-h _______________________________________________ linux-riscv mailing list linux-riscv@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-riscv ^ permalink raw reply [flat|nested] 96+ messages in thread
* [PATCH v3 8/9] tty: Add SBI debug console support to HVC SBI driver 2023-10-21 16:46 ` Greg Kroah-Hartman (?) (?) @ 2023-11-17 13:11 ` Anup Patel -1 siblings, 0 replies; 96+ messages in thread From: Anup Patel @ 2023-11-17 13:11 UTC (permalink / raw) To: kvm-riscv On Sat, Oct 21, 2023 at 10:16?PM Greg Kroah-Hartman <gregkh@linuxfoundation.org> wrote: > > On Fri, Oct 20, 2023 at 12:51:39PM +0530, Anup Patel wrote: > > From: Atish Patra <atishp@rivosinc.com> > > > > 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 <atishp@rivosinc.com> > > Signed-off-by: Anup Patel <apatel@ventanamicro.com> > > --- > > drivers/tty/hvc/Kconfig | 2 +- > > drivers/tty/hvc/hvc_riscv_sbi.c | 82 ++++++++++++++++++++++++++++++--- > > 2 files changed, 76 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..56da1a4b5aca 100644 > > --- a/drivers/tty/hvc/hvc_riscv_sbi.c > > +++ b/drivers/tty/hvc/hvc_riscv_sbi.c > > @@ -39,21 +39,89 @@ 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)); > > + phys_addr_t pa; > > + struct sbiret ret; > > + > > + if (is_vmalloc_addr(buf)) { > > + pa = page_to_phys(vmalloc_to_page(buf)) + offset_in_page(buf); > > + if (PAGE_SIZE < (offset_in_page(buf) + count)) > > + count = PAGE_SIZE - offset_in_page(buf); > > + } else { > > + pa = __pa(buf); > > + } > > + > > + if (IS_ENABLED(CONFIG_32BIT)) > > + ret = sbi_ecall(SBI_EXT_DBCN, SBI_EXT_DBCN_CONSOLE_WRITE, > > + count, lower_32_bits(pa), upper_32_bits(pa), > > + 0, 0, 0); > > + else > > + ret = sbi_ecall(SBI_EXT_DBCN, SBI_EXT_DBCN_CONSOLE_WRITE, > > + count, pa, 0, 0, 0, 0); > > Again, you need a helper function here to keep you from having to keep > this all in sync. Sure, I will update. > > > + if (ret.error) > > + return 0; > > + > > + return 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); > > + phys_addr_t pa; > > + struct sbiret ret; > > + > > + if (is_vmalloc_addr(buf)) { > > + pa = page_to_phys(vmalloc_to_page(buf)) + offset_in_page(buf); > > + if (PAGE_SIZE < (offset_in_page(buf) + count)) > > + count = PAGE_SIZE - offset_in_page(buf); > > + } else { > > + pa = __pa(buf); > > + } > > + > > + if (IS_ENABLED(CONFIG_32BIT)) > > + ret = sbi_ecall(SBI_EXT_DBCN, SBI_EXT_DBCN_CONSOLE_READ, > > + count, lower_32_bits(pa), upper_32_bits(pa), > > + 0, 0, 0); > > + else > > + ret = sbi_ecall(SBI_EXT_DBCN, SBI_EXT_DBCN_CONSOLE_READ, > > + count, pa, 0, 0, 0, 0); > > And here too. Okay. > > thanks, > > greg k-h Regards, Anup ^ permalink raw reply [flat|nested] 96+ messages in thread
* Re: [PATCH v3 8/9] tty: Add SBI debug console support to HVC SBI driver @ 2023-11-17 13:11 ` Anup Patel 0 siblings, 0 replies; 96+ messages in thread From: Anup Patel @ 2023-11-17 13:11 UTC (permalink / raw) To: Greg Kroah-Hartman Cc: Anup Patel, linux-serial, kvm, linuxppc-dev, Atish Patra, Atish Patra, linux-kernel, Conor Dooley, Palmer Dabbelt, kvm-riscv, Paul Walmsley, Paolo Bonzini, linux-riscv, Jiri Slaby, Andrew Jones On Sat, Oct 21, 2023 at 10:16 PM Greg Kroah-Hartman <gregkh@linuxfoundation.org> wrote: > > On Fri, Oct 20, 2023 at 12:51:39PM +0530, Anup Patel wrote: > > From: Atish Patra <atishp@rivosinc.com> > > > > 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 <atishp@rivosinc.com> > > Signed-off-by: Anup Patel <apatel@ventanamicro.com> > > --- > > drivers/tty/hvc/Kconfig | 2 +- > > drivers/tty/hvc/hvc_riscv_sbi.c | 82 ++++++++++++++++++++++++++++++--- > > 2 files changed, 76 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..56da1a4b5aca 100644 > > --- a/drivers/tty/hvc/hvc_riscv_sbi.c > > +++ b/drivers/tty/hvc/hvc_riscv_sbi.c > > @@ -39,21 +39,89 @@ 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)); > > + phys_addr_t pa; > > + struct sbiret ret; > > + > > + if (is_vmalloc_addr(buf)) { > > + pa = page_to_phys(vmalloc_to_page(buf)) + offset_in_page(buf); > > + if (PAGE_SIZE < (offset_in_page(buf) + count)) > > + count = PAGE_SIZE - offset_in_page(buf); > > + } else { > > + pa = __pa(buf); > > + } > > + > > + if (IS_ENABLED(CONFIG_32BIT)) > > + ret = sbi_ecall(SBI_EXT_DBCN, SBI_EXT_DBCN_CONSOLE_WRITE, > > + count, lower_32_bits(pa), upper_32_bits(pa), > > + 0, 0, 0); > > + else > > + ret = sbi_ecall(SBI_EXT_DBCN, SBI_EXT_DBCN_CONSOLE_WRITE, > > + count, pa, 0, 0, 0, 0); > > Again, you need a helper function here to keep you from having to keep > this all in sync. Sure, I will update. > > > + if (ret.error) > > + return 0; > > + > > + return 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); > > + phys_addr_t pa; > > + struct sbiret ret; > > + > > + if (is_vmalloc_addr(buf)) { > > + pa = page_to_phys(vmalloc_to_page(buf)) + offset_in_page(buf); > > + if (PAGE_SIZE < (offset_in_page(buf) + count)) > > + count = PAGE_SIZE - offset_in_page(buf); > > + } else { > > + pa = __pa(buf); > > + } > > + > > + if (IS_ENABLED(CONFIG_32BIT)) > > + ret = sbi_ecall(SBI_EXT_DBCN, SBI_EXT_DBCN_CONSOLE_READ, > > + count, lower_32_bits(pa), upper_32_bits(pa), > > + 0, 0, 0); > > + else > > + ret = sbi_ecall(SBI_EXT_DBCN, SBI_EXT_DBCN_CONSOLE_READ, > > + count, pa, 0, 0, 0, 0); > > And here too. Okay. > > thanks, > > greg k-h Regards, Anup ^ permalink raw reply [flat|nested] 96+ messages in thread
* Re: [PATCH v3 8/9] tty: Add SBI debug console support to HVC SBI driver @ 2023-11-17 13:11 ` Anup Patel 0 siblings, 0 replies; 96+ messages in thread From: Anup Patel @ 2023-11-17 13:11 UTC (permalink / raw) To: Greg Kroah-Hartman Cc: Anup Patel, Paolo Bonzini, Atish Patra, Palmer Dabbelt, Paul Walmsley, Jiri Slaby, Conor Dooley, Andrew Jones, kvm, kvm-riscv, linux-riscv, linux-serial, linuxppc-dev, linux-kernel, Atish Patra On Sat, Oct 21, 2023 at 10:16 PM Greg Kroah-Hartman <gregkh@linuxfoundation.org> wrote: > > On Fri, Oct 20, 2023 at 12:51:39PM +0530, Anup Patel wrote: > > From: Atish Patra <atishp@rivosinc.com> > > > > 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 <atishp@rivosinc.com> > > Signed-off-by: Anup Patel <apatel@ventanamicro.com> > > --- > > drivers/tty/hvc/Kconfig | 2 +- > > drivers/tty/hvc/hvc_riscv_sbi.c | 82 ++++++++++++++++++++++++++++++--- > > 2 files changed, 76 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..56da1a4b5aca 100644 > > --- a/drivers/tty/hvc/hvc_riscv_sbi.c > > +++ b/drivers/tty/hvc/hvc_riscv_sbi.c > > @@ -39,21 +39,89 @@ 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)); > > + phys_addr_t pa; > > + struct sbiret ret; > > + > > + if (is_vmalloc_addr(buf)) { > > + pa = page_to_phys(vmalloc_to_page(buf)) + offset_in_page(buf); > > + if (PAGE_SIZE < (offset_in_page(buf) + count)) > > + count = PAGE_SIZE - offset_in_page(buf); > > + } else { > > + pa = __pa(buf); > > + } > > + > > + if (IS_ENABLED(CONFIG_32BIT)) > > + ret = sbi_ecall(SBI_EXT_DBCN, SBI_EXT_DBCN_CONSOLE_WRITE, > > + count, lower_32_bits(pa), upper_32_bits(pa), > > + 0, 0, 0); > > + else > > + ret = sbi_ecall(SBI_EXT_DBCN, SBI_EXT_DBCN_CONSOLE_WRITE, > > + count, pa, 0, 0, 0, 0); > > Again, you need a helper function here to keep you from having to keep > this all in sync. Sure, I will update. > > > + if (ret.error) > > + return 0; > > + > > + return 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); > > + phys_addr_t pa; > > + struct sbiret ret; > > + > > + if (is_vmalloc_addr(buf)) { > > + pa = page_to_phys(vmalloc_to_page(buf)) + offset_in_page(buf); > > + if (PAGE_SIZE < (offset_in_page(buf) + count)) > > + count = PAGE_SIZE - offset_in_page(buf); > > + } else { > > + pa = __pa(buf); > > + } > > + > > + if (IS_ENABLED(CONFIG_32BIT)) > > + ret = sbi_ecall(SBI_EXT_DBCN, SBI_EXT_DBCN_CONSOLE_READ, > > + count, lower_32_bits(pa), upper_32_bits(pa), > > + 0, 0, 0); > > + else > > + ret = sbi_ecall(SBI_EXT_DBCN, SBI_EXT_DBCN_CONSOLE_READ, > > + count, pa, 0, 0, 0, 0); > > And here too. Okay. > > thanks, > > greg k-h Regards, Anup ^ permalink raw reply [flat|nested] 96+ messages in thread
* Re: [PATCH v3 8/9] tty: Add SBI debug console support to HVC SBI driver @ 2023-11-17 13:11 ` Anup Patel 0 siblings, 0 replies; 96+ messages in thread From: Anup Patel @ 2023-11-17 13:11 UTC (permalink / raw) To: Greg Kroah-Hartman Cc: Anup Patel, Paolo Bonzini, Atish Patra, Palmer Dabbelt, Paul Walmsley, Jiri Slaby, Conor Dooley, Andrew Jones, kvm, kvm-riscv, linux-riscv, linux-serial, linuxppc-dev, linux-kernel, Atish Patra On Sat, Oct 21, 2023 at 10:16 PM Greg Kroah-Hartman <gregkh@linuxfoundation.org> wrote: > > On Fri, Oct 20, 2023 at 12:51:39PM +0530, Anup Patel wrote: > > From: Atish Patra <atishp@rivosinc.com> > > > > 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 <atishp@rivosinc.com> > > Signed-off-by: Anup Patel <apatel@ventanamicro.com> > > --- > > drivers/tty/hvc/Kconfig | 2 +- > > drivers/tty/hvc/hvc_riscv_sbi.c | 82 ++++++++++++++++++++++++++++++--- > > 2 files changed, 76 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..56da1a4b5aca 100644 > > --- a/drivers/tty/hvc/hvc_riscv_sbi.c > > +++ b/drivers/tty/hvc/hvc_riscv_sbi.c > > @@ -39,21 +39,89 @@ 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)); > > + phys_addr_t pa; > > + struct sbiret ret; > > + > > + if (is_vmalloc_addr(buf)) { > > + pa = page_to_phys(vmalloc_to_page(buf)) + offset_in_page(buf); > > + if (PAGE_SIZE < (offset_in_page(buf) + count)) > > + count = PAGE_SIZE - offset_in_page(buf); > > + } else { > > + pa = __pa(buf); > > + } > > + > > + if (IS_ENABLED(CONFIG_32BIT)) > > + ret = sbi_ecall(SBI_EXT_DBCN, SBI_EXT_DBCN_CONSOLE_WRITE, > > + count, lower_32_bits(pa), upper_32_bits(pa), > > + 0, 0, 0); > > + else > > + ret = sbi_ecall(SBI_EXT_DBCN, SBI_EXT_DBCN_CONSOLE_WRITE, > > + count, pa, 0, 0, 0, 0); > > Again, you need a helper function here to keep you from having to keep > this all in sync. Sure, I will update. > > > + if (ret.error) > > + return 0; > > + > > + return 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); > > + phys_addr_t pa; > > + struct sbiret ret; > > + > > + if (is_vmalloc_addr(buf)) { > > + pa = page_to_phys(vmalloc_to_page(buf)) + offset_in_page(buf); > > + if (PAGE_SIZE < (offset_in_page(buf) + count)) > > + count = PAGE_SIZE - offset_in_page(buf); > > + } else { > > + pa = __pa(buf); > > + } > > + > > + if (IS_ENABLED(CONFIG_32BIT)) > > + ret = sbi_ecall(SBI_EXT_DBCN, SBI_EXT_DBCN_CONSOLE_READ, > > + count, lower_32_bits(pa), upper_32_bits(pa), > > + 0, 0, 0); > > + else > > + ret = sbi_ecall(SBI_EXT_DBCN, SBI_EXT_DBCN_CONSOLE_READ, > > + count, pa, 0, 0, 0, 0); > > And here too. Okay. > > thanks, > > greg k-h Regards, Anup _______________________________________________ linux-riscv mailing list linux-riscv@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-riscv ^ permalink raw reply [flat|nested] 96+ messages in thread
* [PATCH v3 9/9] RISC-V: Enable SBI based earlycon support 2023-10-20 7:21 ` Anup Patel (?) (?) @ 2023-10-20 7:21 ` Anup Patel -1 siblings, 0 replies; 96+ messages in thread From: Anup Patel @ 2023-10-20 7:21 UTC (permalink / raw) To: kvm-riscv Let us enable SBI based earlycon support in defconfigs for both RV32 and RV64 so that "earlycon=sbi" can be used again. Signed-off-by: Anup Patel <apatel@ventanamicro.com> Reviewed-by: Andrew Jones <ajones@ventanamicro.com> --- arch/riscv/configs/defconfig | 1 + arch/riscv/configs/rv32_defconfig | 1 + 2 files changed, 2 insertions(+) diff --git a/arch/riscv/configs/defconfig b/arch/riscv/configs/defconfig index ab86ec3b9eab..f82700da0056 100644 --- a/arch/riscv/configs/defconfig +++ b/arch/riscv/configs/defconfig @@ -132,6 +132,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 diff --git a/arch/riscv/configs/rv32_defconfig b/arch/riscv/configs/rv32_defconfig index 89b601e253a6..5721af39afd1 100644 --- a/arch/riscv/configs/rv32_defconfig +++ b/arch/riscv/configs/rv32_defconfig @@ -66,6 +66,7 @@ CONFIG_INPUT_MOUSEDEV=y CONFIG_SERIAL_8250=y CONFIG_SERIAL_8250_CONSOLE=y CONFIG_SERIAL_OF_PLATFORM=y +CONFIG_SERIAL_EARLYCON_RISCV_SBI=y CONFIG_VIRTIO_CONSOLE=y CONFIG_HW_RANDOM=y CONFIG_HW_RANDOM_VIRTIO=y -- 2.34.1 ^ permalink raw reply related [flat|nested] 96+ messages in thread
* [PATCH v3 9/9] RISC-V: Enable SBI based earlycon support @ 2023-10-20 7:21 ` Anup Patel 0 siblings, 0 replies; 96+ messages in thread From: Anup Patel @ 2023-10-20 7:21 UTC (permalink / raw) To: Paolo Bonzini, Atish Patra, Palmer Dabbelt, Paul Walmsley, Greg Kroah-Hartman, Jiri Slaby Cc: Anup Patel, linux-serial, kvm, linux-kernel, Conor Dooley, kvm-riscv, linux-riscv, linuxppc-dev, Andrew Jones Let us enable SBI based earlycon support in defconfigs for both RV32 and RV64 so that "earlycon=sbi" can be used again. Signed-off-by: Anup Patel <apatel@ventanamicro.com> Reviewed-by: Andrew Jones <ajones@ventanamicro.com> --- arch/riscv/configs/defconfig | 1 + arch/riscv/configs/rv32_defconfig | 1 + 2 files changed, 2 insertions(+) diff --git a/arch/riscv/configs/defconfig b/arch/riscv/configs/defconfig index ab86ec3b9eab..f82700da0056 100644 --- a/arch/riscv/configs/defconfig +++ b/arch/riscv/configs/defconfig @@ -132,6 +132,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 diff --git a/arch/riscv/configs/rv32_defconfig b/arch/riscv/configs/rv32_defconfig index 89b601e253a6..5721af39afd1 100644 --- a/arch/riscv/configs/rv32_defconfig +++ b/arch/riscv/configs/rv32_defconfig @@ -66,6 +66,7 @@ CONFIG_INPUT_MOUSEDEV=y CONFIG_SERIAL_8250=y CONFIG_SERIAL_8250_CONSOLE=y CONFIG_SERIAL_OF_PLATFORM=y +CONFIG_SERIAL_EARLYCON_RISCV_SBI=y CONFIG_VIRTIO_CONSOLE=y CONFIG_HW_RANDOM=y CONFIG_HW_RANDOM_VIRTIO=y -- 2.34.1 ^ permalink raw reply related [flat|nested] 96+ messages in thread
* [PATCH v3 9/9] RISC-V: Enable SBI based earlycon support @ 2023-10-20 7:21 ` Anup Patel 0 siblings, 0 replies; 96+ messages in thread From: Anup Patel @ 2023-10-20 7:21 UTC (permalink / raw) To: Paolo Bonzini, Atish Patra, Palmer Dabbelt, Paul Walmsley, Greg Kroah-Hartman, Jiri Slaby Cc: Conor Dooley, Andrew Jones, kvm, kvm-riscv, linux-riscv, linux-serial, linuxppc-dev, linux-kernel, Anup Patel Let us enable SBI based earlycon support in defconfigs for both RV32 and RV64 so that "earlycon=sbi" can be used again. Signed-off-by: Anup Patel <apatel@ventanamicro.com> Reviewed-by: Andrew Jones <ajones@ventanamicro.com> --- arch/riscv/configs/defconfig | 1 + arch/riscv/configs/rv32_defconfig | 1 + 2 files changed, 2 insertions(+) diff --git a/arch/riscv/configs/defconfig b/arch/riscv/configs/defconfig index ab86ec3b9eab..f82700da0056 100644 --- a/arch/riscv/configs/defconfig +++ b/arch/riscv/configs/defconfig @@ -132,6 +132,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 diff --git a/arch/riscv/configs/rv32_defconfig b/arch/riscv/configs/rv32_defconfig index 89b601e253a6..5721af39afd1 100644 --- a/arch/riscv/configs/rv32_defconfig +++ b/arch/riscv/configs/rv32_defconfig @@ -66,6 +66,7 @@ CONFIG_INPUT_MOUSEDEV=y CONFIG_SERIAL_8250=y CONFIG_SERIAL_8250_CONSOLE=y CONFIG_SERIAL_OF_PLATFORM=y +CONFIG_SERIAL_EARLYCON_RISCV_SBI=y CONFIG_VIRTIO_CONSOLE=y CONFIG_HW_RANDOM=y CONFIG_HW_RANDOM_VIRTIO=y -- 2.34.1 ^ permalink raw reply related [flat|nested] 96+ messages in thread
* [PATCH v3 9/9] RISC-V: Enable SBI based earlycon support @ 2023-10-20 7:21 ` Anup Patel 0 siblings, 0 replies; 96+ messages in thread From: Anup Patel @ 2023-10-20 7:21 UTC (permalink / raw) To: Paolo Bonzini, Atish Patra, Palmer Dabbelt, Paul Walmsley, Greg Kroah-Hartman, Jiri Slaby Cc: Conor Dooley, Andrew Jones, kvm, kvm-riscv, linux-riscv, linux-serial, linuxppc-dev, linux-kernel, Anup Patel Let us enable SBI based earlycon support in defconfigs for both RV32 and RV64 so that "earlycon=sbi" can be used again. Signed-off-by: Anup Patel <apatel@ventanamicro.com> Reviewed-by: Andrew Jones <ajones@ventanamicro.com> --- arch/riscv/configs/defconfig | 1 + arch/riscv/configs/rv32_defconfig | 1 + 2 files changed, 2 insertions(+) diff --git a/arch/riscv/configs/defconfig b/arch/riscv/configs/defconfig index ab86ec3b9eab..f82700da0056 100644 --- a/arch/riscv/configs/defconfig +++ b/arch/riscv/configs/defconfig @@ -132,6 +132,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 diff --git a/arch/riscv/configs/rv32_defconfig b/arch/riscv/configs/rv32_defconfig index 89b601e253a6..5721af39afd1 100644 --- a/arch/riscv/configs/rv32_defconfig +++ b/arch/riscv/configs/rv32_defconfig @@ -66,6 +66,7 @@ CONFIG_INPUT_MOUSEDEV=y CONFIG_SERIAL_8250=y CONFIG_SERIAL_8250_CONSOLE=y CONFIG_SERIAL_OF_PLATFORM=y +CONFIG_SERIAL_EARLYCON_RISCV_SBI=y CONFIG_VIRTIO_CONSOLE=y CONFIG_HW_RANDOM=y CONFIG_HW_RANDOM_VIRTIO=y -- 2.34.1 _______________________________________________ linux-riscv mailing list linux-riscv@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-riscv ^ permalink raw reply related [flat|nested] 96+ messages in thread
* [PATCH v3 0/9] RISC-V SBI debug console extension support 2023-10-20 7:21 ` Anup Patel (?) (?) @ 2023-10-20 11:13 ` Anup Patel -1 siblings, 0 replies; 96+ messages in thread From: Anup Patel @ 2023-10-20 11:13 UTC (permalink / raw) To: kvm-riscv On Fri, Oct 20, 2023 at 12:51?PM Anup Patel <apatel@ventanamicro.com> 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 KVM RISC-V > and Linux RISC-V. > > To try these patches with KVM RISC-V, use KVMTOOL from riscv_sbi_dbcn_v1 > branch at: https://github.com/avpatel/kvmtool.git > > These patches can also be found in the riscv_sbi_dbcn_v3 branch at: > https://github.com/avpatel/linux.git > > 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 (8): > RISC-V: Add defines for SBI debug console extension > RISC-V: KVM: Change the SBI specification version to v2.0 > RISC-V: KVM: Allow some SBI extensions to be disabled by default > RISC-V: KVM: Forward SBI DBCN extension to user-space > KVM: riscv: selftests: Add SBI DBCN extension to get-reg-list test > RISC-V: Add stubs for sbi_console_putchar/getchar() > 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 Queued PATCH1 to PATCH5 for Linux-6.7 Remaining PATCH6 to PATCH9 are still under review. Thanks, Anup > > arch/riscv/configs/defconfig | 1 + > arch/riscv/configs/rv32_defconfig | 1 + > arch/riscv/include/asm/kvm_vcpu_sbi.h | 7 +- > arch/riscv/include/asm/sbi.h | 12 +++ > arch/riscv/include/uapi/asm/kvm.h | 1 + > arch/riscv/kvm/vcpu.c | 6 ++ > arch/riscv/kvm/vcpu_sbi.c | 61 +++++++------- > arch/riscv/kvm/vcpu_sbi_replace.c | 32 ++++++++ > drivers/tty/hvc/Kconfig | 2 +- > drivers/tty/hvc/hvc_riscv_sbi.c | 82 +++++++++++++++++-- > drivers/tty/serial/Kconfig | 2 +- > drivers/tty/serial/earlycon-riscv-sbi.c | 32 +++++++- > .../selftests/kvm/riscv/get-reg-list.c | 2 + > 13 files changed, 198 insertions(+), 43 deletions(-) > > -- > 2.34.1 > > > -- > kvm-riscv mailing list > kvm-riscv at lists.infradead.org > http://lists.infradead.org/mailman/listinfo/kvm-riscv ^ permalink raw reply [flat|nested] 96+ messages in thread
* Re: [PATCH v3 0/9] RISC-V SBI debug console extension support @ 2023-10-20 11:13 ` Anup Patel 0 siblings, 0 replies; 96+ messages in thread From: Anup Patel @ 2023-10-20 11:13 UTC (permalink / raw) To: Anup Patel Cc: linux-serial, kvm, Greg Kroah-Hartman, Atish Patra, linuxppc-dev, Conor Dooley, linux-kernel, Palmer Dabbelt, kvm-riscv, Paul Walmsley, Paolo Bonzini, linux-riscv, Jiri Slaby, Andrew Jones On Fri, Oct 20, 2023 at 12:51 PM Anup Patel <apatel@ventanamicro.com> 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 KVM RISC-V > and Linux RISC-V. > > To try these patches with KVM RISC-V, use KVMTOOL from riscv_sbi_dbcn_v1 > branch at: https://github.com/avpatel/kvmtool.git > > These patches can also be found in the riscv_sbi_dbcn_v3 branch at: > https://github.com/avpatel/linux.git > > 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 (8): > RISC-V: Add defines for SBI debug console extension > RISC-V: KVM: Change the SBI specification version to v2.0 > RISC-V: KVM: Allow some SBI extensions to be disabled by default > RISC-V: KVM: Forward SBI DBCN extension to user-space > KVM: riscv: selftests: Add SBI DBCN extension to get-reg-list test > RISC-V: Add stubs for sbi_console_putchar/getchar() > 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 Queued PATCH1 to PATCH5 for Linux-6.7 Remaining PATCH6 to PATCH9 are still under review. Thanks, Anup > > arch/riscv/configs/defconfig | 1 + > arch/riscv/configs/rv32_defconfig | 1 + > arch/riscv/include/asm/kvm_vcpu_sbi.h | 7 +- > arch/riscv/include/asm/sbi.h | 12 +++ > arch/riscv/include/uapi/asm/kvm.h | 1 + > arch/riscv/kvm/vcpu.c | 6 ++ > arch/riscv/kvm/vcpu_sbi.c | 61 +++++++------- > arch/riscv/kvm/vcpu_sbi_replace.c | 32 ++++++++ > drivers/tty/hvc/Kconfig | 2 +- > drivers/tty/hvc/hvc_riscv_sbi.c | 82 +++++++++++++++++-- > drivers/tty/serial/Kconfig | 2 +- > drivers/tty/serial/earlycon-riscv-sbi.c | 32 +++++++- > .../selftests/kvm/riscv/get-reg-list.c | 2 + > 13 files changed, 198 insertions(+), 43 deletions(-) > > -- > 2.34.1 > > > -- > kvm-riscv mailing list > kvm-riscv@lists.infradead.org > http://lists.infradead.org/mailman/listinfo/kvm-riscv ^ permalink raw reply [flat|nested] 96+ messages in thread
* Re: [PATCH v3 0/9] RISC-V SBI debug console extension support @ 2023-10-20 11:13 ` Anup Patel 0 siblings, 0 replies; 96+ messages in thread From: Anup Patel @ 2023-10-20 11:13 UTC (permalink / raw) To: Anup Patel Cc: Paolo Bonzini, Atish Patra, Palmer Dabbelt, Paul Walmsley, Greg Kroah-Hartman, Jiri Slaby, Conor Dooley, Andrew Jones, kvm, kvm-riscv, linux-riscv, linux-serial, linuxppc-dev, linux-kernel On Fri, Oct 20, 2023 at 12:51 PM Anup Patel <apatel@ventanamicro.com> 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 KVM RISC-V > and Linux RISC-V. > > To try these patches with KVM RISC-V, use KVMTOOL from riscv_sbi_dbcn_v1 > branch at: https://github.com/avpatel/kvmtool.git > > These patches can also be found in the riscv_sbi_dbcn_v3 branch at: > https://github.com/avpatel/linux.git > > 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 (8): > RISC-V: Add defines for SBI debug console extension > RISC-V: KVM: Change the SBI specification version to v2.0 > RISC-V: KVM: Allow some SBI extensions to be disabled by default > RISC-V: KVM: Forward SBI DBCN extension to user-space > KVM: riscv: selftests: Add SBI DBCN extension to get-reg-list test > RISC-V: Add stubs for sbi_console_putchar/getchar() > 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 Queued PATCH1 to PATCH5 for Linux-6.7 Remaining PATCH6 to PATCH9 are still under review. Thanks, Anup > > arch/riscv/configs/defconfig | 1 + > arch/riscv/configs/rv32_defconfig | 1 + > arch/riscv/include/asm/kvm_vcpu_sbi.h | 7 +- > arch/riscv/include/asm/sbi.h | 12 +++ > arch/riscv/include/uapi/asm/kvm.h | 1 + > arch/riscv/kvm/vcpu.c | 6 ++ > arch/riscv/kvm/vcpu_sbi.c | 61 +++++++------- > arch/riscv/kvm/vcpu_sbi_replace.c | 32 ++++++++ > drivers/tty/hvc/Kconfig | 2 +- > drivers/tty/hvc/hvc_riscv_sbi.c | 82 +++++++++++++++++-- > drivers/tty/serial/Kconfig | 2 +- > drivers/tty/serial/earlycon-riscv-sbi.c | 32 +++++++- > .../selftests/kvm/riscv/get-reg-list.c | 2 + > 13 files changed, 198 insertions(+), 43 deletions(-) > > -- > 2.34.1 > > > -- > kvm-riscv mailing list > kvm-riscv@lists.infradead.org > http://lists.infradead.org/mailman/listinfo/kvm-riscv ^ permalink raw reply [flat|nested] 96+ messages in thread
* Re: [PATCH v3 0/9] RISC-V SBI debug console extension support @ 2023-10-20 11:13 ` Anup Patel 0 siblings, 0 replies; 96+ messages in thread From: Anup Patel @ 2023-10-20 11:13 UTC (permalink / raw) To: Anup Patel Cc: Paolo Bonzini, Atish Patra, Palmer Dabbelt, Paul Walmsley, Greg Kroah-Hartman, Jiri Slaby, Conor Dooley, Andrew Jones, kvm, kvm-riscv, linux-riscv, linux-serial, linuxppc-dev, linux-kernel On Fri, Oct 20, 2023 at 12:51 PM Anup Patel <apatel@ventanamicro.com> 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 KVM RISC-V > and Linux RISC-V. > > To try these patches with KVM RISC-V, use KVMTOOL from riscv_sbi_dbcn_v1 > branch at: https://github.com/avpatel/kvmtool.git > > These patches can also be found in the riscv_sbi_dbcn_v3 branch at: > https://github.com/avpatel/linux.git > > 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 (8): > RISC-V: Add defines for SBI debug console extension > RISC-V: KVM: Change the SBI specification version to v2.0 > RISC-V: KVM: Allow some SBI extensions to be disabled by default > RISC-V: KVM: Forward SBI DBCN extension to user-space > KVM: riscv: selftests: Add SBI DBCN extension to get-reg-list test > RISC-V: Add stubs for sbi_console_putchar/getchar() > 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 Queued PATCH1 to PATCH5 for Linux-6.7 Remaining PATCH6 to PATCH9 are still under review. Thanks, Anup > > arch/riscv/configs/defconfig | 1 + > arch/riscv/configs/rv32_defconfig | 1 + > arch/riscv/include/asm/kvm_vcpu_sbi.h | 7 +- > arch/riscv/include/asm/sbi.h | 12 +++ > arch/riscv/include/uapi/asm/kvm.h | 1 + > arch/riscv/kvm/vcpu.c | 6 ++ > arch/riscv/kvm/vcpu_sbi.c | 61 +++++++------- > arch/riscv/kvm/vcpu_sbi_replace.c | 32 ++++++++ > drivers/tty/hvc/Kconfig | 2 +- > drivers/tty/hvc/hvc_riscv_sbi.c | 82 +++++++++++++++++-- > drivers/tty/serial/Kconfig | 2 +- > drivers/tty/serial/earlycon-riscv-sbi.c | 32 +++++++- > .../selftests/kvm/riscv/get-reg-list.c | 2 + > 13 files changed, 198 insertions(+), 43 deletions(-) > > -- > 2.34.1 > > > -- > kvm-riscv mailing list > kvm-riscv@lists.infradead.org > http://lists.infradead.org/mailman/listinfo/kvm-riscv _______________________________________________ linux-riscv mailing list linux-riscv@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-riscv ^ permalink raw reply [flat|nested] 96+ messages in thread
* [PATCH v3 0/9] RISC-V SBI debug console extension support 2023-10-20 7:21 ` Anup Patel (?) (?) @ 2023-11-12 0:55 ` patchwork-bot+linux-riscv -1 siblings, 0 replies; 96+ messages in thread From: patchwork-bot+linux-riscv @ 2023-11-12 0:55 UTC (permalink / raw) To: kvm-riscv Hello: This series was applied to riscv/linux.git (fixes) by Anup Patel <anup@brainfault.org>: On Fri, 20 Oct 2023 12:51:31 +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 KVM RISC-V > and Linux RISC-V. > > [...] Here is the summary with links: - [v3,1/9] RISC-V: Add defines for SBI debug console extension https://git.kernel.org/riscv/c/dadf7886993c - [v3,2/9] RISC-V: KVM: Change the SBI specification version to v2.0 https://git.kernel.org/riscv/c/b88e87a0a1ec - [v3,3/9] RISC-V: KVM: Allow some SBI extensions to be disabled by default https://git.kernel.org/riscv/c/56d8a385b605 - [v3,4/9] RISC-V: KVM: Forward SBI DBCN extension to user-space https://git.kernel.org/riscv/c/c667ad229d13 - [v3,5/9] KVM: riscv: selftests: Add SBI DBCN extension to get-reg-list test https://git.kernel.org/riscv/c/d9c00f44e5de - [v3,6/9] RISC-V: Add stubs for sbi_console_putchar/getchar() (no matching commit) - [v3,7/9] tty/serial: Add RISC-V SBI debug console based earlycon (no matching commit) - [v3,8/9] tty: Add SBI debug console support to HVC SBI driver (no matching commit) - [v3,9/9] RISC-V: Enable SBI based earlycon support (no matching commit) You are awesome, thank you! -- Deet-doot-dot, I am a bot. https://korg.docs.kernel.org/patchwork/pwbot.html ^ permalink raw reply [flat|nested] 96+ messages in thread
* Re: [PATCH v3 0/9] RISC-V SBI debug console extension support @ 2023-11-12 0:55 ` patchwork-bot+linux-riscv 0 siblings, 0 replies; 96+ messages in thread From: patchwork-bot+linux-riscv @ 2023-11-12 0:55 UTC (permalink / raw) To: Anup Patel Cc: linux-serial, kvm, gregkh, atishp, linuxppc-dev, conor, linux-kernel, palmer, kvm-riscv, paul.walmsley, pbonzini, linux-riscv, jirislaby, ajones Hello: This series was applied to riscv/linux.git (fixes) by Anup Patel <anup@brainfault.org>: On Fri, 20 Oct 2023 12:51:31 +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 KVM RISC-V > and Linux RISC-V. > > [...] Here is the summary with links: - [v3,1/9] RISC-V: Add defines for SBI debug console extension https://git.kernel.org/riscv/c/dadf7886993c - [v3,2/9] RISC-V: KVM: Change the SBI specification version to v2.0 https://git.kernel.org/riscv/c/b88e87a0a1ec - [v3,3/9] RISC-V: KVM: Allow some SBI extensions to be disabled by default https://git.kernel.org/riscv/c/56d8a385b605 - [v3,4/9] RISC-V: KVM: Forward SBI DBCN extension to user-space https://git.kernel.org/riscv/c/c667ad229d13 - [v3,5/9] KVM: riscv: selftests: Add SBI DBCN extension to get-reg-list test https://git.kernel.org/riscv/c/d9c00f44e5de - [v3,6/9] RISC-V: Add stubs for sbi_console_putchar/getchar() (no matching commit) - [v3,7/9] tty/serial: Add RISC-V SBI debug console based earlycon (no matching commit) - [v3,8/9] tty: Add SBI debug console support to HVC SBI driver (no matching commit) - [v3,9/9] RISC-V: Enable SBI based earlycon support (no matching commit) You are awesome, thank you! -- Deet-doot-dot, I am a bot. https://korg.docs.kernel.org/patchwork/pwbot.html ^ permalink raw reply [flat|nested] 96+ messages in thread
* Re: [PATCH v3 0/9] RISC-V SBI debug console extension support @ 2023-11-12 0:55 ` patchwork-bot+linux-riscv 0 siblings, 0 replies; 96+ messages in thread From: patchwork-bot+linux-riscv @ 2023-11-12 0:55 UTC (permalink / raw) To: Anup Patel Cc: linux-riscv, pbonzini, atishp, palmer, paul.walmsley, gregkh, jirislaby, conor, ajones, kvm, kvm-riscv, linux-serial, linuxppc-dev, linux-kernel Hello: This series was applied to riscv/linux.git (fixes) by Anup Patel <anup@brainfault.org>: On Fri, 20 Oct 2023 12:51:31 +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 KVM RISC-V > and Linux RISC-V. > > [...] Here is the summary with links: - [v3,1/9] RISC-V: Add defines for SBI debug console extension https://git.kernel.org/riscv/c/dadf7886993c - [v3,2/9] RISC-V: KVM: Change the SBI specification version to v2.0 https://git.kernel.org/riscv/c/b88e87a0a1ec - [v3,3/9] RISC-V: KVM: Allow some SBI extensions to be disabled by default https://git.kernel.org/riscv/c/56d8a385b605 - [v3,4/9] RISC-V: KVM: Forward SBI DBCN extension to user-space https://git.kernel.org/riscv/c/c667ad229d13 - [v3,5/9] KVM: riscv: selftests: Add SBI DBCN extension to get-reg-list test https://git.kernel.org/riscv/c/d9c00f44e5de - [v3,6/9] RISC-V: Add stubs for sbi_console_putchar/getchar() (no matching commit) - [v3,7/9] tty/serial: Add RISC-V SBI debug console based earlycon (no matching commit) - [v3,8/9] tty: Add SBI debug console support to HVC SBI driver (no matching commit) - [v3,9/9] RISC-V: Enable SBI based earlycon support (no matching commit) You are awesome, thank you! -- Deet-doot-dot, I am a bot. https://korg.docs.kernel.org/patchwork/pwbot.html ^ permalink raw reply [flat|nested] 96+ messages in thread
* Re: [PATCH v3 0/9] RISC-V SBI debug console extension support @ 2023-11-12 0:55 ` patchwork-bot+linux-riscv 0 siblings, 0 replies; 96+ messages in thread From: patchwork-bot+linux-riscv @ 2023-11-12 0:55 UTC (permalink / raw) To: Anup Patel Cc: linux-riscv, pbonzini, atishp, palmer, paul.walmsley, gregkh, jirislaby, conor, ajones, kvm, kvm-riscv, linux-serial, linuxppc-dev, linux-kernel Hello: This series was applied to riscv/linux.git (fixes) by Anup Patel <anup@brainfault.org>: On Fri, 20 Oct 2023 12:51:31 +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 KVM RISC-V > and Linux RISC-V. > > [...] Here is the summary with links: - [v3,1/9] RISC-V: Add defines for SBI debug console extension https://git.kernel.org/riscv/c/dadf7886993c - [v3,2/9] RISC-V: KVM: Change the SBI specification version to v2.0 https://git.kernel.org/riscv/c/b88e87a0a1ec - [v3,3/9] RISC-V: KVM: Allow some SBI extensions to be disabled by default https://git.kernel.org/riscv/c/56d8a385b605 - [v3,4/9] RISC-V: KVM: Forward SBI DBCN extension to user-space https://git.kernel.org/riscv/c/c667ad229d13 - [v3,5/9] KVM: riscv: selftests: Add SBI DBCN extension to get-reg-list test https://git.kernel.org/riscv/c/d9c00f44e5de - [v3,6/9] RISC-V: Add stubs for sbi_console_putchar/getchar() (no matching commit) - [v3,7/9] tty/serial: Add RISC-V SBI debug console based earlycon (no matching commit) - [v3,8/9] tty: Add SBI debug console support to HVC SBI driver (no matching commit) - [v3,9/9] RISC-V: Enable SBI based earlycon support (no matching commit) You are awesome, thank you! -- Deet-doot-dot, I am a bot. https://korg.docs.kernel.org/patchwork/pwbot.html _______________________________________________ linux-riscv mailing list linux-riscv@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-riscv ^ permalink raw reply [flat|nested] 96+ messages in thread
end of thread, other threads:[~2023-11-17 13:12 UTC | newest] Thread overview: 96+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2023-10-20 7:21 [PATCH v3 0/9] RISC-V SBI debug console extension support Anup Patel 2023-10-20 7:21 ` Anup Patel 2023-10-20 7:21 ` Anup Patel 2023-10-20 7:21 ` Anup Patel 2023-10-20 7:21 ` [PATCH v3 1/9] RISC-V: Add defines for SBI debug console extension Anup Patel 2023-10-20 7:21 ` Anup Patel 2023-10-20 7:21 ` Anup Patel 2023-10-20 7:21 ` Anup Patel 2023-10-20 7:21 ` [PATCH v3 2/9] RISC-V: KVM: Change the SBI specification version to v2.0 Anup Patel 2023-10-20 7:21 ` Anup Patel 2023-10-20 7:21 ` Anup Patel 2023-10-20 7:21 ` Anup Patel 2023-10-20 7:21 ` [PATCH v3 3/9] RISC-V: KVM: Allow some SBI extensions to be disabled by default Anup Patel 2023-10-20 7:21 ` Anup Patel 2023-10-20 7:21 ` Anup Patel 2023-10-20 7:21 ` Anup Patel 2023-10-20 8:13 ` Andrew Jones 2023-10-20 8:13 ` Andrew Jones 2023-10-20 8:13 ` Andrew Jones 2023-10-20 8:13 ` Andrew Jones 2023-10-20 7:21 ` [PATCH v3 4/9] RISC-V: KVM: Forward SBI DBCN extension to user-space Anup Patel 2023-10-20 7:21 ` Anup Patel 2023-10-20 7:21 ` Anup Patel 2023-10-20 7:21 ` Anup Patel 2023-10-20 7:21 ` [PATCH v3 5/9] KVM: riscv: selftests: Add SBI DBCN extension to get-reg-list test Anup Patel 2023-10-20 7:21 ` Anup Patel 2023-10-20 7:21 ` Anup Patel 2023-10-20 7:21 ` Anup Patel 2023-10-20 8:15 ` Andrew Jones 2023-10-20 8:15 ` Andrew Jones 2023-10-20 8:15 ` Andrew Jones 2023-10-20 8:15 ` Andrew Jones 2023-10-20 7:21 ` [PATCH v3 6/9] RISC-V: Add stubs for sbi_console_putchar/getchar() Anup Patel 2023-10-20 7:21 ` Anup Patel 2023-10-20 7:21 ` Anup Patel 2023-10-20 7:21 ` Anup Patel 2023-10-21 16:35 ` Greg Kroah-Hartman 2023-10-21 16:35 ` Greg Kroah-Hartman 2023-10-21 16:35 ` Greg Kroah-Hartman 2023-10-21 16:35 ` Greg Kroah-Hartman 2023-11-17 13:04 ` Anup Patel 2023-11-17 13:04 ` Anup Patel 2023-11-17 13:04 ` Anup Patel 2023-11-17 13:04 ` Anup Patel 2023-10-20 7:21 ` [PATCH v3 7/9] tty/serial: Add RISC-V SBI debug console based earlycon Anup Patel 2023-10-20 7:21 ` Anup Patel 2023-10-20 7:21 ` Anup Patel 2023-10-20 7:21 ` Anup Patel 2023-10-21 16:45 ` Greg Kroah-Hartman 2023-10-21 16:45 ` Greg Kroah-Hartman 2023-10-21 16:45 ` Greg Kroah-Hartman 2023-10-21 16:45 ` Greg Kroah-Hartman 2023-11-17 13:10 ` Anup Patel 2023-11-17 13:10 ` Anup Patel 2023-11-17 13:10 ` Anup Patel 2023-11-17 13:10 ` Anup Patel 2023-10-20 7:21 ` [PATCH v3 8/9] tty: Add SBI debug console support to HVC SBI driver Anup Patel 2023-10-20 7:21 ` Anup Patel 2023-10-20 7:21 ` Anup Patel 2023-10-20 7:21 ` Anup Patel 2023-10-20 9:55 ` Björn Töpel 2023-10-20 9:55 ` Björn Töpel 2023-10-20 9:55 ` Björn Töpel 2023-10-20 9:55 ` Björn Töpel 2023-10-20 10:06 ` Anup Patel 2023-10-20 10:06 ` Anup Patel 2023-10-20 10:06 ` Anup Patel 2023-10-20 10:06 ` Anup Patel 2023-10-20 10:46 ` Andrew Jones 2023-10-20 10:46 ` Andrew Jones 2023-10-20 10:46 ` Andrew Jones 2023-10-20 10:46 ` Andrew Jones 2023-10-20 13:47 ` Anup Patel 2023-10-20 13:47 ` Anup Patel 2023-10-20 13:47 ` Anup Patel 2023-10-20 13:47 ` Anup Patel 2023-10-21 16:46 ` Greg Kroah-Hartman 2023-10-21 16:46 ` Greg Kroah-Hartman 2023-10-21 16:46 ` Greg Kroah-Hartman 2023-10-21 16:46 ` Greg Kroah-Hartman 2023-11-17 13:11 ` Anup Patel 2023-11-17 13:11 ` Anup Patel 2023-11-17 13:11 ` Anup Patel 2023-11-17 13:11 ` Anup Patel 2023-10-20 7:21 ` [PATCH v3 9/9] RISC-V: Enable SBI based earlycon support Anup Patel 2023-10-20 7:21 ` Anup Patel 2023-10-20 7:21 ` Anup Patel 2023-10-20 7:21 ` Anup Patel 2023-10-20 11:13 ` [PATCH v3 0/9] RISC-V SBI debug console extension support Anup Patel 2023-10-20 11:13 ` Anup Patel 2023-10-20 11:13 ` Anup Patel 2023-10-20 11:13 ` Anup Patel 2023-11-12 0:55 ` patchwork-bot+linux-riscv 2023-11-12 0:55 ` patchwork-bot+linux-riscv 2023-11-12 0:55 ` patchwork-bot+linux-riscv 2023-11-12 0:55 ` patchwork-bot+linux-riscv
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.