xref: /linux/Documentation/virt/kvm/devices/arm-vgic-v5.rst (revision 01f492e1817e858d1712f2489d0afbaa552f417b)
1.. SPDX-License-Identifier: GPL-2.0
2
3====================================================
4ARM Virtual Generic Interrupt Controller v5 (VGICv5)
5====================================================
6
7
8Device types supported:
9  - KVM_DEV_TYPE_ARM_VGIC_V5     ARM Generic Interrupt Controller v5.0
10
11Only one VGIC instance may be instantiated through this API.  The created VGIC
12will act as the VM interrupt controller, requiring emulated user-space devices
13to inject interrupts to the VGIC instead of directly to CPUs.
14
15Creating a guest GICv5 device requires a host GICv5 host.  The current VGICv5
16device only supports PPI interrupts.  These can either be injected from emulated
17in-kernel devices (such as the Arch Timer, or PMU), or via the KVM_IRQ_LINE
18ioctl.
19
20Groups:
21  KVM_DEV_ARM_VGIC_GRP_CTRL
22   Attributes:
23
24    KVM_DEV_ARM_VGIC_CTRL_INIT
25      request the initialization of the VGIC, no additional parameter in
26      kvm_device_attr.addr. Must be called after all VCPUs have been created.
27
28   KVM_DEV_ARM_VGIC_USERPSPACE_PPIs
29      request the mask of userspace-drivable PPIs. Only a subset of the PPIs can
30      be directly driven from userspace with GICv5, and the returned mask
31      informs userspace of which it is allowed to drive via KVM_IRQ_LINE.
32
33      Userspace must allocate and point to __u64[2] of data in
34      kvm_device_attr.addr. When this call returns, the provided memory will be
35      populated with the userspace PPI mask. The lower __u64 contains the mask
36      for the lower 64 PPIS, with the remaining 64 being in the second __u64.
37
38      This is a read-only attribute, and cannot be set. Attempts to set it are
39      rejected.
40
41  Errors:
42
43    =======  ========================================================
44    -ENXIO   VGIC not properly configured as required prior to calling
45             this attribute
46    -ENODEV  no online VCPU
47    -ENOMEM  memory shortage when allocating vgic internal data
48    -EFAULT  Invalid guest ram access
49    -EBUSY   One or more VCPUS are running
50    =======  ========================================================
51