mirror of
https://github.com/Motorhead1991/qemu.git
synced 2025-08-04 08:13:54 -06:00
target/mips/cpu: Allow the CPU to use dynamic frequencies
Use the Clock API and let the CPU object have an input clock.
If no clock is connected, keep using the default frequency of
200 MHz used since the introduction of the 'r4k' machine in
commit 6af0bf9c7c
.
Signed-off-by: Philippe Mathieu-Daudé <f4bug@amsat.org>
Message-Id: <20201012095804.3335117-12-f4bug@amsat.org>
This commit is contained in:
parent
d0bec217ee
commit
a0713e85bf
2 changed files with 13 additions and 2 deletions
|
@ -27,6 +27,7 @@
|
|||
#include "sysemu/kvm.h"
|
||||
#include "exec/exec-all.h"
|
||||
#include "hw/qdev-properties.h"
|
||||
#include "hw/qdev-clock.h"
|
||||
|
||||
static void mips_cpu_set_pc(CPUState *cs, vaddr value)
|
||||
{
|
||||
|
@ -144,8 +145,9 @@ static void mips_cp0_period_set(MIPSCPU *cpu)
|
|||
{
|
||||
CPUMIPSState *env = &cpu->env;
|
||||
|
||||
env->cp0_count_ns = muldiv64(NANOSECONDS_PER_SECOND, cpu->cp0_count_rate,
|
||||
CPU_FREQ_HZ_DEFAULT);
|
||||
env->cp0_count_ns = cpu->cp0_count_rate
|
||||
* clock_get_ns(MIPS_CPU(cpu)->clock);
|
||||
assert(env->cp0_count_ns);
|
||||
}
|
||||
|
||||
static void mips_cpu_realizefn(DeviceState *dev, Error **errp)
|
||||
|
@ -155,6 +157,10 @@ static void mips_cpu_realizefn(DeviceState *dev, Error **errp)
|
|||
MIPSCPUClass *mcc = MIPS_CPU_GET_CLASS(dev);
|
||||
Error *local_err = NULL;
|
||||
|
||||
if (!clock_get(cpu->clock)) {
|
||||
/* Initialize the frequency in case the clock remains unconnected. */
|
||||
clock_set_hz(cpu->clock, CPU_FREQ_HZ_DEFAULT);
|
||||
}
|
||||
mips_cp0_period_set(cpu);
|
||||
|
||||
cpu_exec_realizefn(cs, &local_err);
|
||||
|
@ -178,6 +184,7 @@ static void mips_cpu_initfn(Object *obj)
|
|||
MIPSCPUClass *mcc = MIPS_CPU_GET_CLASS(obj);
|
||||
|
||||
cpu_set_cpustate_pointers(cpu);
|
||||
cpu->clock = qdev_init_clock_in(DEVICE(obj), "clk-in", NULL, cpu);
|
||||
env->cpu_model = mcc->cpu_def;
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue