Lines Matching +full:gic +full:- +full:its
1 // SPDX-License-Identifier: GPL-2.0
71 return __vcpu_run(vcpu) ? -errno : 0;
101 close(v->gic_fd);
102 kvm_vm_free(v->vm);
150 rdist = VGIC_DEV_IS_V3(v->gic_dev_type) ? gic_v3_redist_region
152 dist = VGIC_DEV_IS_V3(v->gic_dev_type) ? gic_v3_dist_region
156 kvm_has_device_attr(v->gic_fd, KVM_DEV_ARM_VGIC_GRP_ADDR, dist.attr);
158 kvm_has_device_attr(v->gic_fd, KVM_DEV_ARM_VGIC_GRP_ADDR, rdist.attr);
161 ret = __kvm_has_device_attr(v->gic_fd, KVM_DEV_ARM_VGIC_GRP_ADDR, -1);
166 ret = __kvm_device_attr_set(v->gic_fd, KVM_DEV_ARM_VGIC_GRP_ADDR,
168 TEST_ASSERT(ret && errno == EINVAL, "GIC dist base not aligned");
171 ret = __kvm_device_attr_set(v->gic_fd, KVM_DEV_ARM_VGIC_GRP_ADDR,
173 TEST_ASSERT(ret && errno == EINVAL, "GIC redist/cpu base not aligned");
177 ret = __kvm_device_attr_set(v->gic_fd, KVM_DEV_ARM_VGIC_GRP_ADDR,
181 ret = __kvm_device_attr_set(v->gic_fd, KVM_DEV_ARM_VGIC_GRP_ADDR,
186 addr = max_phys_size - dist.alignment;
187 ret = __kvm_device_attr_set(v->gic_fd, KVM_DEV_ARM_VGIC_GRP_ADDR,
194 kvm_device_attr_set(v->gic_fd, KVM_DEV_ARM_VGIC_GRP_ADDR,
199 ret = __kvm_device_attr_set(v->gic_fd, KVM_DEV_ARM_VGIC_GRP_ADDR,
201 TEST_ASSERT(ret && errno == EEXIST, "GIC redist base set again");
203 ret = __kvm_has_device_attr(v->gic_fd, KVM_DEV_ARM_VGIC_GRP_ADDR,
208 ret = __kvm_device_attr_set(v->gic_fd, KVM_DEV_ARM_VGIC_GRP_ADDR,
218 addr = rdist.size - rdist.alignment;
219 kvm_device_attr_set(v->gic_fd, KVM_DEV_ARM_VGIC_GRP_ADDR,
229 ret = __kvm_has_device_attr(v->gic_fd, KVM_DEV_ARM_VGIC_GRP_ADDR,
234 ret = __kvm_device_attr_set(v->gic_fd, KVM_DEV_ARM_VGIC_GRP_ADDR,
239 ret = __kvm_device_attr_set(v->gic_fd, KVM_DEV_ARM_VGIC_GRP_ADDR,
244 ret = __kvm_device_attr_set(v->gic_fd, KVM_DEV_ARM_VGIC_GRP_ADDR,
250 ret = __kvm_device_attr_set(v->gic_fd, KVM_DEV_ARM_VGIC_GRP_ADDR,
255 kvm_device_attr_set(v->gic_fd, KVM_DEV_ARM_VGIC_GRP_ADDR,
259 ret = __kvm_device_attr_set(v->gic_fd, KVM_DEV_ARM_VGIC_GRP_ADDR,
264 ret = __kvm_device_attr_set(v->gic_fd, KVM_DEV_ARM_VGIC_GRP_ADDR,
270 ret = __kvm_device_attr_set(v->gic_fd, KVM_DEV_ARM_VGIC_GRP_ADDR,
275 kvm_device_attr_set(v->gic_fd, KVM_DEV_ARM_VGIC_GRP_ADDR,
279 ret = __kvm_device_attr_set(v->gic_fd, KVM_DEV_ARM_VGIC_GRP_ADDR,
285 addr = REDIST_REGION_ATTR_ADDR(2, max_phys_size - 0x30000, 0, 2);
286 ret = __kvm_device_attr_set(v->gic_fd, KVM_DEV_ARM_VGIC_GRP_ADDR,
292 ret = __kvm_device_attr_set(v->gic_fd, KVM_DEV_ARM_VGIC_GRP_ADDR,
306 ret = __kvm_device_attr_get(v->gic_fd, KVM_DEV_ARM_VGIC_GRP_ADDR,
312 ret = __kvm_device_attr_get(v->gic_fd, KVM_DEV_ARM_VGIC_GRP_ADDR,
317 ret = __kvm_device_attr_get(v->gic_fd, KVM_DEV_ARM_VGIC_GRP_ADDR,
322 kvm_device_attr_set(v->gic_fd, KVM_DEV_ARM_VGIC_GRP_ADDR,
326 ret = __kvm_device_attr_set(v->gic_fd, KVM_DEV_ARM_VGIC_GRP_ADDR,
350 TEST_ASSERT(ret == -EINVAL, "dist/rdist overlap detected on 1st vcpu run");
367 TEST_ASSERT(ret == -EINVAL, "dist/rdist overlap detected on 1st vcpu run");
390 "accessed non-existent CPU interface, want errno: %i",
395 "accessed non-existent CPU interface, want errno: %i",
400 "accessed non-existent CPU interface, want errno: %i",
420 TEST_ASSERT(ret == -ENXIO, "running without sufficient number of rdists");
433 TEST_ASSERT(ret == -EBUSY, "running without vgic explicit init");
479 "read GICR_TYPER before GIC initialized");
614 addr = max_phys_size - (3 * 2 * 0x10000);
651 "ITS region with misaligned address");
657 "register ITS region with base address beyond IPA range");
659 addr = max_phys_size - 0x10000;
663 "Half of ITS region is beyond IPA range");
665 /* This one succeeds setting the ITS base */
673 TEST_ASSERT(ret && errno == EEXIST, "ITS base set again");
718 * Returns 0 if it's possible to create GIC device of a given type (V2 or V3).
740 TEST_ASSERT(ret < 0 && errno == EEXIST, "create GIC device twice");
749 "create GIC device while other version exists");
824 static void test_sysreg_array(int gic, const struct sr_def *sr, int nr,
838 * ICC_APnR{1,2,3}_EL1 are examples of such non-sense, and
844 ret = __kvm_has_device_attr(gic, KVM_DEV_ARM_VGIC_GRP_CPU_SYSREGS,
849 ret = __kvm_device_attr_get(gic, KVM_DEV_ARM_VGIC_GRP_CPU_SYSREGS,
851 TEST_ASSERT(ret == 0 || !check(gic, &sr[i], "read"), "%s unreadable", sr[i].name);
852 ret = __kvm_device_attr_set(gic, KVM_DEV_ARM_VGIC_GRP_CPU_SYSREGS,
854 TEST_ASSERT(ret == 0 || !check(gic, &sr[i], "write"), "%s unwritable", sr[i].name);
858 static u8 get_ctlr_pribits(int gic)
864 ret = __kvm_device_attr_get(gic, KVM_DEV_ARM_VGIC_GRP_CPU_SYSREGS,
874 static int check_unaccessible_el1_regs(int gic, const struct sr_def *sr, const char *what)
876 switch (sr->encoding) {
879 if (get_ctlr_pribits(gic) >= 6)
880 return -EINVAL;
886 if (get_ctlr_pribits(gic) == 7)
890 return -EINVAL;
893 pr_info("SKIP %s for %s\n", sr->name, what);
897 static u8 get_vtr_pribits(int gic)
903 ret = __kvm_device_attr_get(gic, KVM_DEV_ARM_VGIC_GRP_CPU_SYSREGS,
913 static int check_unaccessible_el2_regs(int gic, const struct sr_def *sr, const char *what)
915 switch (sr->encoding) {
918 if (get_vtr_pribits(gic) >= 6)
919 return -EINVAL;
925 if (get_vtr_pribits(gic) == 7)
926 return -EINVAL;
929 return -EINVAL;
932 pr_info("SKIP %s for %s\n", sr->name, what);
942 int gic;
955 gic = kvm_create_device(vm, KVM_DEV_TYPE_ARM_VGIC_V3);
956 TEST_ASSERT(gic >= 0, "No GIC???");
958 kvm_device_attr_set(gic, KVM_DEV_ARM_VGIC_GRP_CTRL,
961 test_sysreg_array(gic, sysregs_el1, ARRAY_SIZE(sysregs_el1), check_unaccessible_el1_regs);
963 test_sysreg_array(gic, sysregs_el2, ARRAY_SIZE(sysregs_el2), check_unaccessible_el2_regs);
967 close(gic);