target/riscv: Invoke pmu init after feature enable
The dependant ISA features are enabled at the end of cpu_realize in finalize_features. Thus, PMU init should be invoked after that only. Move the init invocation to riscv_tcg_cpu_finalize_features. Reviewed-by: Alistair Francis <alistair.francis@wdc.com> Signed-off-by: Atish Patra <atishp@rivosinc.com> Message-ID: <20250110-counter_delegation-v5-9-e83d797ae294@rivosinc.com> Signed-off-by: Alistair Francis <alistair.francis@wdc.com>
This commit is contained in:
parent
6247dc2ef7
commit
04ff272d58
@ -963,6 +963,20 @@ void riscv_tcg_cpu_finalize_features(RISCVCPU *cpu, Error **errp)
|
|||||||
error_propagate(errp, local_err);
|
error_propagate(errp, local_err);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
#ifndef CONFIG_USER_ONLY
|
||||||
|
if (cpu->cfg.pmu_mask) {
|
||||||
|
riscv_pmu_init(cpu, &local_err);
|
||||||
|
if (local_err != NULL) {
|
||||||
|
error_propagate(errp, local_err);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (cpu->cfg.ext_sscofpmf) {
|
||||||
|
cpu->pmu_timer = timer_new_ns(QEMU_CLOCK_VIRTUAL,
|
||||||
|
riscv_pmu_timer_cb, cpu);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
void riscv_tcg_cpu_finalize_dynamic_decoder(RISCVCPU *cpu)
|
void riscv_tcg_cpu_finalize_dynamic_decoder(RISCVCPU *cpu)
|
||||||
@ -1010,7 +1024,6 @@ static bool riscv_tcg_cpu_realize(CPUState *cs, Error **errp)
|
|||||||
|
|
||||||
#ifndef CONFIG_USER_ONLY
|
#ifndef CONFIG_USER_ONLY
|
||||||
CPURISCVState *env = &cpu->env;
|
CPURISCVState *env = &cpu->env;
|
||||||
Error *local_err = NULL;
|
|
||||||
|
|
||||||
tcg_cflags_set(CPU(cs), CF_PCREL);
|
tcg_cflags_set(CPU(cs), CF_PCREL);
|
||||||
|
|
||||||
@ -1018,19 +1031,6 @@ static bool riscv_tcg_cpu_realize(CPUState *cs, Error **errp)
|
|||||||
riscv_timer_init(cpu);
|
riscv_timer_init(cpu);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (cpu->cfg.pmu_mask) {
|
|
||||||
riscv_pmu_init(cpu, &local_err);
|
|
||||||
if (local_err != NULL) {
|
|
||||||
error_propagate(errp, local_err);
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (cpu->cfg.ext_sscofpmf) {
|
|
||||||
cpu->pmu_timer = timer_new_ns(QEMU_CLOCK_VIRTUAL,
|
|
||||||
riscv_pmu_timer_cb, cpu);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/* With H-Ext, VSSIP, VSTIP, VSEIP and SGEIP are hardwired to one. */
|
/* With H-Ext, VSSIP, VSTIP, VSEIP and SGEIP are hardwired to one. */
|
||||||
if (riscv_has_ext(env, RVH)) {
|
if (riscv_has_ext(env, RVH)) {
|
||||||
env->mideleg = MIP_VSSIP | MIP_VSTIP | MIP_VSEIP | MIP_SGEIP;
|
env->mideleg = MIP_VSSIP | MIP_VSTIP | MIP_VSEIP | MIP_SGEIP;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user