All of lore.kernel.org
 help / color / mirror / Atom feed
* [Qemu-devel] [PATCH v3 00/16] QOM'ify hw/timer/*
@ 2016-02-16 11:09 xiaoqiang zhao
  2016-02-16 11:09 ` [Qemu-devel] [PATCH v3 01/16] hw/timer: QOM'ify arm_timer (pass 1) xiaoqiang zhao
                   ` (9 more replies)
  0 siblings, 10 replies; 12+ messages in thread
From: xiaoqiang zhao @ 2016-02-16 11:09 UTC (permalink / raw)
  To: qemu-devel
  Cc: peter.maydell, e.voevodin, xiaoqiang zhao, mark.cave-ayland,
	michael, qemu-arm, edgar.iglesias, gxt, afaerber

This patch series QOM'ify timer code under hw/timer directory.
Main idea is to split the initfn's work, some to TypeInfo.instance_init
and some is placed in DeviceClass::realize.
Drop the use of SysBusDeviceClass::init if possible.

changes in v3: 
* remove unnecessary OBJECT cast
* refine some commit message
* use DeviceClass::vmsd instead of vmstate_register to register
  the VMState if possible

changes in v2: 
fix a stupid typo (timmer->timer)

xiaoqiang zhao (16):
  hw/timer: QOM'ify arm_timer (pass 1)
  hw/timer: QOM'ify arm_timer (pass 2)
  hw/timer: QOM'ify etraxfs_timer
  hw/timer: QOM'ify exynos4210_mct
  hw/timer: QOM'ify exynos4210_pwm
  hw/timer: QOM'ify exynos4210_rtc
  hw/timer: QOM'ify grlib_gptimer
  hw/timer: QOM'ify lm32_timer
  hw/timer: QOM'ify m48txx_sysbus (pass 1)
  hw/timer: QOM'ify m48txx_sysbus (pass 2)
  hw/timer: QOM'ify milkymist_sysctl
  hw/timer: QOM'ify pl031
  hw/timer: QOM'ify puv3_ost
  hw/timer: QOM'ify pxa2xx_timer
  hw/timer: QOM'ify slavio_timer
  hw/timer: QOM'ify tusb6010

 hw/timer/arm_timer.c        | 42 ++++++++++++++++++++----------------------
 hw/timer/etraxfs_timer.c    | 14 +++++++-------
 hw/timer/exynos4210_mct.c   | 12 +++++-------
 hw/timer/exynos4210_pwm.c   | 12 +++++-------
 hw/timer/exynos4210_rtc.c   | 12 +++++-------
 hw/timer/grlib_gptimer.c    | 30 ++++++++++++++++++------------
 hw/timer/lm32_timer.c       | 19 ++++++++++++-------
 hw/timer/m48t59.c           | 39 ++++++++++++++++++++-------------------
 hw/timer/milkymist-sysctl.c | 21 +++++++++++++--------
 hw/timer/pl031.c            | 11 +++++------
 hw/timer/puv3_ost.c         | 18 +++++-------------
 hw/timer/pxa2xx_timer.c     | 36 +++++++++++++++++++++---------------
 hw/timer/slavio_timer.c     | 12 +++++-------
 hw/timer/tusb6010.c         | 13 ++++++-------
 14 files changed, 147 insertions(+), 144 deletions(-)

-- 
2.1.4

^ permalink raw reply	[flat|nested] 12+ messages in thread

* [Qemu-devel] [PATCH v3 01/16] hw/timer: QOM'ify arm_timer (pass 1)
  2016-02-16 11:09 [Qemu-devel] [PATCH v3 00/16] QOM'ify hw/timer/* xiaoqiang zhao
