xref: /kvmtool/arm/aarch32/arm-cpu.c (revision 04ecf98aa44f5b9c9cab82168db8bd69239a382a)
1 #include "kvm/kvm.h"
2 #include "kvm/kvm-cpu.h"
3 #include "kvm/util.h"
4 
5 #include "arm-common/gic.h"
6 #include "arm-common/timer.h"
7 
8 #include <linux/byteorder.h>
9 #include <linux/types.h>
10 
generate_fdt_nodes(void * fdt,struct kvm * kvm)11 static void generate_fdt_nodes(void *fdt, struct kvm *kvm)
12 {
13 	int timer_interrupts[4] = {13, 14, 11, 10};
14 
15 	gic__generate_fdt_nodes(fdt, kvm->cfg.arch.irqchip);
16 	timer__generate_fdt_nodes(fdt, kvm, timer_interrupts);
17 }
18 
arm_cpu__vcpu_init(struct kvm_cpu * vcpu)19 static int arm_cpu__vcpu_init(struct kvm_cpu *vcpu)
20 {
21 	vcpu->generate_fdt_nodes = generate_fdt_nodes;
22 	return 0;
23 }
24 
25 static struct kvm_arm_target target_generic_v7 = {
26 	.id		= UINT_MAX,
27 	.compatible	= "arm,arm-v7",
28 	.init		= arm_cpu__vcpu_init,
29 };
30 
31 static struct kvm_arm_target target_cortex_a15 = {
32 	.id		= KVM_ARM_TARGET_CORTEX_A15,
33 	.compatible	= "arm,cortex-a15",
34 	.init		= arm_cpu__vcpu_init,
35 };
36 
37 static struct kvm_arm_target target_cortex_a7 = {
38 	.id		= KVM_ARM_TARGET_CORTEX_A7,
39 	.compatible	= "arm,cortex-a7",
40 	.init		= arm_cpu__vcpu_init,
41 };
42 
arm_cpu__core_init(struct kvm * kvm)43 static int arm_cpu__core_init(struct kvm *kvm)
44 {
45 	kvm_cpu__set_kvm_arm_generic_target(&target_generic_v7);
46 
47 	return (kvm_cpu__register_kvm_arm_target(&target_cortex_a15) ||
48 		kvm_cpu__register_kvm_arm_target(&target_cortex_a7));
49 }
50 core_init(arm_cpu__core_init);
51