From 0299851aa06d4046cb95ceb992f268c4c6381443 Mon Sep 17 00:00:00 2001 From: Peter Crosthwaite Date: Tue, 13 Feb 2018 14:52:38 -0500 Subject: [PATCH] arm: Add has-mpu property For processors that support MPUs, add a property to de-feature it. This is similar to the implementation of the EL3 feature. The processor definition in init sets ARM_FEATURE_MPU if it can support an MPU. post_init exposes the property, defaulting to true. If cleared by the instantiator, ARM_FEATURE_MPU is then removed at realize time. This is to support R profile processors that may or may-not have an MPU configured. Backports commit 8f325f568fbd0158cd413e7d637573ba90b3eaab from qemu --- qemu/target-arm/cpu-qom.h | 3 +++ qemu/target-arm/cpu.c | 4 ++++ 2 files changed, 7 insertions(+) diff --git a/qemu/target-arm/cpu-qom.h b/qemu/target-arm/cpu-qom.h index 9aedb6f6..420b3ab4 100644 --- a/qemu/target-arm/cpu-qom.h +++ b/qemu/target-arm/cpu-qom.h @@ -102,6 +102,9 @@ typedef struct ARMCPU { /* CPU has security extension */ bool has_el3; + /* CPU has memory protection unit */ + bool has_mpu; + /* PSCI conduit used to invoke PSCI methods * 0 - disabled, 1 - smc, 2 - hvc */ diff --git a/qemu/target-arm/cpu.c b/qemu/target-arm/cpu.c index 01c160ad..bd771a59 100644 --- a/qemu/target-arm/cpu.c +++ b/qemu/target-arm/cpu.c @@ -485,6 +485,10 @@ static int arm_cpu_realizefn(struct uc_struct *uc, DeviceState *dev, Error **err cpu->id_aa64pfr0 &= ~0xf000; } + if (!cpu->has_mpu) { + unset_feature(env, ARM_FEATURE_MPU); + } + if (arm_feature(env, ARM_FEATURE_EL3)) { set_feature(env, ARM_FEATURE_VBAR); }