@ 2016-02-16 11:09 ` xiaoqiang zhao
  2016-02-16 11:09 ` [Qemu-devel] [PATCH v3 02/16] hw/timer: QOM'ify arm_timer (pass 2) xiaoqiang zhao
                   ` (8 subsequent siblings)
  9 siblings, 0 replies; 12+ messages in thread
From: xiaoqiang zhao @ 2016-02-16 11:09 UTC (permalink / raw)
  To: qemu-devel
  Cc: peter.maydell, e.voevodin, xiaoqiang zhao, mark.cave-ayland,
	michael, qemu-arm, edgar.iglesias, gxt, afaerber

* assign icp_pit_init to icp_pit_info.instance_init
* split the old SysBus init function into an instance_init
  and a Device realize function
* use DeviceClass::realize instead of SysBusDeviceClass::init

Reviewed-by: Peter Maydell <peter.maydell@linaro.org>
Signed-off-by: xiaoqiang zhao <zxq_yx_007@163.com>
---
 hw/timer/arm_timer.c | 40 +++++++++++++++++++---------------------
 1 file changed, 19 insertions(+), 21 deletions(-)

diff --git a/hw/timer/arm_timer.c b/hw/timer/arm_timer.c
index ba390ad..5bd2d75 100644
--- a/hw/timer/arm_timer.c
+++ b/hw/timer/arm_timer.c
@@ -277,21 +277,26 @@ static const VMStateDescription vmstate_sp804 = {
     }
 };
 
-static int sp804_init(SysBusDevice *sbd)
+static void sp804_init(Object *obj)
 {
-    DeviceState *dev = DEVICE(sbd);
-    SP804State *s = SP804(dev);
+    SP804State *s = SP804(obj);
+    SysBusDevice *sbd = SYS_BUS_DEVICE(obj);
 
     sysbus_init_irq(sbd, &s->irq);
+    memory_region_init_io(&s->iomem, obj, &sp804_ops, s,
+                          "sp804", 0x1000);
+    sysbus_init_mmio(sbd, &s->iomem);
+}
+
+static void sp804_realize(DeviceState *dev, Error **errp)
+{
+    SP804State *s = SP804(dev);
+
     s->timer[0] = arm_timer_init(s->freq0);
     s->timer[1] = arm_timer_init(s->freq1);
     s->timer[0]->irq = qemu_allocate_irq(sp804_set_irq, s, 0);
     s->timer[1]->irq = qemu_allocate_irq(sp804_set_irq, s, 1);
-    memory_region_init_io(&s->iomem, OBJECT(s), &sp804_ops, s,
-                          "sp804", 0x1000);
-    sysbus_init_mmio(sbd, &s->iomem);
     vmstate_register(dev, -1, &vmstate_sp804, s);
-    return 0;
 }
 
 /* Integrator/CP timer module.  */
@@ -344,9 +349,10 @@ static const MemoryRegionOps icp_pit_ops = {
     .endianness = DEVICE_NATIVE_ENDIAN,
 };
 
-static int icp_pit_init(SysBusDevice *dev)
+static void icp_pit_init(Object *obj)
 {
-    icp_pit_state *s = INTEGRATOR_PIT(dev);
+    icp_pit_state *s = INTEGRATOR_PIT(obj);
+    SysBusDevice *dev = SYS_BUS_DEVICE(obj);
 
     /* Timer 0 runs at the system clock speed (40MHz).  */
     s->timer[0] = arm_timer_init(40000000);
@@ -358,26 +364,18 @@ static int icp_pit_init(SysBusDevice *dev)
     sysbus_init_irq(dev, &s->timer[1]->irq);
     sysbus_init_irq(dev, &s->timer[2]->irq);
 
-    memory_region_init_io(&s->iomem, OBJECT(s), &icp_pit_ops, s,
+    memory_region_init_io(&s->iomem, obj, &icp_pit_ops, s,
                           "icp_pit", 0x1000);
     sysbus_init_mmio(dev, &s->iomem);
     /* This device has no state to save/restore.  The component timers will
        save themselves.  */
-    return 0;
-}
-
-static void icp_pit_class_init(ObjectClass *klass, void *data)
-{
-    SysBusDeviceClass *sdc = SYS_BUS_DEVICE_CLASS(klass);
-
-    sdc->init = icp_pit_init;
 }
 
 static const TypeInfo icp_pit_info = {
     .name          = TYPE_INTEGRATOR_PIT,
     .parent        = TYPE_SYS_BUS_DEVICE,
     .instance_size = sizeof(icp_pit_state),
-    .class_init    = icp_pit_class_init,
+    .instance_init = icp_pit_init,
 };
 
 static Property sp804_properties[] = {
@@ -388,10 +386,9 @@ static Property sp804_properties[] = {
 
 static void sp804_class_init(ObjectClass *klass, void *data)
 {
-    SysBusDeviceClass *sdc = SYS_BUS_DEVICE_CLASS(klass);
     DeviceClass *k = DEVICE_CLASS(klass);
 
-    sdc->init = sp804_init;
+    k->realize = sp804_realize;
     k->props = sp804_properties;
 }
 
@@ -399,6 +396,7 @@ static const TypeInfo sp804_info = {
     .name          = TYPE_SP804,
     .parent        = TYPE_SYS_BUS_DEVICE,
     .instance_size = sizeof(SP804State),
+    .instance_init = sp804_init,
     .class_init    = sp804_class_init,
 };
 
-- 
2.1.4

^ permalink raw reply related	[flat|nested] 12+ messages in thread

* [Qemu-devel] [PATCH v3 02/16] hw/timer: QOM'ify arm_timer (pass 2)
  2016-02-16 11:09 [Qemu-devel] [PATCH v3 00/16] QOM'ify hw/timer/* xiaoqiang zhao
  2016-02-16 11:09 ` [Qemu-devel] [PATCH v3 01/16] hw/timer: QOM'ify arm_timer (pass 1) xiaoqiang zhao
