Lines Matching +full:0 +full:v

23 #define GICR_TYPER 0x8
45 GUEST_SYNC(0); in guest_code()
58 return 0; in run_vcpu()
63 struct vm_gic v; in vm_gic_create() local
65 v.vm = vm_create_default_with_vcpus(NR_VCPUS, 0, 0, guest_code, NULL); in vm_gic_create()
66 v.gic_fd = kvm_create_device(v.vm, KVM_DEV_TYPE_ARM_VGIC_V3, false); in vm_gic_create()
68 return v; in vm_gic_create()
71 static void vm_gic_destroy(struct vm_gic *v) in vm_gic_destroy() argument
73 close(v->gic_fd); in vm_gic_destroy()
74 kvm_vm_free(v->vm); in vm_gic_destroy()
80 * device gets created, a legacy RDIST region is set at @0x0
81 * and a DIST region is set @0x60000
83 static void subtest_dist_rdist(struct vm_gic *v) in subtest_dist_rdist() argument
89 kvm_device_check_attr(v->gic_fd, KVM_DEV_ARM_VGIC_GRP_ADDR, in subtest_dist_rdist()
92 kvm_device_check_attr(v->gic_fd, KVM_DEV_ARM_VGIC_GRP_ADDR, in subtest_dist_rdist()
96 ret = _kvm_device_check_attr(v->gic_fd, KVM_DEV_ARM_VGIC_GRP_ADDR, 0); in subtest_dist_rdist()
100 addr = 0x1000; in subtest_dist_rdist()
101 ret = _kvm_device_access(v->gic_fd, KVM_DEV_ARM_VGIC_GRP_ADDR, in subtest_dist_rdist()
105 ret = _kvm_device_access(v->gic_fd, KVM_DEV_ARM_VGIC_GRP_ADDR, in subtest_dist_rdist()
112 ret = _kvm_device_access(v->gic_fd, KVM_DEV_ARM_VGIC_GRP_ADDR, in subtest_dist_rdist()
116 ret = _kvm_device_access(v->gic_fd, KVM_DEV_ARM_VGIC_GRP_ADDR, in subtest_dist_rdist()
121 /* set REDIST base address @0x0*/ in subtest_dist_rdist()
122 addr = 0x00000; in subtest_dist_rdist()
123 kvm_device_access(v->gic_fd, KVM_DEV_ARM_VGIC_GRP_ADDR, in subtest_dist_rdist()
127 addr = 0xE0000; in subtest_dist_rdist()
128 ret = _kvm_device_access(v->gic_fd, KVM_DEV_ARM_VGIC_GRP_ADDR, in subtest_dist_rdist()
133 addr = REDIST_REGION_ATTR_ADDR(NR_VCPUS, 0x100000, 0, 0); in subtest_dist_rdist()
134 ret = _kvm_device_access(v->gic_fd, KVM_DEV_ARM_VGIC_GRP_ADDR, in subtest_dist_rdist()
142 addr = 3 * 2 * 0x10000; in subtest_dist_rdist()
143 kvm_device_access(v->gic_fd, KVM_DEV_ARM_VGIC_GRP_ADDR, KVM_VGIC_V3_ADDR_TYPE_DIST, in subtest_dist_rdist()
148 static void subtest_redist_regions(struct vm_gic *v) in subtest_redist_regions() argument
153 ret = kvm_device_check_attr(v->gic_fd, KVM_DEV_ARM_VGIC_GRP_ADDR, in subtest_redist_regions()
157 addr = REDIST_REGION_ATTR_ADDR(NR_VCPUS, 0x100000, 2, 0); in subtest_redist_regions()
158 ret = _kvm_device_access(v->gic_fd, KVM_DEV_ARM_VGIC_GRP_ADDR, in subtest_redist_regions()
160 TEST_ASSERT(ret && errno == EINVAL, "redist region attr value with flags != 0"); in subtest_redist_regions()
162 addr = REDIST_REGION_ATTR_ADDR(0, 0x100000, 0, 0); in subtest_redist_regions()
163 ret = _kvm_device_access(v->gic_fd, KVM_DEV_ARM_VGIC_GRP_ADDR, in subtest_redist_regions()
165 TEST_ASSERT(ret && errno == EINVAL, "redist region attr value with count== 0"); in subtest_redist_regions()
167 addr = REDIST_REGION_ATTR_ADDR(2, 0x200000, 0, 1); in subtest_redist_regions()
168 ret = _kvm_device_access(v->gic_fd, KVM_DEV_ARM_VGIC_GRP_ADDR, in subtest_redist_regions()
171 "attempt to register the first rdist region with index != 0"); in subtest_redist_regions()
173 addr = REDIST_REGION_ATTR_ADDR(2, 0x201000, 0, 1); in subtest_redist_regions()
174 ret = _kvm_device_access(v->gic_fd, KVM_DEV_ARM_VGIC_GRP_ADDR, in subtest_redist_regions()
178 addr = REDIST_REGION_ATTR_ADDR(2, 0x200000, 0, 0); in subtest_redist_regions()
179 kvm_device_access(v->gic_fd, KVM_DEV_ARM_VGIC_GRP_ADDR, in subtest_redist_regions()
182 addr = REDIST_REGION_ATTR_ADDR(2, 0x200000, 0, 1); in subtest_redist_regions()
183 ret = _kvm_device_access(v->gic_fd, KVM_DEV_ARM_VGIC_GRP_ADDR, in subtest_redist_regions()
187 addr = REDIST_REGION_ATTR_ADDR(1, 0x210000, 0, 2); in subtest_redist_regions()
188 ret = _kvm_device_access(v->gic_fd, KVM_DEV_ARM_VGIC_GRP_ADDR, in subtest_redist_regions()
193 addr = REDIST_REGION_ATTR_ADDR(1, 0x240000, 0, 2); in subtest_redist_regions()
194 ret = _kvm_device_access(v->gic_fd, KVM_DEV_ARM_VGIC_GRP_ADDR, in subtest_redist_regions()
198 addr = REDIST_REGION_ATTR_ADDR(1, 0x240000, 0, 1); in subtest_redist_regions()
199 kvm_device_access(v->gic_fd, KVM_DEV_ARM_VGIC_GRP_ADDR, in subtest_redist_regions()
202 addr = REDIST_REGION_ATTR_ADDR(1, 1ULL << max_ipa_bits, 0, 2); in subtest_redist_regions()
203 ret = _kvm_device_access(v->gic_fd, KVM_DEV_ARM_VGIC_GRP_ADDR, in subtest_redist_regions()
208 addr = 0x260000; in subtest_redist_regions()
209 ret = _kvm_device_access(v->gic_fd, KVM_DEV_ARM_VGIC_GRP_ADDR, in subtest_redist_regions()
216 * region 0 @ 0x200000 2 redists in subtest_redist_regions()
217 * region 1 @ 0x240000 1 redist in subtest_redist_regions()
221 addr = REDIST_REGION_ATTR_ADDR(0, 0, 0, 0); in subtest_redist_regions()
222 expected_addr = REDIST_REGION_ATTR_ADDR(2, 0x200000, 0, 0); in subtest_redist_regions()
223 ret = _kvm_device_access(v->gic_fd, KVM_DEV_ARM_VGIC_GRP_ADDR, in subtest_redist_regions()
225 TEST_ASSERT(!ret && addr == expected_addr, "read characteristics of region #0"); in subtest_redist_regions()
227 addr = REDIST_REGION_ATTR_ADDR(0, 0, 0, 1); in subtest_redist_regions()
228 expected_addr = REDIST_REGION_ATTR_ADDR(1, 0x240000, 0, 1); in subtest_redist_regions()
229 ret = _kvm_device_access(v->gic_fd, KVM_DEV_ARM_VGIC_GRP_ADDR, in subtest_redist_regions()
233 addr = REDIST_REGION_ATTR_ADDR(0, 0, 0, 2); in subtest_redist_regions()
234 ret = _kvm_device_access(v->gic_fd, KVM_DEV_ARM_VGIC_GRP_ADDR, in subtest_redist_regions()
238 addr = 0x260000; in subtest_redist_regions()
239 kvm_device_access(v->gic_fd, KVM_DEV_ARM_VGIC_GRP_ADDR, in subtest_redist_regions()
242 addr = REDIST_REGION_ATTR_ADDR(1, 0x260000, 0, 2); in subtest_redist_regions()
243 ret = _kvm_device_access(v->gic_fd, KVM_DEV_ARM_VGIC_GRP_ADDR, in subtest_redist_regions()
254 struct vm_gic v; in test_vgic_then_vcpus() local
257 v.vm = vm_create_default(0, 0, guest_code); in test_vgic_then_vcpus()
258 v.gic_fd = kvm_create_device(v.vm, KVM_DEV_TYPE_ARM_VGIC_V3, false); in test_vgic_then_vcpus()
260 subtest_dist_rdist(&v); in test_vgic_then_vcpus()
264 vm_vcpu_add_default(v.vm, i, guest_code); in test_vgic_then_vcpus()
266 ret = run_vcpu(v.vm, 3); in test_vgic_then_vcpus()
269 vm_gic_destroy(&v); in test_vgic_then_vcpus()
275 struct vm_gic v; in test_vcpus_then_vgic() local
278 v = vm_gic_create(); in test_vcpus_then_vgic()
280 subtest_dist_rdist(&v); in test_vcpus_then_vgic()
282 ret = run_vcpu(v.vm, 3); in test_vcpus_then_vgic()
285 vm_gic_destroy(&v); in test_vcpus_then_vgic()
291 struct vm_gic v; in test_new_redist_regions() local
295 v = vm_gic_create(); in test_new_redist_regions()
296 subtest_redist_regions(&v); in test_new_redist_regions()
297 kvm_device_access(v.gic_fd, KVM_DEV_ARM_VGIC_GRP_CTRL, in test_new_redist_regions()
300 ret = run_vcpu(v.vm, 3); in test_new_redist_regions()
302 vm_gic_destroy(&v); in test_new_redist_regions()
306 v = vm_gic_create(); in test_new_redist_regions()
307 subtest_redist_regions(&v); in test_new_redist_regions()
309 addr = REDIST_REGION_ATTR_ADDR(1, 0x280000, 0, 2); in test_new_redist_regions()
310 kvm_device_access(v.gic_fd, KVM_DEV_ARM_VGIC_GRP_ADDR, in test_new_redist_regions()
313 ret = run_vcpu(v.vm, 3); in test_new_redist_regions()
316 vm_gic_destroy(&v); in test_new_redist_regions()
320 v = vm_gic_create(); in test_new_redist_regions()
321 subtest_redist_regions(&v); in test_new_redist_regions()
323 _kvm_device_access(v.gic_fd, KVM_DEV_ARM_VGIC_GRP_ADDR, in test_new_redist_regions()
328 addr = REDIST_REGION_ATTR_ADDR(1, 0x280000, 0, 2); in test_new_redist_regions()
329 kvm_device_access(v.gic_fd, KVM_DEV_ARM_VGIC_GRP_ADDR, in test_new_redist_regions()
332 kvm_device_access(v.gic_fd, KVM_DEV_ARM_VGIC_GRP_CTRL, in test_new_redist_regions()
335 ret = run_vcpu(v.vm, 3); in test_new_redist_regions()
338 vm_gic_destroy(&v); in test_new_redist_regions()
343 struct vm_gic v; in test_typer_accesses() local
348 v.vm = vm_create_default(0, 0, guest_code); in test_typer_accesses()
350 v.gic_fd = kvm_create_device(v.vm, KVM_DEV_TYPE_ARM_VGIC_V3, false); in test_typer_accesses()
352 vm_vcpu_add_default(v.vm, 3, guest_code); in test_typer_accesses()
354 ret = access_redist_reg(v.gic_fd, 1, GICR_TYPER, &val, false); in test_typer_accesses()
357 vm_vcpu_add_default(v.vm, 1, guest_code); in test_typer_accesses()
359 ret = access_redist_reg(v.gic_fd, 1, GICR_TYPER, &val, false); in test_typer_accesses()
362 vm_vcpu_add_default(v.vm, 2, guest_code); in test_typer_accesses()
364 kvm_device_access(v.gic_fd, KVM_DEV_ARM_VGIC_GRP_CTRL, in test_typer_accesses()
367 for (i = 0; i < NR_VCPUS ; i++) { in test_typer_accesses()
368 ret = access_redist_reg(v.gic_fd, 0, GICR_TYPER, &val, false); in test_typer_accesses()
372 addr = REDIST_REGION_ATTR_ADDR(2, 0x200000, 0, 0); in test_typer_accesses()
373 kvm_device_access(v.gic_fd, KVM_DEV_ARM_VGIC_GRP_ADDR, in test_typer_accesses()
376 /* The 2 first rdists should be put there (vcpu 0 and 3) */ in test_typer_accesses()
377 ret = access_redist_reg(v.gic_fd, 0, GICR_TYPER, &val, false); in test_typer_accesses()
378 TEST_ASSERT(!ret && !val, "read typer of rdist #0"); in test_typer_accesses()
380 ret = access_redist_reg(v.gic_fd, 3, GICR_TYPER, &val, false); in test_typer_accesses()
381 TEST_ASSERT(!ret && val == 0x310, "read typer of rdist #1"); in test_typer_accesses()
383 addr = REDIST_REGION_ATTR_ADDR(10, 0x100000, 0, 1); in test_typer_accesses()
384 ret = _kvm_device_access(v.gic_fd, KVM_DEV_ARM_VGIC_GRP_ADDR, in test_typer_accesses()
388 ret = access_redist_reg(v.gic_fd, 1, GICR_TYPER, &val, false); in test_typer_accesses()
389 TEST_ASSERT(!ret && val == 0x100, in test_typer_accesses()
392 ret = access_redist_reg(v.gic_fd, 2, GICR_TYPER, &val, false); in test_typer_accesses()
393 TEST_ASSERT(!ret && val == 0x200, in test_typer_accesses()
396 addr = REDIST_REGION_ATTR_ADDR(10, 0x20000, 0, 1); in test_typer_accesses()
397 kvm_device_access(v.gic_fd, KVM_DEV_ARM_VGIC_GRP_ADDR, in test_typer_accesses()
400 ret = access_redist_reg(v.gic_fd, 1, GICR_TYPER, &val, false); in test_typer_accesses()
401 TEST_ASSERT(!ret && val == 0x100, "read typer of rdist #1"); in test_typer_accesses()
403 ret = access_redist_reg(v.gic_fd, 2, GICR_TYPER, &val, false); in test_typer_accesses()
404 TEST_ASSERT(!ret && val == 0x210, in test_typer_accesses()
407 vm_gic_destroy(&v); in test_typer_accesses()
413 * rdist region #0 @0x100000 2 rdist capacity
414 * rdists: 0, 3 (Last)
415 * rdist region #1 @0x240000 2 rdist capacity
417 * rdist region #2 @0x200000 2 rdist capacity
422 uint32_t vcpuids[] = { 0, 3, 5, 4, 1, 2 }; in test_last_bit_redist_regions()
423 struct vm_gic v; in test_last_bit_redist_regions() local
428 v.vm = vm_create_default_with_vcpus(6, 0, 0, guest_code, vcpuids); in test_last_bit_redist_regions()
430 v.gic_fd = kvm_create_device(v.vm, KVM_DEV_TYPE_ARM_VGIC_V3, false); in test_last_bit_redist_regions()
432 kvm_device_access(v.gic_fd, KVM_DEV_ARM_VGIC_GRP_CTRL, in test_last_bit_redist_regions()
435 addr = REDIST_REGION_ATTR_ADDR(2, 0x100000, 0, 0); in test_last_bit_redist_regions()
436 kvm_device_access(v.gic_fd, KVM_DEV_ARM_VGIC_GRP_ADDR, in test_last_bit_redist_regions()
439 addr = REDIST_REGION_ATTR_ADDR(2, 0x240000, 0, 1); in test_last_bit_redist_regions()
440 kvm_device_access(v.gic_fd, KVM_DEV_ARM_VGIC_GRP_ADDR, in test_last_bit_redist_regions()
443 addr = REDIST_REGION_ATTR_ADDR(2, 0x200000, 0, 2); in test_last_bit_redist_regions()
444 kvm_device_access(v.gic_fd, KVM_DEV_ARM_VGIC_GRP_ADDR, in test_last_bit_redist_regions()
447 ret = access_redist_reg(v.gic_fd, 0, GICR_TYPER, &val, false); in test_last_bit_redist_regions()
448 TEST_ASSERT(!ret && val == 0x000, "read typer of rdist #0"); in test_last_bit_redist_regions()
450 ret = access_redist_reg(v.gic_fd, 1, GICR_TYPER, &val, false); in test_last_bit_redist_regions()
451 TEST_ASSERT(!ret && val == 0x100, "read typer of rdist #1"); in test_last_bit_redist_regions()
453 ret = access_redist_reg(v.gic_fd, 2, GICR_TYPER, &val, false); in test_last_bit_redist_regions()
454 TEST_ASSERT(!ret && val == 0x200, "read typer of rdist #2"); in test_last_bit_redist_regions()
456 ret = access_redist_reg(v.gic_fd, 3, GICR_TYPER, &val, false); in test_last_bit_redist_regions()
457 TEST_ASSERT(!ret && val == 0x310, "read typer of rdist #3"); in test_last_bit_redist_regions()
459 ret = access_redist_reg(v.gic_fd, 5, GICR_TYPER, &val, false); in test_last_bit_redist_regions()
460 TEST_ASSERT(!ret && val == 0x500, "read typer of rdist #5"); in test_last_bit_redist_regions()
462 ret = access_redist_reg(v.gic_fd, 4, GICR_TYPER, &val, false); in test_last_bit_redist_regions()
463 TEST_ASSERT(!ret && val == 0x410, "read typer of rdist #4"); in test_last_bit_redist_regions()
465 vm_gic_destroy(&v); in test_last_bit_redist_regions()
471 uint32_t vcpuids[] = { 0, 3, 5, 4, 1, 2 }; in test_last_bit_single_rdist()
472 struct vm_gic v; in test_last_bit_single_rdist() local
477 v.vm = vm_create_default_with_vcpus(6, 0, 0, guest_code, vcpuids); in test_last_bit_single_rdist()
479 v.gic_fd = kvm_create_device(v.vm, KVM_DEV_TYPE_ARM_VGIC_V3, false); in test_last_bit_single_rdist()
481 kvm_device_access(v.gic_fd, KVM_DEV_ARM_VGIC_GRP_CTRL, in test_last_bit_single_rdist()
484 addr = 0x10000; in test_last_bit_single_rdist()
485 kvm_device_access(v.gic_fd, KVM_DEV_ARM_VGIC_GRP_ADDR, in test_last_bit_single_rdist()
488 ret = access_redist_reg(v.gic_fd, 0, GICR_TYPER, &val, false); in test_last_bit_single_rdist()
489 TEST_ASSERT(!ret && val == 0x000, "read typer of rdist #0"); in test_last_bit_single_rdist()
491 ret = access_redist_reg(v.gic_fd, 3, GICR_TYPER, &val, false); in test_last_bit_single_rdist()
492 TEST_ASSERT(!ret && val == 0x300, "read typer of rdist #1"); in test_last_bit_single_rdist()
494 ret = access_redist_reg(v.gic_fd, 5, GICR_TYPER, &val, false); in test_last_bit_single_rdist()
495 TEST_ASSERT(!ret && val == 0x500, "read typer of rdist #2"); in test_last_bit_single_rdist()
497 ret = access_redist_reg(v.gic_fd, 1, GICR_TYPER, &val, false); in test_last_bit_single_rdist()
498 TEST_ASSERT(!ret && val == 0x100, "read typer of rdist #3"); in test_last_bit_single_rdist()
500 ret = access_redist_reg(v.gic_fd, 2, GICR_TYPER, &val, false); in test_last_bit_single_rdist()
501 TEST_ASSERT(!ret && val == 0x210, "read typer of rdist #3"); in test_last_bit_single_rdist()
503 vm_gic_destroy(&v); in test_last_bit_single_rdist()
508 struct vm_gic v; in test_kvm_device() local
511 v.vm = vm_create_default_with_vcpus(NR_VCPUS, 0, 0, guest_code, NULL); in test_kvm_device()
514 ret = _kvm_create_device(v.vm, 0, true, &fd); in test_kvm_device()
518 ret = _kvm_create_device(v.vm, KVM_DEV_TYPE_ARM_VGIC_V3, true, &fd); in test_kvm_device()
523 v.gic_fd = kvm_create_device(v.vm, KVM_DEV_TYPE_ARM_VGIC_V3, false); in test_kvm_device()
525 ret = _kvm_create_device(v.vm, KVM_DEV_TYPE_ARM_VGIC_V3, false, &fd); in test_kvm_device()
528 kvm_create_device(v.vm, KVM_DEV_TYPE_ARM_VGIC_V3, true); in test_kvm_device()
530 if (!_kvm_create_device(v.vm, KVM_DEV_TYPE_ARM_VGIC_V2, true, &fd)) { in test_kvm_device()
531 ret = _kvm_create_device(v.vm, KVM_DEV_TYPE_ARM_VGIC_V2, false, &fd); in test_kvm_device()
535 vm_gic_destroy(&v); in test_kvm_device()
550 return 0; in main()