Also use an 'Object *' under the sPAPR machine to hold the RTC object. Overall, these changes remove an unnecessary and implicit dependency on SysBus.
Signed-off-by: Cédric Le Goater <c...@kaod.org> --- hw/ppc/spapr.c | 12 +++++++----- hw/ppc/spapr_rtc.c | 10 +++++----- include/hw/ppc/spapr.h | 6 +++--- include/hw/ppc/xics.h | 2 +- 4 files changed, 16 insertions(+), 14 deletions(-) Index: qemu-dgibson-for-2.9.git/include/hw/ppc/xics.h =================================================================== --- qemu-dgibson-for-2.9.git.orig/include/hw/ppc/xics.h +++ qemu-dgibson-for-2.9.git/include/hw/ppc/xics.h @@ -28,7 +28,7 @@ #ifndef XICS_H #define XICS_H -#include "hw/sysbus.h" +#include "hw/qdev.h" #define XICS_IPI 0x2 #define XICS_BUID 0x1 Index: qemu-dgibson-for-2.9.git/hw/ppc/spapr_rtc.c =================================================================== --- qemu-dgibson-for-2.9.git.orig/hw/ppc/spapr_rtc.c +++ qemu-dgibson-for-2.9.git/hw/ppc/spapr_rtc.c @@ -39,11 +39,11 @@ typedef struct sPAPRRTCState sPAPRRTCState; struct sPAPRRTCState { /*< private >*/ - SysBusDevice parent_obj; + DeviceState parent_obj; int64_t ns_offset; }; -void spapr_rtc_read(DeviceState *dev, struct tm *tm, uint32_t *ns) +void spapr_rtc_read(Object *dev, struct tm *tm, uint32_t *ns) { sPAPRRTCState *rtc = SPAPR_RTC(dev); int64_t host_ns = qemu_clock_get_ns(rtc_clock); @@ -63,7 +63,7 @@ void spapr_rtc_read(DeviceState *dev, st } } -int spapr_rtc_import_offset(DeviceState *dev, int64_t legacy_offset) +int spapr_rtc_import_offset(Object *dev, int64_t legacy_offset) { sPAPRRTCState *rtc; @@ -155,7 +155,7 @@ static void rtas_set_time_of_day(PowerPC static void spapr_rtc_qom_date(Object *obj, struct tm *current_tm, Error **errp) { - spapr_rtc_read(DEVICE(obj), current_tm, NULL); + spapr_rtc_read(obj, current_tm, NULL); } static void spapr_rtc_realize(DeviceState *dev, Error **errp) @@ -200,7 +200,7 @@ static void spapr_rtc_class_init(ObjectC static const TypeInfo spapr_rtc_info = { .name = TYPE_SPAPR_RTC, - .parent = TYPE_SYS_BUS_DEVICE, + .parent = TYPE_DEVICE, .instance_size = sizeof(sPAPRRTCState), .class_init = spapr_rtc_class_init, }; Index: qemu-dgibson-for-2.9.git/hw/ppc/spapr.c =================================================================== --- qemu-dgibson-for-2.9.git.orig/hw/ppc/spapr.c +++ qemu-dgibson-for-2.9.git/hw/ppc/spapr.c @@ -1333,13 +1333,15 @@ static void spapr_create_nvram(sPAPRMach static void spapr_rtc_create(sPAPRMachineState *spapr) { - DeviceState *dev = qdev_create(NULL, TYPE_SPAPR_RTC); + Object *obj = object_new(TYPE_SPAPR_RTC); - qdev_init_nofail(dev); - spapr->rtc = dev; + object_property_add_child(OBJECT(spapr), "rtc", obj, &error_fatal); + object_property_set_bool(obj, true, "realized", &error_fatal); - object_property_add_alias(qdev_get_machine(), "rtc-time", - OBJECT(spapr->rtc), "date", NULL); + spapr->rtc = obj; + + object_property_add_alias(OBJECT(spapr), "rtc-time", spapr->rtc, "date", + &error_fatal); } /* Returns whether we want to use VGA or not */ Index: qemu-dgibson-for-2.9.git/include/hw/ppc/spapr.h =================================================================== --- qemu-dgibson-for-2.9.git.orig/include/hw/ppc/spapr.h +++ qemu-dgibson-for-2.9.git/include/hw/ppc/spapr.h @@ -59,7 +59,7 @@ struct sPAPRMachineState { QLIST_HEAD(, sPAPRPHBState) phbs; struct sPAPRNVRAM *nvram; ICSState *ics; - DeviceState *rtc; + Object *rtc; void *htab; uint32_t htab_shift; @@ -633,8 +633,8 @@ void spapr_ccs_reset_hook(void *opaque); #define TYPE_SPAPR_RTC "spapr-rtc" #define TYPE_SPAPR_RNG "spapr-rng" -void spapr_rtc_read(DeviceState *dev, struct tm *tm, uint32_t *ns); -int spapr_rtc_import_offset(DeviceState *dev, int64_t legacy_offset); +void spapr_rtc_read(Object *obj, struct tm *tm, uint32_t *ns); +int spapr_rtc_import_offset(Object *obj, int64_t legacy_offset); int spapr_rng_populate_dt(void *fdt);