@ 2016-02-16 11:09 ` xiaoqiang zhao
  2016-02-16 11:09 ` [Qemu-devel] [PATCH v3 03/16] hw/timer: QOM'ify etraxfs_timer xiaoqiang zhao
                   ` (7 subsequent siblings)
  9 siblings, 0 replies; 12+ messages in thread
From: xiaoqiang zhao @ 2016-02-16 11:09 UTC (permalink / raw)
  To: qemu-devel
  Cc: peter.maydell, e.voevodin, xiaoqiang zhao, mark.cave-ayland,
	michael, qemu-arm, edgar.iglesias, gxt, afaerber

assign DeviceClass::vmsd instead of using vmstate_register function

Reviewed-by: Peter Maydell <peter.maydell@linaro.org>
Signed-off-by: xiaoqiang zhao <zxq_yx_007@163.com>
---
 hw/timer/arm_timer.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/hw/timer/arm_timer.c b/hw/timer/arm_timer.c
index 5bd2d75..f1ede5f 100644
--- a/hw/timer/arm_timer.c
+++ b/hw/timer/arm_timer.c
@@ -296,7 +296,6 @@ static void sp804_realize(DeviceState *dev, Error **errp)
     s->timer[1] = arm_timer_init(s->freq1);
     s->timer[0]->irq = qemu_allocate_irq(sp804_set_irq, s, 0);
     s->timer[1]->irq = qemu_allocate_irq(sp804_set_irq, s, 1);
-    vmstate_register(dev, -1, &vmstate_sp804, s);
 }
 
 /* Integrator/CP timer module.  */
@@ -390,6 +389,7 @@ static void sp804_class_init(ObjectClass *klass, void *data)
 
     k->realize = sp804_realize;
     k->props = sp804_properties;
+    k->vmsd = &vmstate_sp804;
 }
 
 static const TypeInfo sp804_info = {
-- 
2.1.4

^ permalink raw reply related	[flat|nested] 12+ messages in thread

* [Qemu-devel] [PATCH v3 03/16] hw/timer: QOM'ify etraxfs_timer
  2016-02-16 11:09 [Qemu-devel] [PATCH v3 00/16] QOM'ify hw/timer/* xiaoqiang zhao
  2016-02-16 11:09 ` [Qemu-devel] [PATCH v3 01/16] hw/timer: QOM'ify arm_timer (pass 1) xiaoqiang zhao
  2016-02-16 11:09 ` [Qemu-devel] [PATCH v3 02/16] hw/timer: QOM'ify arm_timer (pass 2) xiaoqiang zhao
@ 2016-02-16 11:09 ` xiaoqiang zhao
  2016-02-16 11:24   ` Edgar E. Iglesias
  2016-02-16 11:09 ` [Qemu-devel] [PATCH v3 04/16] hw/timer: QOM'ify exynos4210_mct xiaoqiang zhao
                   ` (6 subsequent siblings)
  9 siblings, 1 reply; 12+ messages in thread
From: xiaoqiang zhao @ 2016-02-16 11:09 UTC (permalink / raw)
  To: qemu-devel
  Cc: peter.maydell, e.voevodin, xiaoqiang zhao, mark.cave-ayland,
	michael, qemu-arm, edgar.iglesias, gxt, afaerber

assign etraxfs_timer_init to etraxfs_timer_info.instance_init
and drop the SysBusDeviceClass::init

Reviewed-by: Peter Maydell <peter.maydell@linaro.org>
Signed-off-by: xiaoqiang zhao <zxq_yx_007@163.com>
---
 hw/timer/etraxfs_timer.c | 14 +++++++-------
 1 file changed, 7 insertions(+), 7 deletions(-)

diff --git a/hw/timer/etraxfs_timer.c b/hw/timer/etraxfs_timer.c
index 36d8f46..4f115c7 100644
--- a/hw/timer/etraxfs_timer.c
+++ b/hw/timer/etraxfs_timer.c
@@ -315,9 +315,10 @@ static void etraxfs_timer_reset(void *opaque)
     qemu_irq_lower(t->irq);
 }
 
-static int etraxfs_timer_init(SysBusDevice *dev)
+static void etraxfs_timer_init(Object *obj)
 {
-    ETRAXTimerState *t = ETRAX_TIMER(dev);
+    ETRAXTimerState *t = ETRAX_TIMER(obj);
+    SysBusDevice *dev = SYS_BUS_DEVICE(obj);
 
     t->bh_t0 = qemu_bh_new(timer0_hit, t);
     t->bh_t1 = qemu_bh_new(timer1_hit, t);
@@ -329,24 +330,23 @@ static int etraxfs_timer_init(SysBusDevice *dev)
     sysbus_init_irq(dev, &t->irq);
     sysbus_init_irq(dev, &t->nmi);
 
-    memory_region_init_io(&t->mmio, OBJECT(t), &timer_ops, t,
+    memory_region_init_io(&t->mmio, obj, &timer_ops, t,
                           "etraxfs-timer", 0x5c);
     sysbus_init_mmio(dev, &t->mmio);
-    qemu_register_reset(etraxfs_timer_reset, t);
-    return 0;
 }
 
 static void etraxfs_timer_class_init(ObjectClass *klass, void *data)
 {
-    SysBusDeviceClass *sdc = SYS_BUS_DEVICE_CLASS(klass);
+    DeviceClass *dc = DEVICE_CLASS(klass);
 
-    sdc->init = etraxfs_timer_init;
+    dc->reset = etraxfs_timer_reset;
 }
 
 static const TypeInfo etraxfs_timer_info = {
     .name          = TYPE_ETRAX_FS_TIMER,
     .parent        = TYPE_SYS_BUS_DEVICE,
     .instance_size = sizeof(ETRAXTimerState),
+    .instance_init = etraxfs_timer_init,
     .class_init    = etraxfs_timer_class_init,
 };
 
-- 
2.1.4

^ permalink raw reply related	[flat|nested] 12+ messages in thread

* [Qemu-devel] [PATCH v3 04/16] hw/timer: QOM'ify exynos4210_mct
  2016-02-16 11:09 [Qemu-devel] [PATCH v3 00/16] QOM'ify hw/timer/* xiaoqiang zhao
                   ` (2 preceding siblings ...)
  2016-02-16 11:09 ` [Qemu-devel] [PATCH v3 03/16] hw/timer: QOM'ify etraxfs_timer xiaoqiang zhao
@ 2016-02-16 11:09 ` xiaoqiang zhao
  2016-02-16 11:09 ` [Qemu-devel] [PATCH v3 05/16] hw/timer: QOM'ify exynos4210_pwm xiaoqiang zhao
                   ` (5 subsequent siblings)
  9 siblings, 0 replies; 12+ messages in thread
From: xiaoqiang zhao @ 2016-02-16 11:09 UTC (permalink / raw)
  To: qemu-devel
  Cc: peter.maydell, e.voevodin, xiaoqiang zhao, mark.cave-ayland,
	michael, qemu-arm, edgar.iglesias, gxt, afaerber

assign exynos4210_mct_init to exynos4210_mct_info.instance_init
and drop the SysBusDeviceClass::init

Reviewed-by: Peter Maydell <peter.maydell@linaro.org>
Signed-off-by: xiaoqiang zhao <zxq_yx_007@163.com>
---
 hw/timer/exynos4210_mct.c | 12 +++++-------
 1 file changed, 5 insertions(+), 7 deletions(-)

diff --git a/hw/timer/exynos4210_mct.c b/hw/timer/exynos4210_mct.c
index 73e547c..ae69345 100644
--- a/hw/timer/exynos4210_mct.c
+++ b/hw/timer/exynos4210_mct.c
@@ -1422,10 +1422,11 @@ static const MemoryRegionOps exynos4210_mct_ops = {
 };
 
 /* MCT init */
-static int exynos4210_mct_init(SysBusDevice *dev)
+static void exynos4210_mct_init(Object *obj)
 {
     int i;
-    Exynos4210MCTState *s = EXYNOS4210_MCT(dev);
+    Exynos4210MCTState *s = EXYNOS4210_MCT(obj);
+    SysBusDevice *dev = SYS_BUS_DEVICE(obj);
     QEMUBH *bh[2];
 
     /* Global timer */
@@ -1450,19 +1451,15 @@ static int exynos4210_mct_init(SysBusDevice *dev)
         sysbus_init_irq(dev, &s->l_timer[i].irq);
     }
 
