mirror of https://github.com/xemu-project/xemu.git
target/arm: Add ARM_FEATURE_V7VE for v7 Virtualization Extensions
Signed-off-by: Aaron Lindsay <alindsay@codeaurora.org> Message-id: 1529699547-17044-5-git-send-email-alindsay@codeaurora.org Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
This commit is contained in:
parent
d82fa73422
commit
5110e6836b
|
@ -800,9 +800,20 @@ static void arm_cpu_realizefn(DeviceState *dev, Error **errp)
|
||||||
|
|
||||||
/* Some features automatically imply others: */
|
/* Some features automatically imply others: */
|
||||||
if (arm_feature(env, ARM_FEATURE_V8)) {
|
if (arm_feature(env, ARM_FEATURE_V8)) {
|
||||||
set_feature(env, ARM_FEATURE_V7);
|
set_feature(env, ARM_FEATURE_V7VE);
|
||||||
|
}
|
||||||
|
if (arm_feature(env, ARM_FEATURE_V7VE)) {
|
||||||
|
/* v7 Virtualization Extensions. In real hardware this implies
|
||||||
|
* EL2 and also the presence of the Security Extensions.
|
||||||
|
* For QEMU, for backwards-compatibility we implement some
|
||||||
|
* CPUs or CPU configs which have no actual EL2 or EL3 but do
|
||||||
|
* include the various other features that V7VE implies.
|
||||||
|
* Presence of EL2 itself is ARM_FEATURE_EL2, and of the
|
||||||
|
* Security Extensions is ARM_FEATURE_EL3.
|
||||||
|
*/
|
||||||
set_feature(env, ARM_FEATURE_ARM_DIV);
|
set_feature(env, ARM_FEATURE_ARM_DIV);
|
||||||
set_feature(env, ARM_FEATURE_LPAE);
|
set_feature(env, ARM_FEATURE_LPAE);
|
||||||
|
set_feature(env, ARM_FEATURE_V7);
|
||||||
}
|
}
|
||||||
if (arm_feature(env, ARM_FEATURE_V7)) {
|
if (arm_feature(env, ARM_FEATURE_V7)) {
|
||||||
set_feature(env, ARM_FEATURE_VAPA);
|
set_feature(env, ARM_FEATURE_VAPA);
|
||||||
|
@ -1524,15 +1535,13 @@ static void cortex_a7_initfn(Object *obj)
|
||||||
ARMCPU *cpu = ARM_CPU(obj);
|
ARMCPU *cpu = ARM_CPU(obj);
|
||||||
|
|
||||||
cpu->dtb_compatible = "arm,cortex-a7";
|
cpu->dtb_compatible = "arm,cortex-a7";
|
||||||
set_feature(&cpu->env, ARM_FEATURE_V7);
|
set_feature(&cpu->env, ARM_FEATURE_V7VE);
|
||||||
set_feature(&cpu->env, ARM_FEATURE_VFP4);
|
set_feature(&cpu->env, ARM_FEATURE_VFP4);
|
||||||
set_feature(&cpu->env, ARM_FEATURE_NEON);
|
set_feature(&cpu->env, ARM_FEATURE_NEON);
|
||||||
set_feature(&cpu->env, ARM_FEATURE_THUMB2EE);
|
set_feature(&cpu->env, ARM_FEATURE_THUMB2EE);
|
||||||
set_feature(&cpu->env, ARM_FEATURE_ARM_DIV);
|
|
||||||
set_feature(&cpu->env, ARM_FEATURE_GENERIC_TIMER);
|
set_feature(&cpu->env, ARM_FEATURE_GENERIC_TIMER);
|
||||||
set_feature(&cpu->env, ARM_FEATURE_DUMMY_C15_REGS);
|
set_feature(&cpu->env, ARM_FEATURE_DUMMY_C15_REGS);
|
||||||
set_feature(&cpu->env, ARM_FEATURE_CBAR_RO);
|
set_feature(&cpu->env, ARM_FEATURE_CBAR_RO);
|
||||||
set_feature(&cpu->env, ARM_FEATURE_LPAE);
|
|
||||||
set_feature(&cpu->env, ARM_FEATURE_EL3);
|
set_feature(&cpu->env, ARM_FEATURE_EL3);
|
||||||
cpu->kvm_target = QEMU_KVM_ARM_TARGET_CORTEX_A7;
|
cpu->kvm_target = QEMU_KVM_ARM_TARGET_CORTEX_A7;
|
||||||
cpu->midr = 0x410fc075;
|
cpu->midr = 0x410fc075;
|
||||||
|
@ -1569,15 +1578,13 @@ static void cortex_a15_initfn(Object *obj)
|
||||||
ARMCPU *cpu = ARM_CPU(obj);
|
ARMCPU *cpu = ARM_CPU(obj);
|
||||||
|
|
||||||
cpu->dtb_compatible = "arm,cortex-a15";
|
cpu->dtb_compatible = "arm,cortex-a15";
|
||||||
set_feature(&cpu->env, ARM_FEATURE_V7);
|
set_feature(&cpu->env, ARM_FEATURE_V7VE);
|
||||||
set_feature(&cpu->env, ARM_FEATURE_VFP4);
|
set_feature(&cpu->env, ARM_FEATURE_VFP4);
|
||||||
set_feature(&cpu->env, ARM_FEATURE_NEON);
|
set_feature(&cpu->env, ARM_FEATURE_NEON);
|
||||||
set_feature(&cpu->env, ARM_FEATURE_THUMB2EE);
|
set_feature(&cpu->env, ARM_FEATURE_THUMB2EE);
|
||||||
set_feature(&cpu->env, ARM_FEATURE_ARM_DIV);
|
|
||||||
set_feature(&cpu->env, ARM_FEATURE_GENERIC_TIMER);
|
set_feature(&cpu->env, ARM_FEATURE_GENERIC_TIMER);
|
||||||
set_feature(&cpu->env, ARM_FEATURE_DUMMY_C15_REGS);
|
set_feature(&cpu->env, ARM_FEATURE_DUMMY_C15_REGS);
|
||||||
set_feature(&cpu->env, ARM_FEATURE_CBAR_RO);
|
set_feature(&cpu->env, ARM_FEATURE_CBAR_RO);
|
||||||
set_feature(&cpu->env, ARM_FEATURE_LPAE);
|
|
||||||
set_feature(&cpu->env, ARM_FEATURE_EL3);
|
set_feature(&cpu->env, ARM_FEATURE_EL3);
|
||||||
cpu->kvm_target = QEMU_KVM_ARM_TARGET_CORTEX_A15;
|
cpu->kvm_target = QEMU_KVM_ARM_TARGET_CORTEX_A15;
|
||||||
cpu->midr = 0x412fc0f1;
|
cpu->midr = 0x412fc0f1;
|
||||||
|
|
|
@ -1442,6 +1442,7 @@ enum arm_features {
|
||||||
ARM_FEATURE_OMAPCP, /* OMAP specific CP15 ops handling. */
|
ARM_FEATURE_OMAPCP, /* OMAP specific CP15 ops handling. */
|
||||||
ARM_FEATURE_THUMB2EE,
|
ARM_FEATURE_THUMB2EE,
|
||||||
ARM_FEATURE_V7MP, /* v7 Multiprocessing Extensions */
|
ARM_FEATURE_V7MP, /* v7 Multiprocessing Extensions */
|
||||||
|
ARM_FEATURE_V7VE, /* v7 Virtualization Extensions (non-EL2 parts) */
|
||||||
ARM_FEATURE_V4T,
|
ARM_FEATURE_V4T,
|
||||||
ARM_FEATURE_V5,
|
ARM_FEATURE_V5,
|
||||||
ARM_FEATURE_STRONGARM,
|
ARM_FEATURE_STRONGARM,
|
||||||
|
|
|
@ -98,12 +98,12 @@ bool kvm_arm_get_host_cpu_features(ARMHostCPUFeatures *ahcf)
|
||||||
/* Now we've retrieved all the register information we can
|
/* Now we've retrieved all the register information we can
|
||||||
* set the feature bits based on the ID register fields.
|
* set the feature bits based on the ID register fields.
|
||||||
* We can assume any KVM supporting CPU is at least a v7
|
* We can assume any KVM supporting CPU is at least a v7
|
||||||
* with VFPv3, LPAE and the generic timers; this in turn implies
|
* with VFPv3, virtualization extensions, and the generic
|
||||||
* most of the other feature bits, but a few must be tested.
|
* timers; this in turn implies most of the other feature
|
||||||
|
* bits, but a few must be tested.
|
||||||
*/
|
*/
|
||||||
set_feature(&features, ARM_FEATURE_V7);
|
set_feature(&features, ARM_FEATURE_V7VE);
|
||||||
set_feature(&features, ARM_FEATURE_VFP3);
|
set_feature(&features, ARM_FEATURE_VFP3);
|
||||||
set_feature(&features, ARM_FEATURE_LPAE);
|
|
||||||
set_feature(&features, ARM_FEATURE_GENERIC_TIMER);
|
set_feature(&features, ARM_FEATURE_GENERIC_TIMER);
|
||||||
|
|
||||||
switch (extract32(id_isar0, 24, 4)) {
|
switch (extract32(id_isar0, 24, 4)) {
|
||||||
|
|
Loading…
Reference in New Issue