aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMarc Zyngier <Marc.Zyngier@arm.com>2013-04-11 17:36:25 +0100
committerWill Deacon <will.deacon@arm.com>2015-06-01 16:39:54 +0100
commitef8a47b3e5026263f7a7ea2a517963840567d911 (patch)
tree8b54a6ab974250e27d06b58034a4b1547c035670
parentbeff7ae0e7857eba651017b1d496371e339dddac (diff)
downloadkvmtool-ef8a47b3e5026263f7a7ea2a517963840567d911.tar.gz
kvm tools: arm64: add support for AEM and Foundation models
The ARMv8 architecture is supported by two publicly available software models: the Architecture Enveloppe Model, and the Foundation model. Both are fairly similar to the Cortex-A57 from a kvm tools point of view, so we can hijack the A57 implementation to register these new targets. Signed-off-by: Marc Zyngier <marc.zyngier@arm.com> Signed-off-by: Will Deacon <will.deacon@arm.com> Signed-off-by: Pekka Enberg <penberg@kernel.org>
-rw-r--r--arm/aarch64/cortex-a57.c20
1 files changed, 19 insertions, 1 deletions
diff --git a/arm/aarch64/cortex-a57.c b/arm/aarch64/cortex-a57.c
index 5b0dc4c3..0c340fb7 100644
--- a/arm/aarch64/cortex-a57.c
+++ b/arm/aarch64/cortex-a57.c
@@ -49,6 +49,22 @@ static int cortex_a57__vcpu_init(struct kvm_cpu *vcpu)
return 0;
}
+/*
+ * As far as userspace is concerned, both of these implementations are
+ * extremely similar.
+ */
+static struct kvm_arm_target target_aem_v8 = {
+ .id = KVM_ARM_TARGET_AEM_V8,
+ .compatible = "arm,arm-v8",
+ .init = cortex_a57__vcpu_init,
+};
+
+static struct kvm_arm_target target_foundation_v8 = {
+ .id = KVM_ARM_TARGET_FOUNDATION_V8,
+ .compatible = "arm,arm-v8",
+ .init = cortex_a57__vcpu_init,
+};
+
static struct kvm_arm_target target_cortex_a57 = {
.id = KVM_ARM_TARGET_CORTEX_A57,
.compatible = "arm,cortex-a57",
@@ -57,6 +73,8 @@ static struct kvm_arm_target target_cortex_a57 = {
static int cortex_a57__core_init(struct kvm *kvm)
{
- return kvm_cpu__register_kvm_arm_target(&target_cortex_a57);
+ return (kvm_cpu__register_kvm_arm_target(&target_aem_v8) ||
+ kvm_cpu__register_kvm_arm_target(&target_foundation_v8) ||
+ kvm_cpu__register_kvm_arm_target(&target_cortex_a57));
}
core_init(cortex_a57__core_init);