@@ -177,6 +177,7 @@ kvm_reg_list {
177177
178178kvm_device_attr [
179179 attr_arm64 kvm_device_attr_arm64
180+ attr_riscv64 kvm_device_attr_riscv64
180181 attr_other kvm_device_attr_generic
181182]
182183
@@ -194,6 +195,71 @@ kvm_device_attr_arm64 {
194195 addr ptr64[inout, int64]
195196}
196197
198+ # Device attributes from arch/riscv/kvm/aia_device.c .
199+ kvm_device_attr_riscv64 [
200+ attr_config kvm_attr_config_riscv64
201+ attr_addr kvm_attr_addr_riscv64
202+ attr_ctrl kvm_attr_ctrl_riscv64
203+ attr_aplic kvm_attr_aplic_riscv64
204+ attr_imsic kvm_attr_imsic_riscv64
205+ ]
206+
207+ kvm_attr_config_riscv64 {
208+ flags const[0, int32]
209+ group const[KVM_DEV_RISCV_AIA_GRP_CONFIG, int32]
210+ attr flags[kvm_config_attributes_riscv64, int64]
211+ addr ptr64[inout, int64]
212+ }
213+
214+ # Config attributes from arch/riscv/kvm/aia_device.c aia_has_attr() .
215+ kvm_config_attributes_riscv64 = KVM_DEV_RISCV_AIA_CONFIG_MODE, KVM_DEV_RISCV_AIA_CONFIG_IDS, KVM_DEV_RISCV_AIA_CONFIG_SRCS, KVM_DEV_RISCV_AIA_CONFIG_GROUP_BITS, KVM_DEV_RISCV_AIA_CONFIG_GROUP_SHIFT, KVM_DEV_RISCV_AIA_CONFIG_HART_BITS, KVM_DEV_RISCV_AIA_CONFIG_GUEST_BITS
216+
217+ kvm_attr_addr_riscv64 {
218+ flags const[0, int32]
219+ group const[KVM_DEV_RISCV_AIA_GRP_ADDR, int32]
220+ attr kvm_addr_attributes_riscv64
221+ addr ptr64[inout, int64]
222+ }
223+
224+ kvm_addr_attributes_riscv64 [
225+ aplic const[KVM_DEV_RISCV_AIA_ADDR_APLIC, int64]
226+ # KVM_DEV_RISCV_AIA_ADDR_IMSIC(nr_vcpus) = 1 + nr_vcpus.
227+ # Assume nr_vcpus <= 4 (SYZOS limit), so enumerate 1..5.
228+ # Include 0 as a corner case.
229+ imsic int64[0:5]
230+ ]
231+
232+ kvm_attr_ctrl_riscv64 {
233+ flags const[0, int32]
234+ group const[KVM_DEV_RISCV_AIA_GRP_CTRL, int32]
235+ attr const[KVM_DEV_RISCV_AIA_CTRL_INIT, int64]
236+ addr ptr64[inout, int64]
237+ }
238+
239+ kvm_attr_aplic_riscv64 {
240+ flags const[0, int32]
241+ group const[KVM_DEV_RISCV_AIA_GRP_APLIC, int32]
242+ attr kvm_aplic_attributes_riscv64
243+ addr ptr64[inout, int64]
244+ }
245+
246+ kvm_aplic_attributes_riscv64 [
247+ valid flags[kvm_aplic_valid_attributes_riscv64, int64]
248+ any int64
249+ ]
250+
251+ # Find APLIC_DOMAINCFG, APLIC_SETIPNUM, APLIC_CLRIPNUM, APLIC_SETIENUM,
252+ # APLIC_CLRIENUM, APLIC_SETIPNUM_LE, APLIC_SETIPNUM_BE, APLIC_GENMSI
253+ # in include/linux/irqchip/riscv-aplic.h .
254+ kvm_aplic_valid_attributes_riscv64 = 0x0, 0x1cdc, 0x1ddc, 0x1edc, 0x1fdc, 0x2000, 0x2004, 0x3000
255+
256+ kvm_attr_imsic_riscv64 {
257+ flags const[0, int32]
258+ group const[KVM_DEV_RISCV_AIA_GRP_IMSIC, int32]
259+ attr int64
260+ addr ptr64[inout, int64]
261+ }
262+
197263# Assorted device attributes from
198264# - https://docs.kernel.org/virt/kvm/devices/arm-vgic-its.html,
199265# - https://docs.kernel.org/virt/kvm/devices/arm-vgic.html,
0 commit comments