Home
last modified time | relevance | path

Searched full:vgic (Results 1 – 25 of 72) sorted by relevance

123

/openbmc/linux/arch/arm64/kvm/
H A DMakefile16 vgic-sys-reg-v3.o fpsimd.o pkvm.o \
18 vgic/vgic.o vgic/vgic-init.o \
19 vgic/vgic-irqfd.o vgic/vgic-v2.o \
20 vgic/vgic-v3.o vgic/vgic-v4.o \
21 vgic/vgic-mmio.o vgic/vgic-mmio-v2.o \
22 vgic/vgic-mmio-v3.o vgic/vgic-kvm-device.o \
23 vgic/vgic-its.o vgic/vgic-debug.o
H A Dvgic-sys-reg-v3.c3 * VGIC system registers handling functions for AArch64 mode
10 #include "vgic/vgic.h"
/openbmc/linux/arch/arm64/kvm/vgic/
H A Dvgic-init.c13 #include "vgic.h"
16 * Initialization rules: there are multiple stages to the vgic
18 * idea is that even though the VGIC is not functional or not requested from
19 * user space, the critical path of the run loop can still call VGIC functions
45 * kvm_vgic_early_init() - Initialize static VGIC VCPU data structures
46 * @kvm: The VM whose VGIC districutor should be initialized
54 struct vgic_dist *dist = &kvm->arch.vgic; in kvm_vgic_early_init()
64 * kvm_vgic_create: triggered by the instantiation of the VGIC device by
117 kvm->arch.vgic.in_kernel = true; in kvm_vgic_create()
118 kvm->arch.vgic.vgic_model = type; in kvm_vgic_create()
[all …]
H A Dvgic-kvm-device.c3 * VGIC: KVM DEVICE API
13 #include "vgic.h"
38 if (kvm->arch.vgic.vgic_model != type_needed) in vgic_check_type()
46 struct vgic_dist *vgic = &kvm->arch.vgic; in kvm_set_legacy_vgic_v2_addr() local
54 r = vgic_check_iorange(kvm, vgic->vgic_dist_base, dev_addr->addr, in kvm_set_legacy_vgic_v2_addr()
57 vgic->vgic_dist_base = dev_addr->addr; in kvm_set_legacy_vgic_v2_addr()
62 r = vgic_check_iorange(kvm, vgic->vgic_cpu_base, dev_addr->addr, in kvm_set_legacy_vgic_v2_addr()
65 vgic->vgic_cpu_base = dev_addr->addr; in kvm_set_legacy_vgic_v2_addr()
77 * kvm_vgic_addr - set or get vgic VM base addresses
83 * Set or get the vgic base addresses for the distributor and the virtual CPU
[all …]
H A Dvgic-debug.c14 #include "vgic.h"
17 * Structure to control looping through the entire vgic state. We start at
63 iter->nr_spis = kvm->arch.vgic.nr_spis; in iter_init()
64 if (kvm->arch.vgic.vgic_model == KVM_DEV_TYPE_ARM_VGIC_V3) { in iter_init()
89 iter = kvm->arch.vgic.iter; in vgic_debug_start()
102 kvm->arch.vgic.iter = iter; in vgic_debug_start()
114 struct vgic_state_iter *iter = kvm->arch.vgic.iter; in vgic_debug_next()
136 iter = kvm->arch.vgic.iter; in vgic_debug_stop()
139 kvm->arch.vgic.iter = NULL; in vgic_debug_stop()
239 print_dist_state(s, &kvm->arch.vgic); in vgic_debug_show()
[all …]
H A Dvgic-v3.c14 #include "vgic.h"
39 u32 model = vcpu->kvm->arch.vgic.vgic_model; in vgic_v3_fold_lr_state()
109 u32 model = vcpu->kvm->arch.vgic.vgic_model; in vgic_v3_populate_lr()
174 * rising edges as input to the VGIC. We therefore lower the line in vgic_v3_populate_lr()
197 u32 model = vcpu->kvm->arch.vgic.vgic_model; in vgic_v3_set_vmcr()
227 u32 model = vcpu->kvm->arch.vgic.vgic_model; in vgic_v3_get_vmcr()
277 if (vcpu->kvm->arch.vgic.vgic_model == KVM_DEV_TYPE_ARM_VGIC_V3) { in vgic_v3_enable()
356 struct vgic_dist *dist = &kvm->arch.vgic; in unmap_all_vpes()
365 struct vgic_dist *dist = &kvm->arch.vgic; in map_all_vpes()
379 struct vgic_dist *dist = &kvm->arch.vgic; in vgic_v3_save_pending_tables()
[all …]
H A Dvgic-mmio-v2.c14 #include "vgic.h"
15 #include "vgic-mmio.h"
28 struct vgic_dist *vgic = &vcpu->kvm->arch.vgic; in vgic_mmio_read_v2_misc() local
33 value = vgic->enabled ? GICD_ENABLE : 0; in vgic_mmio_read_v2_misc()
36 value = vgic->nr_spis + VGIC_NR_PRIVATE_IRQS; in vgic_mmio_read_v2_misc()
42 (vgic->implementation_rev << GICD_IIDR_REVISION_SHIFT) | in vgic_mmio_read_v2_misc()
56 struct vgic_dist *dist = &vcpu->kvm->arch.vgic; in vgic_mmio_write_v2_misc()
76 struct vgic_dist *dist = &vcpu->kvm->arch.vgic; in vgic_mmio_uaccess_write_v2_misc()
98 vcpu->kvm->arch.vgic.v2_groups_user_writable = true; in vgic_mmio_uaccess_write_v2_misc()
114 if (vcpu->kvm->arch.vgic.v2_groups_user_writable) in vgic_mmio_uaccess_write_v2_group()
H A Dvgic-v2.c12 #include "vgic.h"
187 * rising edges as input to the VGIC. We therefore lower the line in vgic_v2_populate_lr()
291 struct vgic_dist *dist = &kvm->arch.vgic; in vgic_v2_map_resources()
296 kvm_debug("Need to set vgic cpu and dist addresses first\n"); in vgic_v2_map_resources()
301 kvm_debug("VGIC CPU and dist frames overlap\n"); in vgic_v2_map_resources()
306 * Initialize the vgic if this hasn't already been done on demand by in vgic_v2_map_resources()
307 * accessing the vgic state from userspace. in vgic_v2_map_resources()
311 kvm_err("Unable to initialize VGIC dynamic data structures\n"); in vgic_v2_map_resources()
320 kvm_err("Unable to remap VGIC CPU to VCPU\n"); in vgic_v2_map_resources()
391 kvm_debug("vgic-v2@%llx\n", info->vctrl.start); in vgic_v2_probe()
H A Dvgic-mmio-v3.c18 #include "vgic.h"
19 #include "vgic-mmio.h"
43 struct vgic_dist *dist = &kvm->arch.vgic; in vgic_has_its()
67 struct vgic_dist *vgic = &vcpu->kvm->arch.vgic; in vgic_mmio_read_v3_misc() local
72 if (vgic->enabled) in vgic_mmio_read_v3_misc()
75 if (vgic->nassgireq) in vgic_mmio_read_v3_misc()
79 value = vgic->nr_spis + VGIC_NR_PRIVATE_IRQS; in vgic_mmio_read_v3_misc()
94 (vgic->implementation_rev << GICD_IIDR_REVISION_SHIFT) | in vgic_mmio_read_v3_misc()
108 struct vgic_dist *dist = &vcpu->kvm->arch.vgic; in vgic_mmio_write_v3_misc()
157 struct vgic_dist *dist = &vcpu->kvm->arch.vgic; in vgic_mmio_uaccess_write_v3_misc()
[all …]
H A Dvgic-mmio.c3 * VGIC MMIO handling functions
16 #include "vgic.h"
17 #include "vgic-mmio.h"
148 * while the interrupt was disabled at the VGIC level. in vgic_mmio_write_senable()
249 * Refer to Documentation/virt/kvm/devices/arm-vgic-v3.rst in __read_pending()
264 switch (vcpu->kvm->arch.vgic.vgic_model) { in __read_pending()
301 vcpu->kvm->arch.vgic.vgic_model == KVM_DEV_TYPE_ARM_VGIC_V2); in is_vgic_v2_sgi()
388 * can happen is an additional vgic injection. We also clear in vgic_hw_irq_cpending()
482 * userspace accesses to the VGIC state already require all VCPUs to be
488 if ((vcpu->kvm->arch.vgic.vgic_model == KVM_DEV_TYPE_ARM_VGIC_V3 && in vgic_access_active_prepare()
[all …]
H A Dvgic.h38 * Below macro converts vgic userspace format to MPIDR reg format.
46 * As per Documentation/virt/kvm/devices/arm-vgic-v3.rst,
67 * As per Documentation/virt/kvm/devices/arm-vgic-its.rst,
104 return vcpu->kvm->arch.vgic.implementation_rev; in vgic_get_implementation_rev()
138 struct vgic_dist *dist = &kvm->arch.vgic; in vgic_write_guest_lock()
342 struct vgic_dist *d = &kvm->arch.vgic; in vgic_dist_overlap()
373 kvm->arch.vgic.vgic_model == KVM_DEV_TYPE_ARM_VGIC_V3); in kvm_has_gicv3()
H A Dvgic.c15 #include "vgic.h"
51 * Since the VGIC must support injecting virtual interrupts from ISRs, we have
62 struct vgic_dist *dist = &kvm->arch.vgic; in vgic_get_lpi()
102 if (intid < (kvm->arch.vgic.nr_spis + VGIC_NR_PRIVATE_IRQS)) { in vgic_get_irq()
103 intid = array_index_nospec(intid, kvm->arch.vgic.nr_spis + VGIC_NR_PRIVATE_IRQS); in vgic_get_irq()
104 return &kvm->arch.vgic.spis[intid - VGIC_NR_PRIVATE_IRQS]; in vgic_get_irq()
128 struct vgic_dist *dist = &kvm->arch.vgic; in __vgic_put_lpi_locked()
141 struct vgic_dist *dist = &kvm->arch.vgic; in vgic_put_irq()
232 !irq->target_vcpu->kvm->arch.vgic.enabled)) in vgic_target_oracle()
423 * kvm_vgic_inject_irq - Inject an IRQ from a device to the vgic
[all …]
H A Dvgic-v4.c13 #include "vgic.h"
18 * The vgic-v4 layer acts as a bridge between several entities:
189 struct vgic_dist *dist = &kvm->arch.vgic; in vgic_v4_configure_vsgis()
236 * vgic is initialized. In both cases, the number of vcpus
241 struct vgic_dist *dist = &kvm->arch.vgic; in vgic_v4_init()
317 struct its_vm *its_vm = &kvm->arch.vgic.its_vm; in vgic_v4_teardown()
370 err = its_make_vpe_resident(vpe, false, vcpu->kvm->arch.vgic.enabled); in vgic_v4_load()
446 .vm = &kvm->arch.vgic.its_vm, in kvm_vgic_v4_set_forwarding()
H A Dvgic-irqfd.c10 #include "vgic.h"
125 * as long as the damn vgic is initialized. in kvm_arch_set_irq_inatomic()
138 struct vgic_dist *dist = &kvm->arch.vgic; in kvm_vgic_setup_default_irq_routing()
/openbmc/linux/arch/arm64/kvm/hyp/
H A Dvgic-v2-cpuif-proxy.c40 struct vgic_dist *vgic = &kvm->arch.vgic; in __vgic_v2_perform_cpuif_access() local
50 if (fault_ipa < vgic->vgic_cpu_base || in __vgic_v2_perform_cpuif_access()
51 fault_ipa >= (vgic->vgic_cpu_base + KVM_VGIC_V2_CPU_SIZE)) in __vgic_v2_perform_cpuif_access()
68 addr += fault_ipa - vgic->vgic_cpu_base; in __vgic_v2_perform_cpuif_access()
/openbmc/linux/Documentation/virt/kvm/devices/
H A Dindex.rst10 arm-vgic-its
11 arm-vgic
12 arm-vgic-v3
H A Darm-vgic.rst4 ARM Virtual Generic Interrupt Controller v2 (VGIC)
11 Only one VGIC instance may be instantiated through either this API or the
12 legacy KVM_CREATE_IRQCHIP API. The created VGIC will act as the VM interrupt
14 VGIC instead of directly to CPUs.
18 device and guest ITS devices, see arm-vgic-v3.txt. It is not possible to
146 request the initialization of the VGIC or ITS, no additional parameter
152 -ENXIO VGIC not properly configured as required prior to calling
155 -ENOMEM memory shortage when allocating vgic internal data
H A Darm-vgic-v3.rst11 Only one VGIC instance may be instantiated through this API. The created VGIC
13 to inject interrupts to the VGIC instead of directly to CPUs. It is not
102 VGIC's internal state.
230 request the initialization of the VGIC, no additional parameter in
240 -ENXIO VGIC not properly configured as required prior to calling
243 -ENOMEM memory shortage when allocating vgic internal data
/openbmc/linux/include/kvm/
H A Darm_vgic.h48 /* Physical address of vgic virtual cpu interface */
229 /* vGIC model the kernel emulates for the guest (GICv2 or GICv3) */
284 /* used by vgic-debug */
392 #define irqchip_in_kernel(k) (!!((k)->arch.vgic.in_kernel))
393 #define vgic_initialized(k) ((k)->arch.vgic.initialized)
394 #define vgic_ready(k) ((k)->arch.vgic.ready)
396 ((i) < (k)->arch.vgic.nr_spis + VGIC_NR_PRIVATE_IRQS))
/openbmc/linux/arch/arm64/kvm/hyp/vhe/
H A DMakefile10 obj-y += ../vgic-v3-sr.o ../aarch32.o ../vgic-v2-cpuif-proxy.o ../entry.o \
/openbmc/qemu/hw/intc/
H A Dvgic_common.h2 * ARM KVM vGIC utility functions
25 * kvm_arm_gic_set_irq - Send an IRQ to the in-kernel vGIC
H A Darm_gic_kvm.c231 /* Read a register group from the kernel VGIC */
259 /* Write a register group to the kernel VGIC */
505 error_setg(errp, "the in-kernel VGIC does not implement the " in kvm_arm_gic_realize()
511 error_setg(errp, "the in-kernel VGIC does not implement the " in kvm_arm_gic_realize()
543 /* Tell the kernel to complete VGIC initialization now */ in kvm_arm_gic_realize()
551 error_setg_errno(errp, -ret, "error creating in-kernel VGIC"); in kvm_arm_gic_realize()
566 * cores with a VGIC don't have those. in kvm_arm_gic_realize()
/openbmc/linux/tools/testing/selftests/kvm/lib/aarch64/
H A Dvgic.c12 #include "vgic.h"
17 * vGIC-v3 default host setup
29 * The function creates a vGIC-v3 device and maps the distributor and
/openbmc/qemu/target/arm/hvf/
H A Dtrace-events12 hvf_vgic_write(const char *name, uint64_t val) "vgic write to %s [val=0x%016"PRIx64"]"
13 hvf_vgic_read(const char *name, uint64_t val) "vgic read from %s [val=0x%016"PRIx64"]"
/openbmc/linux/tools/arch/arm/include/uapi/asm/
H A Dkvm.h84 /* Supported VGIC address types */
231 /* Device Control API: ARM VGIC */
297 /* One single KVM irqchip, ie. the VGIC */

123