1909d7f77SJonathan Austin #include "kvm/kvm.h" 2909d7f77SJonathan Austin #include "kvm/kvm-cpu.h" 3909d7f77SJonathan Austin #include "kvm/util.h" 4909d7f77SJonathan Austin 5909d7f77SJonathan Austin #include "arm-common/gic.h" 6909d7f77SJonathan Austin #include "arm-common/timer.h" 7909d7f77SJonathan Austin 8909d7f77SJonathan Austin #include <linux/byteorder.h> 9909d7f77SJonathan Austin #include <linux/types.h> 10909d7f77SJonathan Austin 11*0063d50cSAndre Przywara static void generate_fdt_nodes(void *fdt, struct kvm *kvm) 12909d7f77SJonathan Austin { 13909d7f77SJonathan Austin int timer_interrupts[4] = {13, 14, 11, 10}; 14909d7f77SJonathan Austin 15*0063d50cSAndre Przywara gic__generate_fdt_nodes(fdt, IRQCHIP_GICV2); 16909d7f77SJonathan Austin timer__generate_fdt_nodes(fdt, kvm, timer_interrupts); 17909d7f77SJonathan Austin } 18909d7f77SJonathan Austin 19909d7f77SJonathan Austin static int arm_cpu__vcpu_init(struct kvm_cpu *vcpu) 20909d7f77SJonathan Austin { 21909d7f77SJonathan Austin vcpu->generate_fdt_nodes = generate_fdt_nodes; 22909d7f77SJonathan Austin return 0; 23909d7f77SJonathan Austin } 24909d7f77SJonathan Austin 2585bd726aSAnup Patel static struct kvm_arm_target target_generic_v7 = { 2685bd726aSAnup Patel .id = UINT_MAX, 2785bd726aSAnup Patel .compatible = "arm,arm-v7", 2885bd726aSAnup Patel .init = arm_cpu__vcpu_init, 2985bd726aSAnup Patel }; 3085bd726aSAnup Patel 31909d7f77SJonathan Austin static struct kvm_arm_target target_cortex_a15 = { 32909d7f77SJonathan Austin .id = KVM_ARM_TARGET_CORTEX_A15, 33909d7f77SJonathan Austin .compatible = "arm,cortex-a15", 34909d7f77SJonathan Austin .init = arm_cpu__vcpu_init, 35909d7f77SJonathan Austin }; 36909d7f77SJonathan Austin 376f60cca0SJonathan Austin static struct kvm_arm_target target_cortex_a7 = { 386f60cca0SJonathan Austin .id = KVM_ARM_TARGET_CORTEX_A7, 396f60cca0SJonathan Austin .compatible = "arm,cortex-a7", 406f60cca0SJonathan Austin .init = arm_cpu__vcpu_init, 416f60cca0SJonathan Austin }; 426f60cca0SJonathan Austin 43909d7f77SJonathan Austin static int arm_cpu__core_init(struct kvm *kvm) 44909d7f77SJonathan Austin { 4585bd726aSAnup Patel kvm_cpu__set_kvm_arm_generic_target(&target_generic_v7); 4685bd726aSAnup Patel 476f60cca0SJonathan Austin return (kvm_cpu__register_kvm_arm_target(&target_cortex_a15) || 486f60cca0SJonathan Austin kvm_cpu__register_kvm_arm_target(&target_cortex_a7)); 49909d7f77SJonathan Austin } 50909d7f77SJonathan Austin core_init(arm_cpu__core_init); 51