-    memory_region_init_io(&s->iomem, OBJECT(s), &exynos4210_mct_ops, s,
+    memory_region_init_io(&s->iomem, obj, &exynos4210_mct_ops, s,
                           "exynos4210-mct", MCT_SFR_SIZE);
     sysbus_init_mmio(dev, &s->iomem);
-
-    return 0;
 }
 
 static void exynos4210_mct_class_init(ObjectClass *klass, void *data)
 {
     DeviceClass *dc = DEVICE_CLASS(klass);
-    SysBusDeviceClass *k = SYS_BUS_DEVICE_CLASS(klass);
 
-    k->init = exynos4210_mct_init;
     dc->reset = exynos4210_mct_reset;
     dc->vmsd = &vmstate_exynos4210_mct_state;
 }
@@ -1471,6 +1468,7 @@ static const TypeInfo exynos4210_mct_info = {
     .name          = TYPE_EXYNOS4210_MCT,
     .parent        = TYPE_SYS_BUS_DEVICE,
     .instance_size = sizeof(Exynos4210MCTState),
+    .instance_init = exynos4210_mct_init,
     .class_init    = exynos4210_mct_class_init,
 };
 
-- 
2.1.4

^ permalink raw reply related	[flat|nested] 12+ messages in thread

* [Qemu-devel] [PATCH v3 05/16] hw/timer: QOM'ify exynos4210_pwm
  2016-02-16 11:09 [Qemu-devel] [PATCH v3 00/16] QOM'ify hw/timer/* xiaoqiang zhao
                   ` (3 preceding siblings ...)
  2016-02-16 11:09 ` [Qemu-devel] [PATCH v3 04/16] hw/timer: QOM'ify exynos4210_mct xiaoqiang zhao
@ 2016-02-16 11:09 ` xiaoqiang zhao
  2016-02-16 11:09 ` [Qemu-devel] [PATCH v3 06/16] hw/timer: QOM'ify exynos4210_rtc xiaoqiang zhao
                   ` (4 subsequent siblings)
  9 siblings, 0 replies; 12+ messages in thread
From: xiaoqiang zhao @ 2016-02-16 11:09 UTC (permalink / raw)
  To: qemu-devel
  Cc: peter.maydell, e.voevodin, xiaoqiang zhao, mark.cave-ayland,
	michael, qemu-arm, edgar.iglesias, gxt, afaerber

assign exynos4210_pwm_init to exynos4210_pwm_info.instance_init
and drop the SysBusDeviceClass::init

Reviewed-by: Peter Maydell <peter.maydell@linaro.org>
Signed-off-by: xiaoqiang zhao <zxq_yx_007@163.com>
---
 hw/timer/exynos4210_pwm.c | 12 +++++-------
 1 file changed, 5 insertions(+), 7 deletions(-)

diff --git a/hw/timer/exynos4210_pwm.c b/hw/timer/exynos4210_pwm.c
index 38f941f..0e9e2e9 100644
--- a/hw/timer/exynos4210_pwm.c
+++ b/hw/timer/exynos4210_pwm.c
@@ -380,9 +380,10 @@ static const MemoryRegionOps exynos4210_pwm_ops = {
 /*
  * PWM timer initialization
  */
-static int exynos4210_pwm_init(SysBusDevice *dev)
+static void exynos4210_pwm_init(Object *obj)
 {
-    Exynos4210PWMState *s = EXYNOS4210_PWM(dev);
+    Exynos4210PWMState *s = EXYNOS4210_PWM(obj);
+    SysBusDevice *dev = SYS_BUS_DEVICE(obj);
     int i;
     QEMUBH *bh;
 
@@ -394,19 +395,15 @@ static int exynos4210_pwm_init(SysBusDevice *dev)
         s->timer[i].parent = s;
     }
 
-    memory_region_init_io(&s->iomem, OBJECT(s), &exynos4210_pwm_ops, s,
+    memory_region_init_io(&s->iomem, obj, &exynos4210_pwm_ops, s,
                           "exynos4210-pwm", EXYNOS4210_PWM_REG_MEM_SIZE);
     sysbus_init_mmio(dev, &s->iomem);
-
-    return 0;
 }
 
 static void exynos4210_pwm_class_init(ObjectClass *klass, void *data)
 {
     DeviceClass *dc = DEVICE_CLASS(klass);
-    SysBusDeviceClass *k = SYS_BUS_DEVICE_CLASS(klass);
 
-    k->init = exynos4210_pwm_init;
     dc->reset = exynos4210_pwm_reset;
     dc->vmsd = &vmstate_exynos4210_pwm_state;
 }
@@ -415,6 +412,7 @@ static const TypeInfo exynos4210_pwm_info = {
     .name          = TYPE_EXYNOS4210_PWM,
     .parent        = TYPE_SYS_BUS_DEVICE,
     .instance_size = sizeof(Exynos4210PWMState),
+    .instance_init = exynos4210_pwm_init,
     .class_init    = exynos4210_pwm_class_init,
 };
 
-- 
2.1.4

^ permalink raw reply related	[flat|nested] 12+ messages in thread

* [Qemu-devel] [PATCH v3 06/16] hw/timer: QOM'ify exynos4210_rtc
  2016-02-16 11:09 [Qemu-devel] [PATCH v3 00/16] QOM'ify hw/timer/* xiaoqiang zhao
                   ` (4 preceding siblings ...)
  2016-02-16 11:09 ` [Qemu-devel] [PATCH v3 05/16] hw/timer: QOM'ify exynos4210_pwm xiaoqiang zhao
@ 2016-02-16 11:09 ` xiaoqiang zhao
  2016-02-16 11:09 ` [Qemu-devel] [PATCH v3 07/16] hw/timer: QOM'ify grlib_gptimer xiaoqiang zhao
                   ` (3 subsequent siblings)
  9 siblings, 0 replies; 12+ messages in thread
From: xiaoqiang zhao @ 2016-02-16 11:09 UTC (permalink / raw)
  To: qemu-devel
  Cc: peter.maydell, e.voevodin, xiaoqiang zhao, mark.cave-ayland,
	michael, qemu-arm, edgar.iglesias, gxt, afaerber

assign exynos4210_rtc_init to exynos4210_rtc_info.instance_init
and drop the SysBusDeviceClass::init

