[PATCH v3 13/13] RISC-V: KVM: selftests: Add get-reg-list test for STA registers
Atish Patra
atishp at atishpatra.org
Tue Dec 19 15:40:35 PST 2023
On Sun, Dec 17, 2023 at 12:41 PM Andrew Jones <ajones at ventanamicro.com> wrote:
>
> Add SBI STA and its two registers to the get-reg-list test.
>
> Reviewed-by: Anup Patel <anup at brainfault.org>
> Signed-off-by: Andrew Jones <ajones at ventanamicro.com>
> ---
> .../selftests/kvm/riscv/get-reg-list.c | 43 +++++++++++++++++++
> 1 file changed, 43 insertions(+)
>
> diff --git a/tools/testing/selftests/kvm/riscv/get-reg-list.c b/tools/testing/selftests/kvm/riscv/get-reg-list.c
> index b8da2e86bf9c..55dd1fc3c536 100644
> --- a/tools/testing/selftests/kvm/riscv/get-reg-list.c
> +++ b/tools/testing/selftests/kvm/riscv/get-reg-list.c
> @@ -71,6 +71,7 @@ bool filter_reg(__u64 reg)
> case KVM_REG_RISCV_SBI_EXT | KVM_REG_RISCV_SBI_SINGLE | KVM_RISCV_SBI_EXT_HSM:
> case KVM_REG_RISCV_SBI_EXT | KVM_REG_RISCV_SBI_SINGLE | KVM_RISCV_SBI_EXT_PMU:
> case KVM_REG_RISCV_SBI_EXT | KVM_REG_RISCV_SBI_SINGLE | KVM_RISCV_SBI_EXT_DBCN:
> + case KVM_REG_RISCV_SBI_EXT | KVM_REG_RISCV_SBI_SINGLE | KVM_RISCV_SBI_EXT_STA:
> case KVM_REG_RISCV_SBI_EXT | KVM_REG_RISCV_SBI_SINGLE | KVM_RISCV_SBI_EXT_EXPERIMENTAL:
> case KVM_REG_RISCV_SBI_EXT | KVM_REG_RISCV_SBI_SINGLE | KVM_RISCV_SBI_EXT_VENDOR:
> return true;
> @@ -461,6 +462,7 @@ static const char *sbi_ext_single_id_to_str(__u64 reg_off)
> KVM_SBI_EXT_ARR(KVM_RISCV_SBI_EXT_SRST),
> KVM_SBI_EXT_ARR(KVM_RISCV_SBI_EXT_HSM),
> KVM_SBI_EXT_ARR(KVM_RISCV_SBI_EXT_PMU),
> + KVM_SBI_EXT_ARR(KVM_RISCV_SBI_EXT_STA),
> 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),
> @@ -509,6 +511,32 @@ static const char *sbi_ext_id_to_str(const char *prefix, __u64 id)
> return strdup_printf("%lld | %lld /* UNKNOWN */", reg_subtype, reg_off);
> }
>
> +static const char *sbi_sta_id_to_str(__u64 reg_off)
> +{
> + switch (reg_off) {
> + case 0: return "KVM_REG_RISCV_SBI_STA | KVM_REG_RISCV_SBI_STA_REG(shmem_lo)";
> + case 1: return "KVM_REG_RISCV_SBI_STA | KVM_REG_RISCV_SBI_STA_REG(shmem_hi)";
> + }
> + return strdup_printf("KVM_REG_RISCV_SBI_STA | %lld /* UNKNOWN */", reg_off);
> +}
> +
> +static const char *sbi_id_to_str(const char *prefix, __u64 id)
> +{
> + __u64 reg_off = id & ~(REG_MASK | KVM_REG_RISCV_SBI);
> + __u64 reg_subtype = reg_off & KVM_REG_RISCV_SUBTYPE_MASK;
> +
> + assert((id & KVM_REG_RISCV_TYPE_MASK) == KVM_REG_RISCV_SBI);
> +
> + reg_off &= ~KVM_REG_RISCV_SUBTYPE_MASK;
> +
> + switch (reg_subtype) {
> + case KVM_REG_RISCV_SBI_STA:
> + return sbi_sta_id_to_str(reg_off);
> + }
> +
> + return strdup_printf("%lld | %lld /* UNKNOWN */", reg_subtype, reg_off);
> +}
> +
> void print_reg(const char *prefix, __u64 id)
> {
> const char *reg_size = NULL;
> @@ -565,6 +593,10 @@ void print_reg(const char *prefix, __u64 id)
> printf("\tKVM_REG_RISCV | %s | KVM_REG_RISCV_SBI_EXT | %s,\n",
> reg_size, sbi_ext_id_to_str(prefix, id));
> break;
> + case KVM_REG_RISCV_SBI:
> + printf("\tKVM_REG_RISCV | %s | KVM_REG_RISCV_SBI | %s,\n",
> + reg_size, sbi_id_to_str(prefix, id));
> + break;
> default:
> printf("\tKVM_REG_RISCV | %s | 0x%llx /* UNKNOWN */,\n",
> reg_size, id & ~REG_MASK);
> @@ -651,6 +683,12 @@ static __u64 sbi_base_regs[] = {
> KVM_REG_RISCV | KVM_REG_SIZE_ULONG | KVM_REG_RISCV_SBI_EXT | KVM_REG_RISCV_SBI_SINGLE | KVM_RISCV_SBI_EXT_VENDOR,
> };
>
> +static __u64 sbi_sta_regs[] = {
> + KVM_REG_RISCV | KVM_REG_SIZE_ULONG | KVM_REG_RISCV_SBI_EXT | KVM_REG_RISCV_SBI_SINGLE | KVM_RISCV_SBI_EXT_STA,
> + KVM_REG_RISCV | KVM_REG_SIZE_ULONG | KVM_REG_RISCV_SBI | KVM_REG_RISCV_SBI_STA | KVM_REG_RISCV_SBI_STA_REG(shmem_lo),
> + KVM_REG_RISCV | KVM_REG_SIZE_ULONG | KVM_REG_RISCV_SBI | KVM_REG_RISCV_SBI_STA | KVM_REG_RISCV_SBI_STA_REG(shmem_hi),
> +};
> +
> static __u64 zicbom_regs[] = {
> KVM_REG_RISCV | KVM_REG_SIZE_ULONG | KVM_REG_RISCV_CONFIG | KVM_REG_RISCV_CONFIG_REG(zicbom_block_size),
> KVM_REG_RISCV | KVM_REG_SIZE_ULONG | KVM_REG_RISCV_ISA_EXT | KVM_REG_RISCV_ISA_SINGLE | KVM_RISCV_ISA_EXT_ZICBOM,
> @@ -757,6 +795,9 @@ static __u64 fp_d_regs[] = {
> #define SUBLIST_SBI_BASE \
> {"sbi-base", .feature_type = VCPU_FEATURE_SBI_EXT, .feature = KVM_RISCV_SBI_EXT_V01, \
> .regs = sbi_base_regs, .regs_n = ARRAY_SIZE(sbi_base_regs),}
> +#define SUBLIST_SBI_STA \
> + {"sbi-sta", .feature_type = VCPU_FEATURE_SBI_EXT, .feature = KVM_RISCV_SBI_EXT_STA, \
> + .regs = sbi_sta_regs, .regs_n = ARRAY_SIZE(sbi_sta_regs),}
> #define SUBLIST_ZICBOM \
> {"zicbom", .feature = KVM_RISCV_ISA_EXT_ZICBOM, .regs = zicbom_regs, .regs_n = ARRAY_SIZE(zicbom_regs),}
> #define SUBLIST_ZICBOZ \
> @@ -832,6 +873,7 @@ static struct vcpu_reg_list config_sbi_##ext = { \
> /* Note: The below list is alphabetically sorted. */
>
> KVM_SBI_EXT_SUBLIST_CONFIG(base, BASE);
> +KVM_SBI_EXT_SUBLIST_CONFIG(sta, STA);
> KVM_SBI_EXT_SIMPLE_CONFIG(pmu, PMU);
> KVM_SBI_EXT_SIMPLE_CONFIG(dbcn, DBCN);
>
> @@ -858,6 +900,7 @@ KVM_ISA_EXT_SIMPLE_CONFIG(zihpm, ZIHPM);
>
> struct vcpu_reg_list *vcpu_configs[] = {
> &config_sbi_base,
> + &config_sbi_sta,
> &config_sbi_pmu,
> &config_sbi_dbcn,
> &config_aia,
> --
> 2.43.0
>
Reviewed-by: Atish Patra <atishp at rivosinc.com>
--
Regards,
Atish
More information about the kvm-riscv
mailing list