diff options
author | Peter Maydell <peter.maydell@linaro.org> | 2012-01-25 12:42:29 +0000 |
---|---|---|
committer | Peter Maydell <peter.maydell@linaro.org> | 2012-01-25 12:42:29 +0000 |
commit | 0383ac006f6bfa60d5cb3d0ddf4a9e1d65f9c900 (patch) | |
tree | 08f53b40306c18fdb01895c081ccde5b9674c6eb | |
parent | 5fe91019e66e2c2187f0af2324e25d450eb03a86 (diff) |
Add dummy implementation of generic timer cp15 registers
Add a dummy implementation of the cp15 registers for the generic
timer (found in the Cortex-A15), just sufficient for Linux to
decide that it can't use it. This requires at least CNTP_CTL and
CNTFRQ to be implemented as RAZ/WI; we RAZ/WI all of c14.
Reviewed-by: Andreas Färber <afaerber@suse.de>
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
-rw-r--r-- | target-arm/cpu.h | 1 | ||||
-rw-r--r-- | target-arm/helper.c | 12 |
2 files changed, 11 insertions, 2 deletions
diff --git a/target-arm/cpu.h b/target-arm/cpu.h index 42c53a7d52..7442c991ec 100644 --- a/target-arm/cpu.h +++ b/target-arm/cpu.h @@ -382,6 +382,7 @@ enum arm_features { ARM_FEATURE_VAPA, /* cp15 VA to PA lookups */ ARM_FEATURE_ARM_DIV, /* divide supported in ARM encoding */ ARM_FEATURE_VFP4, /* VFPv4 (implies that NEON is v2) */ + ARM_FEATURE_GENERIC_TIMER, }; static inline int arm_feature(CPUARMState *env, int feature) diff --git a/target-arm/helper.c b/target-arm/helper.c index 22e40fc924..5e7205a9e0 100644 --- a/target-arm/helper.c +++ b/target-arm/helper.c @@ -1764,7 +1764,11 @@ void HELPER(set_cp15)(CPUState *env, uint32_t insn, uint32_t val) goto bad_reg; } break; - case 14: /* Reserved. */ + case 14: /* Generic timer */ + if (arm_feature(env, ARM_FEATURE_GENERIC_TIMER)) { + /* Dummy implementation: RAZ/WI for all */ + break; + } goto bad_reg; case 15: /* Implementation specific. */ if (arm_feature(env, ARM_FEATURE_XSCALE)) { @@ -2134,7 +2138,11 @@ uint32_t HELPER(get_cp15)(CPUState *env, uint32_t insn) default: goto bad_reg; } - case 14: /* Reserved. */ + case 14: /* Generic timer */ + if (arm_feature(env, ARM_FEATURE_GENERIC_TIMER)) { + /* Dummy implementation: RAZ/WI for all */ + return 0; + } goto bad_reg; case 15: /* Implementation specific. */ if (arm_feature(env, ARM_FEATURE_XSCALE)) { |