Reviewed-by: Peter Maydell <peter.maydell@linaro.org>
Signed-off-by: xiaoqiang zhao <zxq_yx_007@163.com>
---
 hw/timer/exynos4210_rtc.c | 12 +++++-------
 1 file changed, 5 insertions(+), 7 deletions(-)

diff --git a/hw/timer/exynos4210_rtc.c b/hw/timer/exynos4210_rtc.c
index 3341303..f21fb54 100644
--- a/hw/timer/exynos4210_rtc.c
+++ b/hw/timer/exynos4210_rtc.c
@@ -547,9 +547,10 @@ static const MemoryRegionOps exynos4210_rtc_ops = {
 /*
  * RTC timer initialization
  */
-static int exynos4210_rtc_init(SysBusDevice *dev)
+static void exynos4210_rtc_init(Object *obj)
 {
-    Exynos4210RTCState *s = EXYNOS4210_RTC(dev);
+    Exynos4210RTCState *s = EXYNOS4210_RTC(obj);
+    SysBusDevice *dev = SYS_BUS_DEVICE(obj);
     QEMUBH *bh;
 
     bh = qemu_bh_new(exynos4210_rtc_tick, s);
@@ -564,19 +565,15 @@ static int exynos4210_rtc_init(SysBusDevice *dev)
     sysbus_init_irq(dev, &s->alm_irq);
     sysbus_init_irq(dev, &s->tick_irq);
 
-    memory_region_init_io(&s->iomem, OBJECT(s), &exynos4210_rtc_ops, s,
+    memory_region_init_io(&s->iomem, obj, &exynos4210_rtc_ops, s,
                           "exynos4210-rtc", EXYNOS4210_RTC_REG_MEM_SIZE);
     sysbus_init_mmio(dev, &s->iomem);
-
-    return 0;
 }
 
 static void exynos4210_rtc_class_init(ObjectClass *klass, void *data)
 {
     DeviceClass *dc = DEVICE_CLASS(klass);
-    SysBusDeviceClass *k = SYS_BUS_DEVICE_CLASS(klass);
 
-    k->init = exynos4210_rtc_init;
     dc->reset = exynos4210_rtc_reset;
     dc->vmsd = &vmstate_exynos4210_rtc_state;
 }
@@ -585,6 +582,7 @@ static const TypeInfo exynos4210_rtc_info = {
     .name          = TYPE_EXYNOS4210_RTC,
     .parent        = TYPE_SYS_BUS_DEVICE,
     .instance_size = sizeof(Exynos4210RTCState),
+    .instance_init = exynos4210_rtc_init,
     .class_init    = exynos4210_rtc_class_init,
 };
 
-- 
2.1.4

^ permalink raw reply related	[flat|nested] 12+ messages in thread

* [Qemu-devel] [PATCH v3 07/16] hw/timer: QOM'ify grlib_gptimer
  2016-02-16 11:09 [Qemu-devel] [PATCH v3 00/16] QOM'ify hw/timer/* xiaoqiang zhao
                   ` (5 preceding siblings ...)
  2016-02-16 11:09 ` [Qemu-devel] [PATCH v3 06/16] hw/timer: QOM'ify exynos4210_rtc xiaoqiang zhao
@ 2016-02-16 11:09 ` xiaoqiang zhao
  2016-02-16 11:09 ` [Qemu-devel] [PATCH v3 08/16] hw/timer: QOM'ify lm32_timer xiaoqiang zhao
                   ` (2 subsequent siblings)
  9 siblings, 0 replies; 12+ messages in thread
From: xiaoqiang zhao @ 2016-02-16 11:09 UTC (permalink / raw)
  To: qemu-devel
  Cc: peter.maydell, e.voevodin, xiaoqiang zhao, mark.cave-ayland,
	michael, qemu-arm, edgar.iglesias, gxt, afaerber

* split the old SysBus init function into an instance_init
  and a Device realize function
* use DeviceClass::realize instead of SysBusDeviceClass::init

Reviewed-by: Peter Maydell <peter.maydell@linaro.org>
Signed-off-by: xiaoqiang zhao <zxq_yx_007@163.com>
---
 hw/timer/grlib_gptimer.c | 30 ++++++++++++++++++------------
 1 file changed, 18 insertions(+), 12 deletions(-)

diff --git a/hw/timer/grlib_gptimer.c b/hw/timer/grlib_gptimer.c
index dd000f5..02a19c9 100644
--- a/hw/timer/grlib_gptimer.c
+++ b/hw/timer/grlib_gptimer.c
@@ -348,16 +348,29 @@ static void grlib_gptimer_reset(DeviceState *d)
     }
 }
 
-static int grlib_gptimer_init(SysBusDevice *dev)
+static void grlib_gptimer_init(Object *obj)
 {
-    GPTimerUnit  *unit = GRLIB_GPTIMER(dev);
-    unsigned int  i;
+    GPTimerUnit  *unit = GRLIB_GPTIMER(obj);
+    SysBusDevice *dev = SYS_BUS_DEVICE(obj);
 
     assert(unit->nr_timers > 0);
     assert(unit->nr_timers <= GPTIMER_MAX_TIMERS);
 
     unit->timers = g_malloc0(sizeof unit->timers[0] * unit->nr_timers);
 
+    memory_region_init_io(&unit->iomem, obj, &grlib_gptimer_ops,
+                          unit, "gptimer",
+                          UNIT_REG_SIZE + GPTIMER_REG_SIZE * unit->nr_timers);
+
+    sysbus_init_mmio(dev, &unit->iomem);
+}
+
+static void grlib_gptimer_realize(DeviceState *dev, Error *errp)
+{
+    GPTimerUnit  *unit = GRLIB_GPTIMER(dev);
+    SysBusDevice *dev = SYS_BUS_DEVICE(dev);
+    unsigned int  i;
+
     for (i = 0; i < unit->nr_timers; i++) {
         GPTimer *timer = &unit->timers[i];
 
@@ -371,13 +384,6 @@ static int grlib_gptimer_init(SysBusDevice *dev)
 
         ptimer_set_freq(timer->ptimer, unit->freq_hz);
     }
-
-    memory_region_init_io(&unit->iomem, OBJECT(unit), &grlib_gptimer_ops,
-                          unit, "gptimer",
-                          UNIT_REG_SIZE + GPTIMER_REG_SIZE * unit->nr_timers);
-
-    sysbus_init_mmio(dev, &unit->iomem);
-    return 0;
 }
 
 static Property grlib_gptimer_properties[] = {
@@ -390,9 +396,8 @@ static Property grlib_gptimer_properties[] = {
 static void grlib_gptimer_class_init(ObjectClass *klass, void *data)
 {
     DeviceClass *dc = DEVICE_CLASS(klass);
-    SysBusDeviceClass *k = SYS_BUS_DEVICE_CLASS(klass);
 
-    k->init = grlib_gptimer_init;
+    dc->realize = grlib_gptimer_realize;
     dc->reset = grlib_gptimer_reset;
     dc->props = grlib_gptimer_properties;
 }
@@ -401,6 +406,7 @@ static const TypeInfo grlib_gptimer_info = {
     .name          = TYPE_GRLIB_GPTIMER,
     .parent        = TYPE_SYS_BUS_DEVICE,
     .instance_size = sizeof(GPTimerUnit),
+    .instance_init = grlib_gptimer_init,
     .class_init    = grlib_gptimer_class_init,
 };
 
-- 
2.1.4

^ permalink raw reply related	[flat|nested] 12+ messages in thread

* [Qemu-devel] [PATCH v3 08/16] hw/timer: QOM'ify lm32_timer
  2016-02-16 11:09 [Qemu-devel] [PATCH v3 00/16] QOM'ify hw/timer/* xiaoqiang zhao
                   ` (6 preceding siblings ...)
  2016-02-16 11:09 ` [Qemu-devel] [PATCH v3 07/16] hw/timer: QOM'ify grlib_gptimer xiaoqiang zhao
@ 2016-02-16 11:09 ` xiaoqiang zhao
  2016-02-16 11:09 ` [Qemu-devel] [PATCH v3 09/16] hw/timer: QOM'ify m48txx_sysbus (pass 1) xiaoqiang zhao
  2016-02-18 14:16 ` [Qemu-devel] [PATCH v3 00/16] QOM'ify hw/timer/* Peter Maydell
  9 siblings, 0 replies; 12+ messages in thread
From: xiaoqiang zhao @ 2016-02-16 11:09 UTC (permalink / raw)
  To: qemu-devel
  Cc: peter.maydell, e.voevodin, xiaoqiang zhao, mark.cave-ayland,
	michael, qemu-arm, edgar.iglesias, gxt, afaerber

* split the old SysBus init function into an instance_init
  and a Device realize function
* use DeviceClass::realize instead of SysBusDeviceClass::init

Reviewed-by: Peter Maydell <peter.maydell@linaro.org>
Signed-off-by: xiaoqiang zhao <zxq_yx_007@163.com>
---
 hw/timer/lm32_timer.c | 19 ++++++++++++-------
 1 file changed, 12 insertions(+), 7 deletions(-)

diff --git a/hw/timer/lm32_timer.c b/hw/timer/lm32_timer.c
index 3198355..e45a65b 100644
--- a/hw/timer/lm32_timer.c
+++ b/hw/timer/lm32_timer.c
@@ -176,21 +176,26 @@ static void timer_reset(DeviceState *d)
     ptimer_stop(s->ptimer);
 }
 
-static int lm32_timer_init(SysBusDevice *dev)
+static void lm32_timer_init(Object *obj)
 {
-    LM32TimerState *s = LM32_TIMER(dev);
+    LM32TimerState *s = LM32_TIMER(obj);
+    SysBusDevice *dev = SYS_BUS_DEVICE(obj);
 
     sysbus_init_irq(dev, &s->irq);
 
     s->bh = qemu_bh_new(timer_hit, s);
     s->ptimer = ptimer_init(s->bh);
-    ptimer_set_freq(s->ptimer, s->freq_hz);
 
-    memory_region_init_io(&s->iomem, OBJECT(s), &timer_ops, s,
+    memory_region_init_io(&s->iomem, obj, &timer_ops, s,
                           "timer", R_MAX * 4);
     sysbus_init_mmio(dev, &s->iomem);
+}
 
-    return 0;
+static void lm32_timer_realize(DeviceState *dev, Error **errp)
+{
+    LM32TimerState *s = LM32_TIMER(dev);
+
+    ptimer_set_freq(s->ptimer, s->freq_hz);
 }
 
 static const VMStateDescription vmstate_lm32_timer = {
@@ -213,9 +218,8 @@ static Property lm32_timer_properties[] = {
 static void lm32_timer_class_init(ObjectClass *klass, void *data)
 {
     DeviceClass *dc = DEVICE_CLASS(klass);
-    SysBusDeviceClass *k = SYS_BUS_DEVICE_CLASS(klass);
 
-    k->init = lm32_timer_init;
+    dc->realize = lm32_timer_realize;
     dc->reset = timer_reset;
     dc->vmsd = &vmstate_lm32_timer;
     dc->props = lm32_timer_properties;
@@ -225,6 +229,7 @@ static const TypeInfo lm32_timer_info = {
     .name          = TYPE_LM32_TIMER,
     .parent        = TYPE_SYS_BUS_DEVICE,
     .instance_size = sizeof(LM32TimerState),
+    .instance_init = lm32_timer_init,
     .class_init    = lm32_timer_class_init,
 };
 
-- 
2.1.4

^ permalink raw reply related	[flat|nested] 12+ messages in thread

* [Qemu-devel] [PATCH v3 09/16] hw/timer: QOM'ify m48txx_sysbus (pass 1)
  2016-02-16 11:09 [Qemu-devel] [PATCH v3 00/16] QOM'ify hw/timer/* xiaoqiang zhao
                   ` (7 preceding siblings ...)
  2016-02-16 11:09 ` [Qemu-devel] [PATCH v3 08/16] hw/timer: QOM'ify lm32_timer xiaoqiang zhao
@ 2016-02-16 11:09 ` xiaoqiang zhao
  2016-02-18 14:16 ` [Qemu-devel] [PATCH v3 00/16] QOM'ify hw/timer/* Peter Maydell
  9 siblings, 0 replies; 12+ messages in thread
From: xiaoqiang zhao @ 2016-02-16 11:09 UTC (permalink / raw)
  To: qemu-devel
  Cc: peter.maydell, e.voevodin, xiaoqiang zhao, mark.cave-ayland,
	michael, qemu-arm, edgar.iglesias, gxt, afaerber

* split the old SysBus init function into an instance_init
  and a Device realize function
* use DeviceClass::realize instead of SysBusDeviceClass::init

Reviewed-by: Peter Maydell <peter.maydell@linaro.org>
Signed-off-by: xiaoqiang zhao <zxq_yx_007@163.com>
---
 hw/timer/m48t59.c | 35 ++++++++++++++++++-----------------
 1 file changed, 18 insertions(+), 17 deletions(-)

diff --git a/hw/timer/m48t59.c b/hw/timer/m48t59.c
index bbcfeb2..3c683aa 100644
--- a/hw/timer/m48t59.c
+++ b/hw/timer/m48t59.c
@@ -763,30 +763,31 @@ static void m48t59_isa_realize(DeviceState *dev, Error **errp)
     }
 }
 
-static int m48t59_init1(SysBusDevice *dev)
+static void m48t59_init1(Object *obj)
 {
-    M48txxSysBusDeviceClass *u = M48TXX_SYS_BUS_GET_CLASS(dev);
-    M48txxSysBusState *d = M48TXX_SYS_BUS(dev);
-    Object *o = OBJECT(dev);
+    M48txxSysBusDeviceClass *u = M48TXX_SYS_BUS_GET_CLASS(obj);
+    M48txxSysBusState *d = M48TXX_SYS_BUS(obj);
+    SysBusDevice *dev = SYS_BUS_DEVICE(obj);
     M48t59State *s = &d->state;
-    Error *err = NULL;
 
     s->model = u->info.model;
     s->size = u->info.size;
     sysbus_init_irq(dev, &s->IRQ);
 
-    memory_region_init_io(&s->iomem, o, &nvram_ops, s, "m48t59.nvram",
+    memory_region_init_io(&s->iomem, obj, &nvram_ops, s, "m48t59.nvram",
                           s->size);
-    memory_region_init_io(&d->io, o, &m48t59_io_ops, s, "m48t59", 4);
-    sysbus_init_mmio(dev, &s->iomem);
-    sysbus_init_mmio(dev, &d->io);
-    m48t59_realize_common(s, &err);
-    if (err != NULL) {
-        error_free(err);
-        return -1;
-    }
+    memory_region_init_io(&d->io, obj, &m48t59_io_ops, s, "m48t59", 4);
+}
 
-    return 0;
+static void m48t59_realize(DeviceState *dev, Error **errp)
+{
+    M48txxSysBusState *d = M48TXX_SYS_BUS(dev);
+    M48t59State *s = &d->state;
+    SysBusDevice *sbd = SYS_BUS_DEVICE(dev);
+
+    sysbus_init_mmio(sbd, &s->iomem);
+    sysbus_init_mmio(sbd, &d->io);
+    m48t59_realize_common(s, errp);
 }
 
 static uint32_t m48txx_isa_read(Nvram *obj, uint32_t addr)
@@ -860,10 +861,9 @@ static Property m48t59_sysbus_properties[] = {
 static void m48txx_sysbus_class_init(ObjectClass *klass, void *data)
 {
     DeviceClass *dc = DEVICE_CLASS(klass);
-    SysBusDeviceClass *k = SYS_BUS_DEVICE_CLASS(klass);
     NvramClass *nc = NVRAM_CLASS(klass);
 
-    k->init = m48t59_init1;
+    dc->realize = m48t59_realize;
     dc->reset = m48t59_reset_sysbus;
     dc->props = m48t59_sysbus_properties;
     nc->read = m48txx_sysbus_read;
@@ -889,6 +889,7 @@ static const TypeInfo m48txx_sysbus_type_info = {
     .name = TYPE_M48TXX_SYS_BUS,
     .parent = TYPE_SYS_BUS_DEVICE,
     .instance_size = sizeof(M48txxSysBusState),
+    .instance_init = m48t59_init1,
     .abstract = true,
     .class_init = m48txx_sysbus_class_init,
     .interfaces = (InterfaceInfo[]) {
-- 
2.1.4

^ permalink raw reply related	[flat|nested] 12+ messages in thread

* Re: [Qemu-devel] [PATCH v3 03/16] hw/timer: QOM'ify etraxfs_timer
  2016-02-16 11:09 ` [Qemu-devel] [PATCH v3 03/16] hw/timer: QOM'ify etraxfs_timer xiaoqiang zhao
@ 2016-02-16 11:24   ` Edgar E. Iglesias
  0 siblings, 0 replies; 12+ messages in thread
From: Edgar E. Iglesias @ 2016-02-16 11:24 UTC (permalink / raw)
  To: xiaoqiang zhao
  Cc: peter.maydell, e.voevodin, mark.cave-ayland, qemu-devel, michael,
	qemu-arm, gxt, afaerber

On Tue, Feb 16, 2016 at 07:09:35PM +0800, xiaoqiang zhao wrote:
> assign etraxfs_timer_init to etraxfs_timer_info.instance_init
> and drop the SysBusDeviceClass::init
> 
> Reviewed-by: Peter Maydell <peter.maydell@linaro.org>

Reviewed-by: Edgar E. Iglesias <edgar.iglesias@xilinx.com>


> Signed-off-by: xiaoqiang zhao <zxq_yx_007@163.com>
> ---
>  hw/timer/etraxfs_timer.c | 14 +++++++-------
>  1 file changed, 7 insertions(+), 7 deletions(-)
> 
> diff --git a/hw/timer/etraxfs_timer.c b/hw/timer/etraxfs_timer.c
> index 36d8f46..4f115c7 100644
> --- a/hw/timer/etraxfs_timer.c
> +++ b/hw/timer/etraxfs_timer.c
> @@ -315,9 +315,10 @@ static void etraxfs_timer_reset(void *opaque)
>      qemu_irq_lower(t->irq);
>  }
>  
> -static int etraxfs_timer_init(SysBusDevice *dev)
> +static void etraxfs_timer_init(Object *obj)
>  {
> -    ETRAXTimerState *t = ETRAX_TIMER(dev);
> +    ETRAXTimerState *t = ETRAX_TIMER(obj);
> +    SysBusDevice *dev = SYS_BUS_DEVICE(obj);
>  
>      t->bh_t0 = qemu_bh_new(timer0_hit, t);
>      t->bh_t1 = qemu_bh_new(timer1_hit, t);
> @@ -329,24 +330,23 @@ static int etraxfs_timer_init(SysBusDevice *dev)
>      sysbus_init_irq(dev, &t->irq);
>      sysbus_init_irq(dev, &t->nmi);
>  
> -    memory_region_init_io(&t->mmio, OBJECT(t), &timer_ops, t,
> +    memory_region_init_io(&t->mmio, obj, &timer_ops, t,
>                            "etraxfs-timer", 0x5c);
>      sysbus_init_mmio(dev, &t->mmio);
> -    qemu_register_reset(etraxfs_timer_reset, t);
> -    return 0;
>  }
>  
>  static void etraxfs_timer_class_init(ObjectClass *klass, void *data)
>  {
> -    SysBusDeviceClass *sdc = SYS_BUS_DEVICE_CLASS(klass);
> +    DeviceClass *dc = DEVICE_CLASS(klass);
>  
> -    sdc->init = etraxfs_timer_init;
> +    dc->reset = etraxfs_timer_reset;
>  }
>  
>  static const TypeInfo etraxfs_timer_info = {
>      .name          = TYPE_ETRAX_FS_TIMER,
>      .parent        = TYPE_SYS_BUS_DEVICE,
>      .instance_size = sizeof(ETRAXTimerState),
> +    .instance_init = etraxfs_timer_init,
>      .class_init    = etraxfs_timer_class_init,
>  };
>  
> -- 
> 2.1.4
> 
> 

^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: [Qemu-devel] [PATCH v3 00/16] QOM'ify hw/timer/*
  2016-02-16 11:09 [Qemu-devel] [PATCH v3 00/16] QOM'ify hw/timer/* xiaoqiang zhao
                   ` (8 preceding siblings ...)
  2016-02-16 11:09 ` [Qemu-devel] [PATCH v3 09/16] hw/timer: QOM'ify m48txx_sysbus (pass 1) xiaoqiang zhao
@ 2016-02-18 14:16 ` Peter Maydell
  9 siblings, 0 replies; 12+ messages in thread
From: Peter Maydell @ 2016-02-18 14:16 UTC (permalink / raw)
  To: xiaoqiang zhao
  Cc: Evgeny Voevodin, Mark Cave-Ayland, QEMU Developers,
	Michael Walle, qemu-arm, Edgar E. Iglesias, Guan Xuetao,
	Andreas Färber

On 16 February 2016 at 11:09, xiaoqiang zhao <zxq_yx_007@163.com> wrote:
> This patch series QOM'ify timer code under hw/timer directory.
> Main idea is to split the initfn's work, some to TypeInfo.instance_init
> and some is placed in DeviceClass::realize.
> Drop the use of SysBusDeviceClass::init if possible.
>
> changes in v3:
> * remove unnecessary OBJECT cast
> * refine some commit message
> * use DeviceClass::vmsd instead of vmstate_register to register
>   the VMState if possible
>
> changes in v2:
> fix a stupid typo (timmer->timer)
>
> xiaoqiang zhao (16):
>   hw/timer: QOM'ify arm_timer (pass 1)
>   hw/timer: QOM'ify arm_timer (pass 2)
>   hw/timer: QOM'ify exynos4210_mct
>   hw/timer: QOM'ify exynos4210_pwm
>   hw/timer: QOM'ify exynos4210_rtc
>   hw/timer: QOM'ify pl031
>   hw/timer: QOM'ify pxa2xx_timer

I have taken these patches (1, 2, 4, 5, 6, 12, 14) into target-arm.next.

thanks
-- PMM

^ permalink raw reply	[flat|nested] 12+ messages in thread

end of thread, other threads:[~2016-02-18 14:16 UTC | newest]

Thread overview: 12+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2016-02-16 11:09 [Qemu-devel] [PATCH v3 00/16] QOM'ify hw/timer/* xiaoqiang zhao
2016-02-16 11:09 ` [Qemu-devel] [PATCH v3 01/16] hw/timer: QOM'ify arm_timer (pass 1) xiaoqiang zhao
2016-02-16 11:09 ` [Qemu-devel] [PATCH v3 02/16] hw/timer: QOM'ify arm_timer (pass 2) xiaoqiang zhao
2016-02-16 11:09 ` [Qemu-devel] [PATCH v3 03/16] hw/timer: QOM'ify etraxfs_timer xiaoqiang zhao
2016-02-16 11:24   ` Edgar E. Iglesias
2016-02-16 11:09 ` [Qemu-devel] [PATCH v3 04/16] hw/timer: QOM'ify exynos4210_mct xiaoqiang zhao
2016-02-16 11:09 ` [Qemu-devel] [PATCH v3 05/16] hw/timer: QOM'ify exynos4210_pwm xiaoqiang zhao
2016-02-16 11:09 ` [Qemu-devel] [PATCH v3 06/16] hw/timer: QOM'ify exynos4210_rtc xiaoqiang zhao
2016-02-16 11:09 ` [Qemu-devel] [PATCH v3 07/16] hw/timer: QOM'ify grlib_gptimer xiaoqiang zhao
2016-02-16 11:09 ` [Qemu-devel] [PATCH v3 08/16] hw/timer: QOM'ify lm32_timer xiaoqiang zhao
2016-02-16 11:09 ` [Qemu-devel] [PATCH v3 09/16] hw/timer: QOM'ify m48txx_sysbus (pass 1) xiaoqiang zhao
2016-02-18 14:16 ` [Qemu-devel] [PATCH v3 00/16] QOM'ify hw/timer/* Peter Maydell

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.