Skip to content

Commit aad86da

Browse files
Andrew Jonesavpatel
authored andcommitted
RISC-V: KVM: selftests: Add get-reg-list test for STA registers
Add SBI STA and its two registers to the get-reg-list test. Reviewed-by: Anup Patel <anup@brainfault.org> Reviewed-by: Atish Patra <atishp@rivosinc.com> Signed-off-by: Andrew Jones <ajones@ventanamicro.com> Signed-off-by: Anup Patel <anup@brainfault.org>
1 parent 60b6e31 commit aad86da

1 file changed

Lines changed: 43 additions & 0 deletions

File tree

tools/testing/selftests/kvm/riscv/get-reg-list.c

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -71,6 +71,7 @@ bool filter_reg(__u64 reg)
7171
case KVM_REG_RISCV_SBI_EXT | KVM_REG_RISCV_SBI_SINGLE | KVM_RISCV_SBI_EXT_HSM:
7272
case KVM_REG_RISCV_SBI_EXT | KVM_REG_RISCV_SBI_SINGLE | KVM_RISCV_SBI_EXT_PMU:
7373
case KVM_REG_RISCV_SBI_EXT | KVM_REG_RISCV_SBI_SINGLE | KVM_RISCV_SBI_EXT_DBCN:
74+
case KVM_REG_RISCV_SBI_EXT | KVM_REG_RISCV_SBI_SINGLE | KVM_RISCV_SBI_EXT_STA:
7475
case KVM_REG_RISCV_SBI_EXT | KVM_REG_RISCV_SBI_SINGLE | KVM_RISCV_SBI_EXT_EXPERIMENTAL:
7576
case KVM_REG_RISCV_SBI_EXT | KVM_REG_RISCV_SBI_SINGLE | KVM_RISCV_SBI_EXT_VENDOR:
7677
return true;
@@ -461,6 +462,7 @@ static const char *sbi_ext_single_id_to_str(__u64 reg_off)
461462
KVM_SBI_EXT_ARR(KVM_RISCV_SBI_EXT_SRST),
462463
KVM_SBI_EXT_ARR(KVM_RISCV_SBI_EXT_HSM),
463464
KVM_SBI_EXT_ARR(KVM_RISCV_SBI_EXT_PMU),
465+
KVM_SBI_EXT_ARR(KVM_RISCV_SBI_EXT_STA),
464466
KVM_SBI_EXT_ARR(KVM_RISCV_SBI_EXT_EXPERIMENTAL),
465467
KVM_SBI_EXT_ARR(KVM_RISCV_SBI_EXT_VENDOR),
466468
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)
509511
return strdup_printf("%lld | %lld /* UNKNOWN */", reg_subtype, reg_off);
510512
}
511513

