|
@@ -754,6 +754,15 @@ static bool hvf_handle_psci_call(CPUState *cpu)
|
|
|
return true;
|
|
|
}
|
|
|
|
|
|
+static bool is_id_sysreg(uint32_t reg)
|
|
|
+{
|
|
|
+ return SYSREG_OP0(reg) == 3 &&
|
|
|
+ SYSREG_OP1(reg) == 0 &&
|
|
|
+ SYSREG_CRN(reg) == 0 &&
|
|
|
+ SYSREG_CRM(reg) >= 1 &&
|
|
|
+ SYSREG_CRM(reg) < 8;
|
|
|
+}
|
|
|
+
|
|
|
static int hvf_sysreg_read(CPUState *cpu, uint32_t reg, uint32_t rt)
|
|
|
{
|
|
|
ARMCPU *arm_cpu = ARM_CPU(cpu);
|
|
@@ -806,6 +815,11 @@ static int hvf_sysreg_read(CPUState *cpu, uint32_t reg, uint32_t rt)
|
|
|
/* Dummy register */
|
|
|
break;
|
|
|
default:
|
|
|
+ if (is_id_sysreg(reg)) {
|
|
|
+ /* ID system registers read as RES0 */
|
|
|
+ val = 0;
|
|
|
+ break;
|
|
|
+ }
|
|
|
cpu_synchronize_state(cpu);
|
|
|
trace_hvf_unhandled_sysreg_read(env->pc, reg,
|
|
|
SYSREG_OP0(reg),
|