From: Philippe Mathieu-Daudé Date: Thu, 29 Jan 2026 13:32:05 +0000 (+0000) Subject: target/arm/hvf: Move hvf_sysreg_[read, write]_cp() functions around X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=c0f2a78e2c7f449a07d2432cc7905c9c48e2fa3b;p=thirdparty%2Fqemu.git target/arm/hvf: Move hvf_sysreg_[read, write]_cp() functions around Next commit will use these functions prototype earlier. Rather than forward-declaring them, move them around. Signed-off-by: Philippe Mathieu-Daudé Reviewed-by: Richard Henderson Reviewed-by: Akihiko Odaki Message-id: 20260118215945.46693-2-philmd@linaro.org Signed-off-by: Peter Maydell --- diff --git a/target/arm/hvf/hvf.c b/target/arm/hvf/hvf.c index e4c0d936f1..fcb7fa3b30 100644 --- a/target/arm/hvf/hvf.c +++ b/target/arm/hvf/hvf.c @@ -423,6 +423,77 @@ static const hv_sys_reg_t hvf_sreg_list[] = { #undef DEF_SYSREG +static uint32_t hvf_reg2cp_reg(uint32_t reg) +{ + return ENCODE_AA64_CP_REG((reg >> SYSREG_OP0_SHIFT) & SYSREG_OP0_MASK, + (reg >> SYSREG_OP1_SHIFT) & SYSREG_OP1_MASK, + (reg >> SYSREG_CRN_SHIFT) & SYSREG_CRN_MASK, + (reg >> SYSREG_CRM_SHIFT) & SYSREG_CRM_MASK, + (reg >> SYSREG_OP2_SHIFT) & SYSREG_OP2_MASK); +} + +static bool hvf_sysreg_read_cp(CPUState *cpu, const char *cpname, + uint32_t reg, uint64_t *val) +{ + ARMCPU *arm_cpu = ARM_CPU(cpu); + CPUARMState *env = &arm_cpu->env; + const ARMCPRegInfo *ri; + + ri = get_arm_cp_reginfo(arm_cpu->cp_regs, hvf_reg2cp_reg(reg)); + if (ri) { + if (!cp_access_ok(1, ri, true)) { + return false; + } + if (ri->accessfn) { + if (ri->accessfn(env, ri, true) != CP_ACCESS_OK) { + return false; + } + } + if (ri->type & ARM_CP_CONST) { + *val = ri->resetvalue; + } else if (ri->readfn) { + *val = ri->readfn(env, ri); + } else { + *val = raw_read(env, ri); + } + trace_hvf_emu_reginfo_read(cpname, ri->name, *val); + return true; + } + + return false; +} + +static bool hvf_sysreg_write_cp(CPUState *cpu, const char *cpname, + uint32_t reg, uint64_t val) +{ + ARMCPU *arm_cpu = ARM_CPU(cpu); + CPUARMState *env = &arm_cpu->env; + const ARMCPRegInfo *ri; + + ri = get_arm_cp_reginfo(arm_cpu->cp_regs, hvf_reg2cp_reg(reg)); + + if (ri) { + if (!cp_access_ok(1, ri, false)) { + return false; + } + if (ri->accessfn) { + if (ri->accessfn(env, ri, false) != CP_ACCESS_OK) { + return false; + } + } + if (ri->writefn) { + ri->writefn(env, ri, val); + } else { + raw_write(env, ri, val); + } + + trace_hvf_emu_reginfo_write(cpname, ri->name, val); + return true; + } + + return false; +} + int hvf_arch_get_registers(CPUState *cpu) { ARMCPU *arm_cpu = ARM_CPU(cpu); @@ -1161,46 +1232,6 @@ static bool is_id_sysreg(uint32_t reg) SYSREG_CRM(reg) < 8; } -static uint32_t hvf_reg2cp_reg(uint32_t reg) -{ - return ENCODE_AA64_CP_REG((reg >> SYSREG_OP0_SHIFT) & SYSREG_OP0_MASK, - (reg >> SYSREG_OP1_SHIFT) & SYSREG_OP1_MASK, - (reg >> SYSREG_CRN_SHIFT) & SYSREG_CRN_MASK, - (reg >> SYSREG_CRM_SHIFT) & SYSREG_CRM_MASK, - (reg >> SYSREG_OP2_SHIFT) & SYSREG_OP2_MASK); -} - -static bool hvf_sysreg_read_cp(CPUState *cpu, const char *cpname, - uint32_t reg, uint64_t *val) -{ - ARMCPU *arm_cpu = ARM_CPU(cpu); - CPUARMState *env = &arm_cpu->env; - const ARMCPRegInfo *ri; - - ri = get_arm_cp_reginfo(arm_cpu->cp_regs, hvf_reg2cp_reg(reg)); - if (ri) { - if (!cp_access_ok(1, ri, true)) { - return false; - } - if (ri->accessfn) { - if (ri->accessfn(env, ri, true) != CP_ACCESS_OK) { - return false; - } - } - if (ri->type & ARM_CP_CONST) { - *val = ri->resetvalue; - } else if (ri->readfn) { - *val = ri->readfn(env, ri); - } else { - *val = raw_read(env, ri); - } - trace_hvf_emu_reginfo_read(cpname, ri->name, *val); - return true; - } - - return false; -} - static int hvf_sysreg_read(CPUState *cpu, uint32_t reg, uint64_t *val) { ARMCPU *arm_cpu = ARM_CPU(cpu); @@ -1454,37 +1485,6 @@ static void pmswinc_write(CPUARMState *env, uint64_t value) } } -static bool hvf_sysreg_write_cp(CPUState *cpu, const char *cpname, - uint32_t reg, uint64_t val) -{ - ARMCPU *arm_cpu = ARM_CPU(cpu); - CPUARMState *env = &arm_cpu->env; - const ARMCPRegInfo *ri; - - ri = get_arm_cp_reginfo(arm_cpu->cp_regs, hvf_reg2cp_reg(reg)); - - if (ri) { - if (!cp_access_ok(1, ri, false)) { - return false; - } - if (ri->accessfn) { - if (ri->accessfn(env, ri, false) != CP_ACCESS_OK) { - return false; - } - } - if (ri->writefn) { - ri->writefn(env, ri, val); - } else { - raw_write(env, ri, val); - } - - trace_hvf_emu_reginfo_write(cpname, ri->name, val); - return true; - } - - return false; -} - static int hvf_sysreg_write(CPUState *cpu, uint32_t reg, uint64_t val) { ARMCPU *arm_cpu = ARM_CPU(cpu);