From: BALATON Zoltan Date: Thu, 23 Oct 2025 00:06:17 +0000 (+0200) Subject: hw/ppc/pegasos2: Add bus frequency to machine state X-Git-Tag: v10.2.0-rc1~48^2~10 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=a310dbfade83b52b31f898fa82395e08aa9ae189;p=thirdparty%2Fqemu.git 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 Reviewed-by: Philippe Mathieu-Daudé Link: https://lore.kernel.org/qemu-devel/b69e21e353b7d7f22a34db5f13443f60f51c7238.1761176219.git.balaton@eik.bme.hu Signed-off-by: Harsh Prateek Bora --- diff --git a/hw/ppc/pegasos2.c b/hw/ppc/pegasos2.c index f5b56c0e94..7eaefcf9a0 100644 --- a/hw/ppc/pegasos2.c +++ b/hw/ppc/pegasos2.c @@ -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";