Using class_data pointer to create a MachineClass is not the recommended way anymore. The correct way is to open-code the MachineClass::fields in the class_init() method.
This partly reverts commit a03bde3674e. Suggested-by: Igor Mammedov <imamm...@redhat.com> Signed-off-by: Philippe Mathieu-Daudé <f4...@amsat.org> --- hw/arm/raspi.c | 32 ++++++++++++++++++++++---------- 1 file changed, 22 insertions(+), 10 deletions(-) diff --git a/hw/arm/raspi.c b/hw/arm/raspi.c index 221356933e..81cc5824c4 100644 --- a/hw/arm/raspi.c +++ b/hw/arm/raspi.c @@ -309,13 +309,9 @@ static void raspi_machine_init(MachineState *machine) setup_boot(machine, version, machine->ram_size - vcram_size); } -static void raspi_machine_class_init(ObjectClass *oc, void *data) +static void raspi_machine_class_common_init(MachineClass *mc, + uint32_t board_rev) { - MachineClass *mc = MACHINE_CLASS(oc); - RaspiMachineClass *rmc = RASPI_MACHINE_CLASS(oc); - uint32_t board_rev = (uint32_t)(uintptr_t)data; - - rmc->board_rev = board_rev; mc->desc = g_strdup_printf("Raspberry Pi %s", board_type(board_rev)); mc->init = raspi_machine_init; mc->block_default_type = IF_SD; @@ -326,18 +322,34 @@ static void raspi_machine_class_init(ObjectClass *oc, void *data) mc->default_ram_size = board_ram_size(board_rev); }; +static void raspi2_machine_class_init(ObjectClass *oc, void *data) +{ + RaspiMachineClass *rmc = RASPI_MACHINE_CLASS(oc); + + rmc->board_rev = 0xa21041; + raspi_machine_class_common_init(MACHINE_CLASS(oc), rmc->board_rev); +}; + +#ifdef TARGET_AARCH64 +static void raspi3_machine_class_init(ObjectClass *oc, void *data) +{ + RaspiMachineClass *rmc = RASPI_MACHINE_CLASS(oc); + + rmc->board_rev = 0xa02082; + raspi_machine_class_common_init(MACHINE_CLASS(oc), rmc->board_rev); +}; +#endif /* TARGET_AARCH64 */ + static const TypeInfo raspi_machine_types[] = { { .name = MACHINE_TYPE_NAME("raspi2"), .parent = TYPE_RASPI_MACHINE, - .class_init = raspi_machine_class_init, - .class_data = (void *)0xa21041, + .class_init = raspi2_machine_class_init, #ifdef TARGET_AARCH64 }, { .name = MACHINE_TYPE_NAME("raspi3"), .parent = TYPE_RASPI_MACHINE, - .class_init = raspi_machine_class_init, - .class_data = (void *)0xa02082, + .class_init = raspi3_machine_class_init, #endif }, { .name = TYPE_RASPI_MACHINE, -- 2.21.1