hw/ppc/pegasos2: Add bus frequency to machine state

Store the bus frequency in the machine state and set it from instance
init method.

Signed-off-by: BALATON Zoltan <balaton@eik.bme.hu>
Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org>
Link: https://lore.kernel.org/qemu-devel/b69e21e353b7d7f22a34db5f13443f60f51c7238.1761176219.git.balaton@eik.bme.hu
Signed-off-by: Harsh Prateek Bora <harshpb@linux.ibm.com>
This commit is contained in:
BALATON Zoltan 2025-10-23 02:06:17 +02:00 committed by Harsh Prateek Bora
parent 2c378545d0
commit a310dbfade
No known key found for this signature in database
GPG key ID: 4544E994F9D68FBB

View file

@ -55,8 +55,6 @@
#define H_PRIVILEGE -3 /* Caller not privileged */
#define H_PARAMETER -4 /* Parameter invalid, out-of-range or conflicting */
#define BUS_FREQ_HZ 133333333
#define TYPE_PEGASOS_MACHINE MACHINE_TYPE_NAME("pegasos")
OBJECT_DECLARE_SIMPLE_TYPE(PegasosMachineState, PEGASOS_MACHINE)
@ -66,6 +64,7 @@ struct PegasosMachineState {
PowerPCCPU *cpu;
DeviceState *nb; /* north bridge */
DeviceState *sb; /* south bridge */
int bus_freq_hz;
IRQState pci_irqs[PCI_NUM_PINS];
OrIRQState orirq[PCI_NUM_PINS];
qemu_irq mv_pirq[PCI_NUM_PINS];
@ -135,7 +134,7 @@ static void pegasos2_setup_pci_irq(PegasosMachineState *pm)
qdev_get_gpio_in_named(pm->nb, "gpp", 31));
}
static void pegasos2_init(MachineState *machine)
static void pegasos_init(MachineState *machine)
{
PegasosMachineState *pm = PEGASOS_MACHINE(machine);
CPUPPCState *env;
@ -158,7 +157,7 @@ static void pegasos2_init(MachineState *machine)
}
/* Set time-base frequency */
cpu_ppc_tb_init(env, BUS_FREQ_HZ / 4);
cpu_ppc_tb_init(env, pm->bus_freq_hz / 4);
qemu_register_reset(pegasos2_cpu_reset, pm->cpu);
/* RAM */
@ -610,7 +609,7 @@ static void pegasos2_machine_class_init(ObjectClass *oc, const void *data)
VofMachineIfClass *vmc = VOF_MACHINE_CLASS(oc);
mc->desc = "Genesi/bPlan Pegasos II";
mc->init = pegasos2_init;
mc->init = pegasos_init;
mc->reset = pegasos2_machine_reset;
mc->block_default_type = IF_IDE;
mc->default_boot_order = "cd";
@ -629,6 +628,13 @@ static void pegasos2_machine_class_init(ObjectClass *oc, const void *data)
vmc->setprop = pegasos2_setprop;
}
static void pegasos2_init(Object *obj)
{
PegasosMachineState *pm = PEGASOS_MACHINE(obj);
pm->bus_freq_hz = 133333333;
}
static const TypeInfo pegasos_machine_types[] = {
{
.name = TYPE_PEGASOS_MACHINE,
@ -645,6 +651,7 @@ static const TypeInfo pegasos_machine_types[] = {
.name = MACHINE_TYPE_NAME("pegasos2"),
.parent = TYPE_PEGASOS_MACHINE,
.class_init = pegasos2_machine_class_init,
.instance_init = pegasos2_init,
},
};
@ -777,7 +784,7 @@ static void add_pci_device(PCIBus *bus, PCIDevice *d, void *opaque)
g_string_free(node, TRUE);
}
static void add_cpu_info(void *fdt, PowerPCCPU *cpu)
static void add_cpu_info(void *fdt, PowerPCCPU *cpu, int bus_freq)
{
uint32_t cells[2];
@ -824,8 +831,8 @@ static void add_cpu_info(void *fdt, PowerPCCPU *cpu)
qemu_fdt_setprop_cell(fdt, cp, "reservation-granule-size", 4);
qemu_fdt_setprop_cell(fdt, cp, "timebase-frequency",
cpu->env.tb_env->tb_freq);
qemu_fdt_setprop_cell(fdt, cp, "bus-frequency", BUS_FREQ_HZ);
qemu_fdt_setprop_cell(fdt, cp, "clock-frequency", BUS_FREQ_HZ * 7.5);
qemu_fdt_setprop_cell(fdt, cp, "bus-frequency", bus_freq);
qemu_fdt_setprop_cell(fdt, cp, "clock-frequency", bus_freq * 7.5);
qemu_fdt_setprop_cell(fdt, cp, "cpu-version", cpu->env.spr[SPR_PVR]);
cells[0] = 0;
cells[1] = 0;
@ -860,7 +867,7 @@ static void *pegasos2_build_fdt(PegasosMachineState *pm, int *fdt_size)
}
qemu_fdt_setprop_string(fdt, "/", "name", "bplan,Pegasos2");
add_cpu_info(fdt, pm->cpu);
add_cpu_info(fdt, pm->cpu, pm->bus_freq_hz);
fi.fdt = fdt;
fi.path = "/pci@c0000000";