mirror of https://github.com/xemu-project/xemu.git
hvf: handle access for more registers
Required for guest debugging. Signed-off-by: Francesco Cagnin <fcagnin@quarkslab.com> Message-id: 20230601153107.81955-3-fcagnin@quarkslab.com Reviewed-by: Peter Maydell <peter.maydell@linaro.org> Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
This commit is contained in:
parent
0ca52a5fed
commit
ce799a04b2
|
@ -107,6 +107,72 @@
|
|||
#define SYSREG_ICC_SGI1R_EL1 SYSREG(3, 0, 12, 11, 5)
|
||||
#define SYSREG_ICC_SRE_EL1 SYSREG(3, 0, 12, 12, 5)
|
||||
|
||||
#define SYSREG_MDSCR_EL1 SYSREG(2, 0, 0, 2, 2)
|
||||
#define SYSREG_DBGBVR0_EL1 SYSREG(2, 0, 0, 0, 4)
|
||||
#define SYSREG_DBGBCR0_EL1 SYSREG(2, 0, 0, 0, 5)
|
||||
#define SYSREG_DBGWVR0_EL1 SYSREG(2, 0, 0, 0, 6)
|
||||
#define SYSREG_DBGWCR0_EL1 SYSREG(2, 0, 0, 0, 7)
|
||||
#define SYSREG_DBGBVR1_EL1 SYSREG(2, 0, 0, 1, 4)
|
||||
#define SYSREG_DBGBCR1_EL1 SYSREG(2, 0, 0, 1, 5)
|
||||
#define SYSREG_DBGWVR1_EL1 SYSREG(2, 0, 0, 1, 6)
|
||||
#define SYSREG_DBGWCR1_EL1 SYSREG(2, 0, 0, 1, 7)
|
||||
#define SYSREG_DBGBVR2_EL1 SYSREG(2, 0, 0, 2, 4)
|
||||
#define SYSREG_DBGBCR2_EL1 SYSREG(2, 0, 0, 2, 5)
|
||||
#define SYSREG_DBGWVR2_EL1 SYSREG(2, 0, 0, 2, 6)
|
||||
#define SYSREG_DBGWCR2_EL1 SYSREG(2, 0, 0, 2, 7)
|
||||
#define SYSREG_DBGBVR3_EL1 SYSREG(2, 0, 0, 3, 4)
|
||||
#define SYSREG_DBGBCR3_EL1 SYSREG(2, 0, 0, 3, 5)
|
||||
#define SYSREG_DBGWVR3_EL1 SYSREG(2, 0, 0, 3, 6)
|
||||
#define SYSREG_DBGWCR3_EL1 SYSREG(2, 0, 0, 3, 7)
|
||||
#define SYSREG_DBGBVR4_EL1 SYSREG(2, 0, 0, 4, 4)
|
||||
#define SYSREG_DBGBCR4_EL1 SYSREG(2, 0, 0, 4, 5)
|
||||
#define SYSREG_DBGWVR4_EL1 SYSREG(2, 0, 0, 4, 6)
|
||||
#define SYSREG_DBGWCR4_EL1 SYSREG(2, 0, 0, 4, 7)
|
||||
#define SYSREG_DBGBVR5_EL1 SYSREG(2, 0, 0, 5, 4)
|
||||
#define SYSREG_DBGBCR5_EL1 SYSREG(2, 0, 0, 5, 5)
|
||||
#define SYSREG_DBGWVR5_EL1 SYSREG(2, 0, 0, 5, 6)
|
||||
#define SYSREG_DBGWCR5_EL1 SYSREG(2, 0, 0, 5, 7)
|
||||
#define SYSREG_DBGBVR6_EL1 SYSREG(2, 0, 0, 6, 4)
|
||||
#define SYSREG_DBGBCR6_EL1 SYSREG(2, 0, 0, 6, 5)
|
||||
#define SYSREG_DBGWVR6_EL1 SYSREG(2, 0, 0, 6, 6)
|
||||
#define SYSREG_DBGWCR6_EL1 SYSREG(2, 0, 0, 6, 7)
|
||||
#define SYSREG_DBGBVR7_EL1 SYSREG(2, 0, 0, 7, 4)
|
||||
#define SYSREG_DBGBCR7_EL1 SYSREG(2, 0, 0, 7, 5)
|
||||
#define SYSREG_DBGWVR7_EL1 SYSREG(2, 0, 0, 7, 6)
|
||||
#define SYSREG_DBGWCR7_EL1 SYSREG(2, 0, 0, 7, 7)
|
||||
#define SYSREG_DBGBVR8_EL1 SYSREG(2, 0, 0, 8, 4)
|
||||
#define SYSREG_DBGBCR8_EL1 SYSREG(2, 0, 0, 8, 5)
|
||||
#define SYSREG_DBGWVR8_EL1 SYSREG(2, 0, 0, 8, 6)
|
||||
#define SYSREG_DBGWCR8_EL1 SYSREG(2, 0, 0, 8, 7)
|
||||
#define SYSREG_DBGBVR9_EL1 SYSREG(2, 0, 0, 9, 4)
|
||||
#define SYSREG_DBGBCR9_EL1 SYSREG(2, 0, 0, 9, 5)
|
||||
#define SYSREG_DBGWVR9_EL1 SYSREG(2, 0, 0, 9, 6)
|
||||
#define SYSREG_DBGWCR9_EL1 SYSREG(2, 0, 0, 9, 7)
|
||||
#define SYSREG_DBGBVR10_EL1 SYSREG(2, 0, 0, 10, 4)
|
||||
#define SYSREG_DBGBCR10_EL1 SYSREG(2, 0, 0, 10, 5)
|
||||
#define SYSREG_DBGWVR10_EL1 SYSREG(2, 0, 0, 10, 6)
|
||||
#define SYSREG_DBGWCR10_EL1 SYSREG(2, 0, 0, 10, 7)
|
||||
#define SYSREG_DBGBVR11_EL1 SYSREG(2, 0, 0, 11, 4)
|
||||
#define SYSREG_DBGBCR11_EL1 SYSREG(2, 0, 0, 11, 5)
|
||||
#define SYSREG_DBGWVR11_EL1 SYSREG(2, 0, 0, 11, 6)
|
||||
#define SYSREG_DBGWCR11_EL1 SYSREG(2, 0, 0, 11, 7)
|
||||
#define SYSREG_DBGBVR12_EL1 SYSREG(2, 0, 0, 12, 4)
|
||||
#define SYSREG_DBGBCR12_EL1 SYSREG(2, 0, 0, 12, 5)
|
||||
#define SYSREG_DBGWVR12_EL1 SYSREG(2, 0, 0, 12, 6)
|
||||
#define SYSREG_DBGWCR12_EL1 SYSREG(2, 0, 0, 12, 7)
|
||||
#define SYSREG_DBGBVR13_EL1 SYSREG(2, 0, 0, 13, 4)
|
||||
#define SYSREG_DBGBCR13_EL1 SYSREG(2, 0, 0, 13, 5)
|
||||
#define SYSREG_DBGWVR13_EL1 SYSREG(2, 0, 0, 13, 6)
|
||||
#define SYSREG_DBGWCR13_EL1 SYSREG(2, 0, 0, 13, 7)
|
||||
#define SYSREG_DBGBVR14_EL1 SYSREG(2, 0, 0, 14, 4)
|
||||
#define SYSREG_DBGBCR14_EL1 SYSREG(2, 0, 0, 14, 5)
|
||||
#define SYSREG_DBGWVR14_EL1 SYSREG(2, 0, 0, 14, 6)
|
||||
#define SYSREG_DBGWCR14_EL1 SYSREG(2, 0, 0, 14, 7)
|
||||
#define SYSREG_DBGBVR15_EL1 SYSREG(2, 0, 0, 15, 4)
|
||||
#define SYSREG_DBGBCR15_EL1 SYSREG(2, 0, 0, 15, 5)
|
||||
#define SYSREG_DBGWVR15_EL1 SYSREG(2, 0, 0, 15, 6)
|
||||
#define SYSREG_DBGWCR15_EL1 SYSREG(2, 0, 0, 15, 7)
|
||||
|
||||
#define WFX_IS_WFE (1 << 0)
|
||||
|
||||
#define TMR_CTL_ENABLE (1 << 0)
|
||||
|
@ -933,6 +999,78 @@ static int hvf_sysreg_read(CPUState *cpu, uint32_t reg, uint32_t rt)
|
|||
hvf_raise_exception(cpu, EXCP_UDEF, syn_uncategorized());
|
||||
}
|
||||
break;
|
||||
case SYSREG_DBGBVR0_EL1:
|
||||
case SYSREG_DBGBVR1_EL1:
|
||||
case SYSREG_DBGBVR2_EL1:
|
||||
case SYSREG_DBGBVR3_EL1:
|
||||
case SYSREG_DBGBVR4_EL1:
|
||||
case SYSREG_DBGBVR5_EL1:
|
||||
case SYSREG_DBGBVR6_EL1:
|
||||
case SYSREG_DBGBVR7_EL1:
|
||||
case SYSREG_DBGBVR8_EL1:
|
||||
case SYSREG_DBGBVR9_EL1:
|
||||
case SYSREG_DBGBVR10_EL1:
|
||||
case SYSREG_DBGBVR11_EL1:
|
||||
case SYSREG_DBGBVR12_EL1:
|
||||
case SYSREG_DBGBVR13_EL1:
|
||||
case SYSREG_DBGBVR14_EL1:
|
||||
case SYSREG_DBGBVR15_EL1:
|
||||
val = env->cp15.dbgbvr[SYSREG_CRM(reg)];
|
||||
break;
|
||||
case SYSREG_DBGBCR0_EL1:
|
||||
case SYSREG_DBGBCR1_EL1:
|
||||
case SYSREG_DBGBCR2_EL1:
|
||||
case SYSREG_DBGBCR3_EL1:
|
||||
case SYSREG_DBGBCR4_EL1:
|
||||
case SYSREG_DBGBCR5_EL1:
|
||||
case SYSREG_DBGBCR6_EL1:
|
||||
case SYSREG_DBGBCR7_EL1:
|
||||
case SYSREG_DBGBCR8_EL1:
|
||||
case SYSREG_DBGBCR9_EL1:
|
||||
case SYSREG_DBGBCR10_EL1:
|
||||
case SYSREG_DBGBCR11_EL1:
|
||||
case SYSREG_DBGBCR12_EL1:
|
||||
case SYSREG_DBGBCR13_EL1:
|
||||
case SYSREG_DBGBCR14_EL1:
|
||||
case SYSREG_DBGBCR15_EL1:
|
||||
val = env->cp15.dbgbcr[SYSREG_CRM(reg)];
|
||||
break;
|
||||
case SYSREG_DBGWVR0_EL1:
|
||||
case SYSREG_DBGWVR1_EL1:
|
||||
case SYSREG_DBGWVR2_EL1:
|
||||
case SYSREG_DBGWVR3_EL1:
|
||||
case SYSREG_DBGWVR4_EL1:
|
||||
case SYSREG_DBGWVR5_EL1:
|
||||
case SYSREG_DBGWVR6_EL1:
|
||||
case SYSREG_DBGWVR7_EL1:
|
||||
case SYSREG_DBGWVR8_EL1:
|
||||
case SYSREG_DBGWVR9_EL1:
|
||||
case SYSREG_DBGWVR10_EL1:
|
||||
case SYSREG_DBGWVR11_EL1:
|
||||
case SYSREG_DBGWVR12_EL1:
|
||||
case SYSREG_DBGWVR13_EL1:
|
||||
case SYSREG_DBGWVR14_EL1:
|
||||
case SYSREG_DBGWVR15_EL1:
|
||||
val = env->cp15.dbgwvr[SYSREG_CRM(reg)];
|
||||
break;
|
||||
case SYSREG_DBGWCR0_EL1:
|
||||
case SYSREG_DBGWCR1_EL1:
|
||||
case SYSREG_DBGWCR2_EL1:
|
||||
case SYSREG_DBGWCR3_EL1:
|
||||
case SYSREG_DBGWCR4_EL1:
|
||||
case SYSREG_DBGWCR5_EL1:
|
||||
case SYSREG_DBGWCR6_EL1:
|
||||
case SYSREG_DBGWCR7_EL1:
|
||||
case SYSREG_DBGWCR8_EL1:
|
||||
case SYSREG_DBGWCR9_EL1:
|
||||
case SYSREG_DBGWCR10_EL1:
|
||||
case SYSREG_DBGWCR11_EL1:
|
||||
case SYSREG_DBGWCR12_EL1:
|
||||
case SYSREG_DBGWCR13_EL1:
|
||||
case SYSREG_DBGWCR14_EL1:
|
||||
case SYSREG_DBGWCR15_EL1:
|
||||
val = env->cp15.dbgwcr[SYSREG_CRM(reg)];
|
||||
break;
|
||||
default:
|
||||
if (is_id_sysreg(reg)) {
|
||||
/* ID system registers read as RES0 */
|
||||
|
@ -1172,6 +1310,81 @@ static int hvf_sysreg_write(CPUState *cpu, uint32_t reg, uint64_t val)
|
|||
hvf_raise_exception(cpu, EXCP_UDEF, syn_uncategorized());
|
||||
}
|
||||
break;
|
||||
case SYSREG_MDSCR_EL1:
|
||||
env->cp15.mdscr_el1 = val;
|
||||
break;
|
||||
case SYSREG_DBGBVR0_EL1:
|
||||
case SYSREG_DBGBVR1_EL1:
|
||||
case SYSREG_DBGBVR2_EL1:
|
||||
case SYSREG_DBGBVR3_EL1:
|
||||
case SYSREG_DBGBVR4_EL1:
|
||||
case SYSREG_DBGBVR5_EL1:
|
||||
case SYSREG_DBGBVR6_EL1:
|
||||
case SYSREG_DBGBVR7_EL1:
|
||||
case SYSREG_DBGBVR8_EL1:
|
||||
case SYSREG_DBGBVR9_EL1:
|
||||
case SYSREG_DBGBVR10_EL1:
|
||||
case SYSREG_DBGBVR11_EL1:
|
||||
case SYSREG_DBGBVR12_EL1:
|
||||
case SYSREG_DBGBVR13_EL1:
|
||||
case SYSREG_DBGBVR14_EL1:
|
||||
case SYSREG_DBGBVR15_EL1:
|
||||
env->cp15.dbgbvr[SYSREG_CRM(reg)] = val;
|
||||
break;
|
||||
case SYSREG_DBGBCR0_EL1:
|
||||
case SYSREG_DBGBCR1_EL1:
|
||||
case SYSREG_DBGBCR2_EL1:
|
||||
case SYSREG_DBGBCR3_EL1:
|
||||
case SYSREG_DBGBCR4_EL1:
|
||||
case SYSREG_DBGBCR5_EL1:
|
||||
case SYSREG_DBGBCR6_EL1:
|
||||
case SYSREG_DBGBCR7_EL1:
|
||||
case SYSREG_DBGBCR8_EL1:
|
||||
case SYSREG_DBGBCR9_EL1:
|
||||
case SYSREG_DBGBCR10_EL1:
|
||||
case SYSREG_DBGBCR11_EL1:
|
||||
case SYSREG_DBGBCR12_EL1:
|
||||
case SYSREG_DBGBCR13_EL1:
|
||||
case SYSREG_DBGBCR14_EL1:
|
||||
case SYSREG_DBGBCR15_EL1:
|
||||
env->cp15.dbgbcr[SYSREG_CRM(reg)] = val;
|
||||
break;
|
||||
case SYSREG_DBGWVR0_EL1:
|
||||
case SYSREG_DBGWVR1_EL1:
|
||||
case SYSREG_DBGWVR2_EL1:
|
||||
case SYSREG_DBGWVR3_EL1:
|
||||
case SYSREG_DBGWVR4_EL1:
|
||||
case SYSREG_DBGWVR5_EL1:
|
||||
case SYSREG_DBGWVR6_EL1:
|
||||
case SYSREG_DBGWVR7_EL1:
|
||||
case SYSREG_DBGWVR8_EL1:
|
||||
case SYSREG_DBGWVR9_EL1:
|
||||
case SYSREG_DBGWVR10_EL1:
|
||||
case SYSREG_DBGWVR11_EL1:
|
||||
case SYSREG_DBGWVR12_EL1:
|
||||
case SYSREG_DBGWVR13_EL1:
|
||||
case SYSREG_DBGWVR14_EL1:
|
||||
case SYSREG_DBGWVR15_EL1:
|
||||
env->cp15.dbgwvr[SYSREG_CRM(reg)] = val;
|
||||
break;
|
||||
case SYSREG_DBGWCR0_EL1:
|
||||
case SYSREG_DBGWCR1_EL1:
|
||||
case SYSREG_DBGWCR2_EL1:
|
||||
case SYSREG_DBGWCR3_EL1:
|
||||
case SYSREG_DBGWCR4_EL1:
|
||||
case SYSREG_DBGWCR5_EL1:
|
||||
case SYSREG_DBGWCR6_EL1:
|
||||
case SYSREG_DBGWCR7_EL1:
|
||||
case SYSREG_DBGWCR8_EL1:
|
||||
case SYSREG_DBGWCR9_EL1:
|
||||
case SYSREG_DBGWCR10_EL1:
|
||||
case SYSREG_DBGWCR11_EL1:
|
||||
case SYSREG_DBGWCR12_EL1:
|
||||
case SYSREG_DBGWCR13_EL1:
|
||||
case SYSREG_DBGWCR14_EL1:
|
||||
case SYSREG_DBGWCR15_EL1:
|
||||
env->cp15.dbgwcr[SYSREG_CRM(reg)] = val;
|
||||
break;
|
||||
default:
|
||||
cpu_synchronize_state(cpu);
|
||||
trace_hvf_unhandled_sysreg_write(env->pc, reg,
|
||||
|
|
Loading…
Reference in New Issue