@ -200,6 +200,9 @@ void hvf_arm_init_debug(void)
# define SYSREG_PMCEID0_EL0 SYSREG(3, 3, 9, 12, 6)
# define SYSREG_PMCEID0_EL0 SYSREG(3, 3, 9, 12, 6)
# define SYSREG_PMCEID1_EL0 SYSREG(3, 3, 9, 12, 7)
# define SYSREG_PMCEID1_EL0 SYSREG(3, 3, 9, 12, 7)
# define SYSREG_PMCCNTR_EL0 SYSREG(3, 3, 9, 13, 0)
# define SYSREG_PMCCNTR_EL0 SYSREG(3, 3, 9, 13, 0)
# define SYSREG_CNTV_CTL_EL0 SYSREG(3, 3, 14, 3, 1)
# define SYSREG_CNTV_CVAL_EL0 SYSREG(3, 3, 14, 3, 2)
# define SYSREG_PMCCFILTR_EL0 SYSREG(3, 3, 14, 15, 7)
# define SYSREG_PMCCFILTR_EL0 SYSREG(3, 3, 14, 15, 7)
# define SYSREG_ICC_AP0R0_EL1 SYSREG(3, 0, 12, 8, 4)
# define SYSREG_ICC_AP0R0_EL1 SYSREG(3, 0, 12, 8, 4)
@ -502,6 +505,7 @@ int hvf_arch_get_registers(CPUState *cpu)
uint64_t val ;
uint64_t val ;
hv_simd_fp_uchar16_t fpval ;
hv_simd_fp_uchar16_t fpval ;
int i , n ;
int i , n ;
bool b ;
for ( i = 0 ; i < ARRAY_SIZE ( hvf_reg_match ) ; i + + ) {
for ( i = 0 ; i < ARRAY_SIZE ( hvf_reg_match ) ; i + + ) {
ret = hv_vcpu_get_reg ( cpu - > accel - > fd , hvf_reg_match [ i ] . reg , & val ) ;
ret = hv_vcpu_get_reg ( cpu - > accel - > fd , hvf_reg_match [ i ] . reg , & val ) ;
@ -631,6 +635,16 @@ int hvf_arch_get_registers(CPUState *cpu)
aarch64_restore_sp ( env , arm_current_el ( env ) ) ;
aarch64_restore_sp ( env , arm_current_el ( env ) ) ;
ret = hv_vcpu_get_sys_reg ( cpu - > accel - > fd , HV_SYS_REG_CNTV_CVAL_EL0 , & val ) ;
assert_hvf_ok ( ret ) ;
b = hvf_sysreg_write_cp ( cpu , " VTimer " , SYSREG_CNTV_CVAL_EL0 , val ) ;
assert ( b ) ;
ret = hv_vcpu_get_sys_reg ( cpu - > accel - > fd , HV_SYS_REG_CNTV_CTL_EL0 , & val ) ;
assert_hvf_ok ( ret ) ;
b = hvf_sysreg_write_cp ( cpu , " VTimer " , SYSREG_CNTV_CTL_EL0 , val ) ;
assert ( b ) ;
return 0 ;
return 0 ;
}
}
@ -642,6 +656,7 @@ int hvf_arch_put_registers(CPUState *cpu)
uint64_t val ;
uint64_t val ;
hv_simd_fp_uchar16_t fpval ;
hv_simd_fp_uchar16_t fpval ;
int i , n ;
int i , n ;
bool b ;
for ( i = 0 ; i < ARRAY_SIZE ( hvf_reg_match ) ; i + + ) {
for ( i = 0 ; i < ARRAY_SIZE ( hvf_reg_match ) ; i + + ) {
val = * ( uint64_t * ) ( ( void * ) env + hvf_reg_match [ i ] . offset ) ;
val = * ( uint64_t * ) ( ( void * ) env + hvf_reg_match [ i ] . offset ) ;
@ -756,6 +771,16 @@ int hvf_arch_put_registers(CPUState *cpu)
ret = hv_vcpu_set_vtimer_offset ( cpu - > accel - > fd , hvf_state - > vtimer_offset ) ;
ret = hv_vcpu_set_vtimer_offset ( cpu - > accel - > fd , hvf_state - > vtimer_offset ) ;
assert_hvf_ok ( ret ) ;
assert_hvf_ok ( ret ) ;
b = hvf_sysreg_read_cp ( cpu , " VTimer " , SYSREG_CNTV_CVAL_EL0 , & val ) ;
assert ( b ) ;
ret = hv_vcpu_set_sys_reg ( cpu - > accel - > fd , HV_SYS_REG_CNTV_CVAL_EL0 , val ) ;
assert_hvf_ok ( ret ) ;
b = hvf_sysreg_read_cp ( cpu , " VTimer " , SYSREG_CNTV_CTL_EL0 , & val ) ;
assert ( b ) ;
ret = hv_vcpu_set_sys_reg ( cpu - > accel - > fd , HV_SYS_REG_CNTV_CTL_EL0 , val ) ;
assert_hvf_ok ( ret ) ;
return 0 ;
return 0 ;
}
}