Merge tag 'kvm-riscv-6.13-2' of https://github.com/kvm-riscv/linux into HEAD
authorPaolo Bonzini <pbonzini@redhat.com>
Wed, 27 Nov 2024 17:00:28 +0000 (12:00 -0500)
committerPaolo Bonzini <pbonzini@redhat.com>
Wed, 27 Nov 2024 17:00:28 +0000 (12:00 -0500)
KVM/riscv changes for 6.13 part #2

- Svade and Svadu extension support for Host and Guest/VM

1  2 
Documentation/devicetree/bindings/riscv/extensions.yaml
arch/riscv/Kconfig
arch/riscv/include/asm/csr.h
arch/riscv/include/asm/hwcap.h
arch/riscv/include/uapi/asm/kvm.h
arch/riscv/kernel/cpufeature.c
arch/riscv/kvm/vcpu_onereg.c
tools/testing/selftests/kvm/riscv/get-reg-list.c

Simple merge
  /* xENVCFG flags */
  #define ENVCFG_STCE                   (_AC(1, ULL) << 63)
  #define ENVCFG_PBMTE                  (_AC(1, ULL) << 62)
+ #define ENVCFG_ADUE                   (_AC(1, ULL) << 61)
 +#define ENVCFG_PMM                    (_AC(0x3, ULL) << 32)
 +#define ENVCFG_PMM_PMLEN_0            (_AC(0x0, ULL) << 32)
 +#define ENVCFG_PMM_PMLEN_7            (_AC(0x2, ULL) << 32)
 +#define ENVCFG_PMM_PMLEN_16           (_AC(0x3, ULL) << 32)
  #define ENVCFG_CBZE                   (_AC(1, UL) << 7)
  #define ENVCFG_CBCFE                  (_AC(1, UL) << 6)
  #define ENVCFG_CBIE_SHIFT             4
  #define RISCV_ISA_EXT_ZCMOP           84
  #define RISCV_ISA_EXT_ZAWRS           85
  #define RISCV_ISA_EXT_SVVPTC          86
 -#define RISCV_ISA_EXT_SVADE           87
 -#define RISCV_ISA_EXT_SVADU           88
 +#define RISCV_ISA_EXT_SMMPM           87
 +#define RISCV_ISA_EXT_SMNPM           88
 +#define RISCV_ISA_EXT_SSNPM           89
 +#define RISCV_ISA_EXT_ZABHA           90
 +#define RISCV_ISA_EXT_ZICCRSE         91
++#define RISCV_ISA_EXT_SVADE           92
++#define RISCV_ISA_EXT_SVADU           93
  
  #define RISCV_ISA_EXT_XLINUXENVCFG    127
  
@@@ -175,8 -175,8 +175,10 @@@ enum KVM_RISCV_ISA_EXT_ID 
        KVM_RISCV_ISA_EXT_ZCF,
        KVM_RISCV_ISA_EXT_ZCMOP,
        KVM_RISCV_ISA_EXT_ZAWRS,
 +      KVM_RISCV_ISA_EXT_SMNPM,
 +      KVM_RISCV_ISA_EXT_SSNPM,
+       KVM_RISCV_ISA_EXT_SVADE,
+       KVM_RISCV_ISA_EXT_SVADU,
        KVM_RISCV_ISA_EXT_MAX,
  };
  
@@@ -384,8 -387,9 +394,10 @@@ const struct riscv_isa_ext_data riscv_i
        __RISCV_ISA_EXT_DATA(smstateen, RISCV_ISA_EXT_SMSTATEEN),
        __RISCV_ISA_EXT_DATA(ssaia, RISCV_ISA_EXT_SSAIA),
        __RISCV_ISA_EXT_DATA(sscofpmf, RISCV_ISA_EXT_SSCOFPMF),
 +      __RISCV_ISA_EXT_SUPERSET(ssnpm, RISCV_ISA_EXT_SSNPM, riscv_xlinuxenvcfg_exts),
        __RISCV_ISA_EXT_DATA(sstc, RISCV_ISA_EXT_SSTC),
+       __RISCV_ISA_EXT_DATA(svade, RISCV_ISA_EXT_SVADE),
+       __RISCV_ISA_EXT_DATA_VALIDATE(svadu, RISCV_ISA_EXT_SVADU, riscv_ext_svadu_validate),
        __RISCV_ISA_EXT_DATA(svinval, RISCV_ISA_EXT_SVINVAL),
        __RISCV_ISA_EXT_DATA(svnapot, RISCV_ISA_EXT_SVNAPOT),
        __RISCV_ISA_EXT_DATA(svpbmt, RISCV_ISA_EXT_SVPBMT),
@@@ -38,8 -38,9 +39,10 @@@ static const unsigned long kvm_isa_ext_
        KVM_ISA_EXT_ARR(SMSTATEEN),
        KVM_ISA_EXT_ARR(SSAIA),
        KVM_ISA_EXT_ARR(SSCOFPMF),
 +      KVM_ISA_EXT_ARR(SSNPM),
        KVM_ISA_EXT_ARR(SSTC),