514+
static const char *sbi_sta_id_to_str(__u64 reg_off)
515+
{
516+
switch (reg_off) {
517+
case 0: return "KVM_REG_RISCV_SBI_STA | KVM_REG_RISCV_SBI_STA_REG(shmem_lo)";
518+
case 1: return "KVM_REG_RISCV_SBI_STA | KVM_REG_RISCV_SBI_STA_REG(shmem_hi)";
519+
}
520+
return strdup_printf("KVM_REG_RISCV_SBI_STA | %lld /* UNKNOWN */", reg_off);
521+
}
522+
523+
static const char *sbi_id_to_str(const char *prefix, __u64 id)
524+
{
525+
__u64 reg_off = id & ~(REG_MASK | KVM_REG_RISCV_SBI_STATE);
526+
__u64 reg_subtype = reg_off & KVM_REG_RISCV_SUBTYPE_MASK;
527+
528+
assert((id & KVM_REG_RISCV_TYPE_MASK) == KVM_REG_RISCV_SBI_STATE);
529+
530+
reg_off &= ~KVM_REG_RISCV_SUBTYPE_MASK;
531+
532+
switch (reg_subtype) {
533+
case KVM_REG_RISCV_SBI_STA:
534+
return sbi_sta_id_to_str(reg_off);
535+
}
536+
537+
return strdup_printf("%lld | %lld /* UNKNOWN */", reg_subtype, reg_off);
538+
}
539+
512540
void print_reg(const char *prefix, __u64 id)
513541
{
514542
const char *reg_size = NULL;
@@ -565,6 +593,10 @@ void print_reg(const char *prefix, __u64 id)
565593
printf("\tKVM_REG_RISCV | %s | KVM_REG_RISCV_SBI_EXT | %s,\n",
566594
reg_size, sbi_ext_id_to_str(prefix, id));
567595
break;
596+
case KVM_REG_RISCV_SBI_STATE:
597+
printf("\tKVM_REG_RISCV | %s | KVM_REG_RISCV_SBI_STATE | %s,\n",
598+
reg_size, sbi_id_to_str(prefix, id));
599+
break;
568600
default:
569601
printf("\tKVM_REG_RISCV | %s | 0x%llx /* UNKNOWN */,\n",
570602
reg_size, id & ~REG_MASK);
@@ -651,6 +683,12 @@ static __u64 sbi_base_regs[] = {
651683
KVM_REG_RISCV | KVM_REG_SIZE_ULONG | KVM_REG_RISCV_SBI_EXT | KVM_REG_RISCV_SBI_SINGLE | KVM_RISCV_SBI_EXT_VENDOR,
652684
};
653685

686+
static __u64 sbi_sta_regs[] = {
687+
KVM_REG_RISCV | KVM_REG_SIZE_ULONG | KVM_REG_RISCV_SBI_EXT | KVM_REG_RISCV_SBI_SINGLE | KVM_RISCV_SBI_EXT_STA,
688+
KVM_REG_RISCV | KVM_REG_SIZE_ULONG | KVM_REG_RISCV_SBI_STATE | KVM_REG_RISCV_SBI_STA | KVM_REG_RISCV_SBI_STA_REG(shmem_lo),
689+
KVM_REG_RISCV | KVM_REG_SIZE_ULONG | KVM_REG_RISCV_SBI_STATE | KVM_REG_RISCV_SBI_STA | KVM_REG_RISCV_SBI_STA_REG(shmem_hi),
690+
};
691+
654692
static __u64 zicbom_regs[] = {
655693
KVM_REG_RISCV | KVM_REG_SIZE_ULONG | KVM_REG_RISCV_CONFIG | KVM_REG_RISCV_CONFIG_REG(zicbom_block_size),
656694
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[] = {
757795
#define SUBLIST_SBI_BASE \
758796
{"sbi-base", .feature_type = VCPU_FEATURE_SBI_EXT, .feature = KVM_RISCV_SBI_EXT_V01, \
759797
.regs = sbi_base_regs, .regs_n = ARRAY_SIZE(sbi_base_regs),}
798+
#define SUBLIST_SBI_STA \
799+
{"sbi-sta", .feature_type = VCPU_FEATURE_SBI_EXT, .feature = KVM_RISCV_SBI_EXT_STA, \
800+
.regs = sbi_sta_regs, .regs_n = ARRAY_SIZE(sbi_sta_regs),}
760801
#define SUBLIST_ZICBOM \
761802
{"zicbom", .feature = KVM_RISCV_ISA_EXT_ZICBOM, .regs = zicbom_regs, .regs_n = ARRAY_SIZE(zicbom_regs),}
762803
#define SUBLIST_ZICBOZ \
@@ -832,6 +873,7 @@ static struct vcpu_reg_list config_sbi_##ext = { \
832873
/* Note: The below list is alphabetically sorted. */
833874

834875
KVM_SBI_EXT_SUBLIST_CONFIG(base, BASE);
876+
KVM_SBI_EXT_SUBLIST_CONFIG(sta, STA);
835877
KVM_SBI_EXT_SIMPLE_CONFIG(pmu, PMU);
836878
KVM_SBI_EXT_SIMPLE_CONFIG(dbcn, DBCN);
837879

@@ -858,6 +900,7 @@ KVM_ISA_EXT_SIMPLE_CONFIG(zihpm, ZIHPM);
858900

859901
struct vcpu_reg_list *vcpu_configs[] = {
860902
&config_sbi_base,
903+
&config_sbi_sta,
861904
&config_sbi_pmu,
862905
&config_sbi_dbcn,
863906
&config_aia,

0 commit comments

Comments
 (0)