+       KVM_ISA_EXT_ARR(SVADE),
+       KVM_ISA_EXT_ARR(SVADU),
        KVM_ISA_EXT_ARR(SVINVAL),
        KVM_ISA_EXT_ARR(SVNAPOT),
        KVM_ISA_EXT_ARR(SVPBMT),
@@@ -45,8 -44,9 +45,10 @@@ bool filter_reg(__u64 reg
        case KVM_REG_RISCV_ISA_EXT | KVM_REG_RISCV_ISA_SINGLE | KVM_RISCV_ISA_EXT_SMSTATEEN:
        case KVM_REG_RISCV_ISA_EXT | KVM_REG_RISCV_ISA_SINGLE | KVM_RISCV_ISA_EXT_SSAIA:
        case KVM_REG_RISCV_ISA_EXT | KVM_REG_RISCV_ISA_SINGLE | KVM_RISCV_ISA_EXT_SSCOFPMF:
 +      case KVM_REG_RISCV_ISA_EXT | KVM_REG_RISCV_ISA_SINGLE | KVM_RISCV_ISA_EXT_SSNPM:
        case KVM_REG_RISCV_ISA_EXT | KVM_REG_RISCV_ISA_SINGLE | KVM_RISCV_ISA_EXT_SSTC:
+       case KVM_REG_RISCV_ISA_EXT | KVM_REG_RISCV_ISA_SINGLE | KVM_RISCV_ISA_EXT_SVADE:
+       case KVM_REG_RISCV_ISA_EXT | KVM_REG_RISCV_ISA_SINGLE | KVM_RISCV_ISA_EXT_SVADU:
        case KVM_REG_RISCV_ISA_EXT | KVM_REG_RISCV_ISA_SINGLE | KVM_RISCV_ISA_EXT_SVINVAL:
        case KVM_REG_RISCV_ISA_EXT | KVM_REG_RISCV_ISA_SINGLE | KVM_RISCV_ISA_EXT_SVNAPOT:
        case KVM_REG_RISCV_ISA_EXT | KVM_REG_RISCV_ISA_SINGLE | KVM_RISCV_ISA_EXT_SVPBMT:
@@@ -420,8 -419,9 +422,10 @@@ static const char *isa_ext_single_id_to
                KVM_ISA_EXT_ARR(SMSTATEEN),
                KVM_ISA_EXT_ARR(SSAIA),
                KVM_ISA_EXT_ARR(SSCOFPMF),
 +              KVM_ISA_EXT_ARR(SSNPM),
                KVM_ISA_EXT_ARR(SSTC),
+               KVM_ISA_EXT_ARR(SVADE),
+               KVM_ISA_EXT_ARR(SVADU),
                KVM_ISA_EXT_ARR(SVINVAL),
                KVM_ISA_EXT_ARR(SVNAPOT),
                KVM_ISA_EXT_ARR(SVPBMT),
@@@ -950,11 -950,11 +954,13 @@@ KVM_ISA_EXT_SUBLIST_CONFIG(aia, AIA)
  KVM_ISA_EXT_SUBLIST_CONFIG(fp_f, FP_F);
  KVM_ISA_EXT_SUBLIST_CONFIG(fp_d, FP_D);
  KVM_ISA_EXT_SIMPLE_CONFIG(h, H);
 +KVM_ISA_EXT_SIMPLE_CONFIG(smnpm, SMNPM);
  KVM_ISA_EXT_SUBLIST_CONFIG(smstateen, SMSTATEEN);
  KVM_ISA_EXT_SIMPLE_CONFIG(sscofpmf, SSCOFPMF);
 +KVM_ISA_EXT_SIMPLE_CONFIG(ssnpm, SSNPM);
  KVM_ISA_EXT_SIMPLE_CONFIG(sstc, SSTC);
+ KVM_ISA_EXT_SIMPLE_CONFIG(svade, SVADE);
+ KVM_ISA_EXT_SIMPLE_CONFIG(svadu, SVADU);
  KVM_ISA_EXT_SIMPLE_CONFIG(svinval, SVINVAL);
  KVM_ISA_EXT_SIMPLE_CONFIG(svnapot, SVNAPOT);
  KVM_ISA_EXT_SIMPLE_CONFIG(svpbmt, SVPBMT);
@@@ -1015,11 -1015,11 +1021,13 @@@ struct vcpu_reg_list *vcpu_configs[] = 
        &config_fp_f,
        &config_fp_d,
        &config_h,
 +      &config_smnpm,
        &config_smstateen,
        &config_sscofpmf,
 +      &config_ssnpm,
        &config_sstc,
+       &config_svade,
+       &config_svadu,
        &config_svinval,
        &config_svnapot,
        &config_svpbmt,