diff mbox

[PULL,03/31] hw/char: QOM'ify escc.c

Message ID 1464343604-517-4-git-send-email-pbonzini@redhat.com
State New
Headers show

Commit Message

Paolo Bonzini May 27, 2016, 10:06 a.m. UTC
From: xiaoqiang zhao <zxq_yx_007@163.com>

* Drop the old SysBus init function and use instance_init
* Call qemu_chr_add_handlers in the realize callback

Signed-off-by: xiaoqiang zhao <zxq_yx_007@163.com>
Message-Id: <1464158344-12266-2-git-send-email-zxq_yx_007@163.com>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
---
 hw/char/escc.c | 30 +++++++++++++++++++-----------
 1 file changed, 19 insertions(+), 11 deletions(-)

Comments

Mark Cave-Ayland May 31, 2016, 10:13 p.m. UTC | #1
On 27/05/16 11:06, Paolo Bonzini wrote:

> From: xiaoqiang zhao <zxq_yx_007@163.com>
> 
> * Drop the old SysBus init function and use instance_init
> * Call qemu_chr_add_handlers in the realize callback
> 
> Signed-off-by: xiaoqiang zhao <zxq_yx_007@163.com>
> Message-Id: <1464158344-12266-2-git-send-email-zxq_yx_007@163.com>
> Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
> ---
>  hw/char/escc.c | 30 +++++++++++++++++++-----------
>  1 file changed, 19 insertions(+), 11 deletions(-)
> 
> diff --git a/hw/char/escc.c b/hw/char/escc.c
> index 7bf09a0..8e6a7df 100644
> --- a/hw/char/escc.c
> +++ b/hw/char/escc.c
> @@ -983,9 +983,10 @@ void slavio_serial_ms_kbd_init(hwaddr base, qemu_irq irq,
>      sysbus_mmio_map(s, 0, base);
>  }
>  
> -static int escc_init1(SysBusDevice *dev)
> +static void escc_init1(Object *obj)
>  {
> -    ESCCState *s = ESCC(dev);
> +    ESCCState *s = ESCC(obj);
> +    SysBusDevice *dev = SYS_BUS_DEVICE(obj);
>      unsigned int i;
>  
>      s->chn[0].disabled = s->disabled;
> @@ -994,17 +995,26 @@ static int escc_init1(SysBusDevice *dev)
>          sysbus_init_irq(dev, &s->chn[i].irq);
>          s->chn[i].chn = 1 - i;
>          s->chn[i].clock = s->frequency / 2;
> -        if (s->chn[i].chr) {
> -            qemu_chr_add_handlers(s->chn[i].chr, serial_can_receive,
> -                                  serial_receive1, serial_event, &s->chn[i]);
> -        }
>      }
>      s->chn[0].otherchn = &s->chn[1];
>      s->chn[1].otherchn = &s->chn[0];
>  
> -    memory_region_init_io(&s->mmio, OBJECT(s), &escc_mem_ops, s, "escc",
> +    memory_region_init_io(&s->mmio, obj, &escc_mem_ops, s, "escc",
>                            ESCC_SIZE << s->it_shift);
>      sysbus_init_mmio(dev, &s->mmio);
> +}
> +
> +static void escc_realize(DeviceState *dev, Error **errp)
> +{
> +    ESCCState *s = ESCC(dev);
> +    unsigned int i;
> +
> +    for (i = 0; i < 2; i++) {
> +        if (s->chn[i].chr) {
> +            qemu_chr_add_handlers(s->chn[i].chr, serial_can_receive,
> +                                  serial_receive1, serial_event, &s->chn[i]);
> +        }
> +    }
>  
>      if (s->chn[0].type == mouse) {
>          qemu_add_mouse_event_handler(sunmouse_event, &s->chn[0], 0,
> @@ -1014,8 +1024,6 @@ static int escc_init1(SysBusDevice *dev)
>          s->chn[1].hs = qemu_input_handler_register((DeviceState *)(&s->chn[1]),
>                                                     &sunkbd_handler);
>      }
> -
> -    return 0;
>  }
>  
>  static Property escc_properties[] = {
> @@ -1032,10 +1040,9 @@ static Property escc_properties[] = {
>  static void escc_class_init(ObjectClass *klass, void *data)
>  {
>      DeviceClass *dc = DEVICE_CLASS(klass);
> -    SysBusDeviceClass *k = SYS_BUS_DEVICE_CLASS(klass);
>  
> -    k->init = escc_init1;
>      dc->reset = escc_reset;
> +    dc->realize = escc_realize;
>      dc->vmsd = &vmstate_escc;
>      dc->props = escc_properties;
>      set_bit(DEVICE_CATEGORY_INPUT, dc->categories);
> @@ -1045,6 +1052,7 @@ static const TypeInfo escc_info = {
>      .name          = TYPE_ESCC,
>      .parent        = TYPE_SYS_BUS_DEVICE,
>      .instance_size = sizeof(ESCCState),
> +    .instance_init = escc_init1,
>      .class_init    = escc_class_init,
>  };

Unfortunately this patch causes OpenBIOS to freeze on startup under
qemu-system-ppc (presumably as there is a problem accessing the serial
port). You can reproduce this by starting qemu-system-ppc with no
parameters against the commits below:

Bad : e7c9136977cb99c6eb52c9139f7b8d8b5fa87db9
Good: b138e654a0525f009e7e7c96fc67d74baf3e011b

Note that you'll currently need to use the above two hashes to reproduce
the issue against git master as another regression has just crept in.


ATB,

Mark.
zhao xiao qiang June 1, 2016, 3:06 a.m. UTC | #2
> 在 2016年6月1日,06:13,Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk> 写道:
> 
>> On 27/05/16 11:06, Paolo Bonzini wrote:
>> 
>> From: xiaoqiang zhao <zxq_yx_007@163.com>
>> 
>> * Drop the old SysBus init function and use instance_init
>> * Call qemu_chr_add_handlers in the realize callback
>> 
>> Signed-off-by: xiaoqiang zhao <zxq_yx_007@163.com>
>> Message-Id: <1464158344-12266-2-git-send-email-zxq_yx_007@163.com>
>> Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
>> ---
>> hw/char/escc.c | 30 +++++++++++++++++++-----------
>> 1 file changed, 19 insertions(+), 11 deletions(-)
>> 
>> diff --git a/hw/char/escc.c b/hw/char/escc.c
>> index 7bf09a0..8e6a7df 100644
>> --- a/hw/char/escc.c
>> +++ b/hw/char/escc.c
>> @@ -983,9 +983,10 @@ void slavio_serial_ms_kbd_init(hwaddr base, qemu_irq irq,
>>     sysbus_mmio_map(s, 0, base);
>> }
>> 
>> -static int escc_init1(SysBusDevice *dev)
>> +static void escc_init1(Object *obj)
>> {
>> -    ESCCState *s = ESCC(dev);
>> +    ESCCState *s = ESCC(obj);
>> +    SysBusDevice *dev = SYS_BUS_DEVICE(obj);
>>     unsigned int i;
>> 
>>     s->chn[0].disabled = s->disabled;
>> @@ -994,17 +995,26 @@ static int escc_init1(SysBusDevice *dev)
>>         sysbus_init_irq(dev, &s->chn[i].irq);
>>         s->chn[i].chn = 1 - i;
>>         s->chn[i].clock = s->frequency / 2;
>> -        if (s->chn[i].chr) {
>> -            qemu_chr_add_handlers(s->chn[i].chr, serial_can_receive,
>> -                                  serial_receive1, serial_event, &s->chn[i]);
>> -        }
>>     }
>>     s->chn[0].otherchn = &s->chn[1];
>>     s->chn[1].otherchn = &s->chn[0];
>> 
>> -    memory_region_init_io(&s->mmio, OBJECT(s), &escc_mem_ops, s, "escc",
>> +    memory_region_init_io(&s->mmio, obj, &escc_mem_ops, s, "escc",
>>                           ESCC_SIZE << s->it_shift);
>>     sysbus_init_mmio(dev, &s->mmio);
>> +}
>> +
>> +static void escc_realize(DeviceState *dev, Error **errp)
>> +{
>> +    ESCCState *s = ESCC(dev);
>> +    unsigned int i;
>> +
>> +    for (i = 0; i < 2; i++) {
>> +        if (s->chn[i].chr) {
>> +            qemu_chr_add_handlers(s->chn[i].chr, serial_can_receive,
>> +                                  serial_receive1, serial_event, &s->chn[i]);
>> +        }
>> +    }
>> 
>>     if (s->chn[0].type == mouse) {
>>         qemu_add_mouse_event_handler(sunmouse_event, &s->chn[0], 0,
>> @@ -1014,8 +1024,6 @@ static int escc_init1(SysBusDevice *dev)
>>         s->chn[1].hs = qemu_input_handler_register((DeviceState *)(&s->chn[1]),
>>                                                    &sunkbd_handler);
>>     }
>> -
>> -    return 0;
>> }
>> 
>> static Property escc_properties[] = {
>> @@ -1032,10 +1040,9 @@ static Property escc_properties[] = {
>> static void escc_class_init(ObjectClass *klass, void *data)
>> {
>>     DeviceClass *dc = DEVICE_CLASS(klass);
>> -    SysBusDeviceClass *k = SYS_BUS_DEVICE_CLASS(klass);
>> 
>> -    k->init = escc_init1;
>>     dc->reset = escc_reset;
>> +    dc->realize = escc_realize;
>>     dc->vmsd = &vmstate_escc;
>>     dc->props = escc_properties;
>>     set_bit(DEVICE_CATEGORY_INPUT, dc->categories);
>> @@ -1045,6 +1052,7 @@ static const TypeInfo escc_info = {
>>     .name          = TYPE_ESCC,
>>     .parent        = TYPE_SYS_BUS_DEVICE,
>>     .instance_size = sizeof(ESCCState),
>> +    .instance_init = escc_init1,
>>     .class_init    = escc_class_init,
>> };
> 
> Unfortunately this patch causes OpenBIOS to freeze on startup under
> qemu-system-ppc (presumably as there is a problem accessing the serial
> port). You can reproduce this by starting qemu-system-ppc with no
> parameters against the commits below:
> 
> Bad : e7c9136977cb99c6eb52c9139f7b8d8b5fa87db9
> Good: b138e654a0525f009e7e7c96fc67d74baf3e011b
> 
> Note that you'll currently need to use the above two hashes to reproduce
> the issue against git master as another regression has just crept in.
> 
> 
> ATB,
> 
> Mark.
> 
> 

Mark:
   Sorry for the inconvenience. This problem is due to the incorrect property value in the realize stage. I have fix this and the test is passed.

Paolo:  Do i need to send a new version or just this one?
Mark Cave-Ayland June 1, 2016, 7:04 a.m. UTC | #3
On 01/06/16 04:06, xiaoqiang zhao wrote:

>> 在 2016年6月1日,06:13,Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk> 写道:
>>
>>> On 27/05/16 11:06, Paolo Bonzini wrote:
>>>
>>> From: xiaoqiang zhao <zxq_yx_007@163.com>
>>>
>>> * Drop the old SysBus init function and use instance_init
>>> * Call qemu_chr_add_handlers in the realize callback
>>>
>>> Signed-off-by: xiaoqiang zhao <zxq_yx_007@163.com>
>>> Message-Id: <1464158344-12266-2-git-send-email-zxq_yx_007@163.com>
>>> Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
>>> ---
>>> hw/char/escc.c | 30 +++++++++++++++++++-----------
>>> 1 file changed, 19 insertions(+), 11 deletions(-)
>>>
>>> diff --git a/hw/char/escc.c b/hw/char/escc.c
>>> index 7bf09a0..8e6a7df 100644
>>> --- a/hw/char/escc.c
>>> +++ b/hw/char/escc.c
>>> @@ -983,9 +983,10 @@ void slavio_serial_ms_kbd_init(hwaddr base, qemu_irq irq,
>>>     sysbus_mmio_map(s, 0, base);
>>> }
>>>
>>> -static int escc_init1(SysBusDevice *dev)
>>> +static void escc_init1(Object *obj)
>>> {
>>> -    ESCCState *s = ESCC(dev);
>>> +    ESCCState *s = ESCC(obj);
>>> +    SysBusDevice *dev = SYS_BUS_DEVICE(obj);
>>>     unsigned int i;
>>>
>>>     s->chn[0].disabled = s->disabled;
>>> @@ -994,17 +995,26 @@ static int escc_init1(SysBusDevice *dev)
>>>         sysbus_init_irq(dev, &s->chn[i].irq);
>>>         s->chn[i].chn = 1 - i;
>>>         s->chn[i].clock = s->frequency / 2;
>>> -        if (s->chn[i].chr) {
>>> -            qemu_chr_add_handlers(s->chn[i].chr, serial_can_receive,
>>> -                                  serial_receive1, serial_event, &s->chn[i]);
>>> -        }
>>>     }
>>>     s->chn[0].otherchn = &s->chn[1];
>>>     s->chn[1].otherchn = &s->chn[0];
>>>
>>> -    memory_region_init_io(&s->mmio, OBJECT(s), &escc_mem_ops, s, "escc",
>>> +    memory_region_init_io(&s->mmio, obj, &escc_mem_ops, s, "escc",
>>>                           ESCC_SIZE << s->it_shift);
>>>     sysbus_init_mmio(dev, &s->mmio);
>>> +}
>>> +
>>> +static void escc_realize(DeviceState *dev, Error **errp)
>>> +{
>>> +    ESCCState *s = ESCC(dev);
>>> +    unsigned int i;
>>> +
>>> +    for (i = 0; i < 2; i++) {
>>> +        if (s->chn[i].chr) {
>>> +            qemu_chr_add_handlers(s->chn[i].chr, serial_can_receive,
>>> +                                  serial_receive1, serial_event, &s->chn[i]);
>>> +        }
>>> +    }
>>>
>>>     if (s->chn[0].type == mouse) {
>>>         qemu_add_mouse_event_handler(sunmouse_event, &s->chn[0], 0,
>>> @@ -1014,8 +1024,6 @@ static int escc_init1(SysBusDevice *dev)
>>>         s->chn[1].hs = qemu_input_handler_register((DeviceState *)(&s->chn[1]),
>>>                                                    &sunkbd_handler);
>>>     }
>>> -
>>> -    return 0;
>>> }
>>>
>>> static Property escc_properties[] = {
>>> @@ -1032,10 +1040,9 @@ static Property escc_properties[] = {
>>> static void escc_class_init(ObjectClass *klass, void *data)
>>> {
>>>     DeviceClass *dc = DEVICE_CLASS(klass);
>>> -    SysBusDeviceClass *k = SYS_BUS_DEVICE_CLASS(klass);
>>>
>>> -    k->init = escc_init1;
>>>     dc->reset = escc_reset;
>>> +    dc->realize = escc_realize;
>>>     dc->vmsd = &vmstate_escc;
>>>     dc->props = escc_properties;
>>>     set_bit(DEVICE_CATEGORY_INPUT, dc->categories);
>>> @@ -1045,6 +1052,7 @@ static const TypeInfo escc_info = {
>>>     .name          = TYPE_ESCC,
>>>     .parent        = TYPE_SYS_BUS_DEVICE,
>>>     .instance_size = sizeof(ESCCState),
>>> +    .instance_init = escc_init1,
>>>     .class_init    = escc_class_init,
>>> };
>>
>> Unfortunately this patch causes OpenBIOS to freeze on startup under
>> qemu-system-ppc (presumably as there is a problem accessing the serial
>> port). You can reproduce this by starting qemu-system-ppc with no
>> parameters against the commits below:
>>
>> Bad : e7c9136977cb99c6eb52c9139f7b8d8b5fa87db9
>> Good: b138e654a0525f009e7e7c96fc67d74baf3e011b
>>
>> Note that you'll currently need to use the above two hashes to reproduce
>> the issue against git master as another regression has just crept in.
>>
>>
>> ATB,
>>
>> Mark.
>>
>>
> 
> Mark:
>    Sorry for the inconvenience. This problem is due to the incorrect property value in the realize stage. I have fix this and the test is passed.

No problem.

> Paolo:  Do i need to send a new version or just this one?

The original patch has already applied to git master, so please send
your fix as a separate patch.


ATB,

Mark.
zhao xiao qiang June 1, 2016, 7:08 a.m. UTC | #4
在 2016年06月01日 15:04, Mark Cave-Ayland 写道:
> On 01/06/16 04:06, xiaoqiang zhao wrote:
>
>>> 在 2016年6月1日,06:13,Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk> 写道:
>>>
>>>> On 27/05/16 11:06, Paolo Bonzini wrote:
>>>>
>>>> From: xiaoqiang zhao <zxq_yx_007@163.com>
>>>>
>>>> * Drop the old SysBus init function and use instance_init
>>>> * Call qemu_chr_add_handlers in the realize callback
>>>>
>>>> Signed-off-by: xiaoqiang zhao <zxq_yx_007@163.com>
>>>> Message-Id: <1464158344-12266-2-git-send-email-zxq_yx_007@163.com>
>>>> Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
>>>> ---
>>>> hw/char/escc.c | 30 +++++++++++++++++++-----------
>>>> 1 file changed, 19 insertions(+), 11 deletions(-)
>>>>
>>>> diff --git a/hw/char/escc.c b/hw/char/escc.c
>>>> index 7bf09a0..8e6a7df 100644
>>>> --- a/hw/char/escc.c
>>>> +++ b/hw/char/escc.c
>>>> @@ -983,9 +983,10 @@ void slavio_serial_ms_kbd_init(hwaddr base, qemu_irq irq,
>>>>      sysbus_mmio_map(s, 0, base);
>>>> }
>>>>
>>>> -static int escc_init1(SysBusDevice *dev)
>>>> +static void escc_init1(Object *obj)
>>>> {
>>>> -    ESCCState *s = ESCC(dev);
>>>> +    ESCCState *s = ESCC(obj);
>>>> +    SysBusDevice *dev = SYS_BUS_DEVICE(obj);
>>>>      unsigned int i;
>>>>
>>>>      s->chn[0].disabled = s->disabled;
>>>> @@ -994,17 +995,26 @@ static int escc_init1(SysBusDevice *dev)
>>>>          sysbus_init_irq(dev, &s->chn[i].irq);
>>>>          s->chn[i].chn = 1 - i;
>>>>          s->chn[i].clock = s->frequency / 2;
>>>> -        if (s->chn[i].chr) {
>>>> -            qemu_chr_add_handlers(s->chn[i].chr, serial_can_receive,
>>>> -                                  serial_receive1, serial_event, &s->chn[i]);
>>>> -        }
>>>>      }
>>>>      s->chn[0].otherchn = &s->chn[1];
>>>>      s->chn[1].otherchn = &s->chn[0];
>>>>
>>>> -    memory_region_init_io(&s->mmio, OBJECT(s), &escc_mem_ops, s, "escc",
>>>> +    memory_region_init_io(&s->mmio, obj, &escc_mem_ops, s, "escc",
>>>>                            ESCC_SIZE << s->it_shift);
>>>>      sysbus_init_mmio(dev, &s->mmio);
>>>> +}
>>>> +
>>>> +static void escc_realize(DeviceState *dev, Error **errp)
>>>> +{
>>>> +    ESCCState *s = ESCC(dev);
>>>> +    unsigned int i;
>>>> +
>>>> +    for (i = 0; i < 2; i++) {
>>>> +        if (s->chn[i].chr) {
>>>> +            qemu_chr_add_handlers(s->chn[i].chr, serial_can_receive,
>>>> +                                  serial_receive1, serial_event, &s->chn[i]);
>>>> +        }
>>>> +    }
>>>>
>>>>      if (s->chn[0].type == mouse) {
>>>>          qemu_add_mouse_event_handler(sunmouse_event, &s->chn[0], 0,
>>>> @@ -1014,8 +1024,6 @@ static int escc_init1(SysBusDevice *dev)
>>>>          s->chn[1].hs = qemu_input_handler_register((DeviceState *)(&s->chn[1]),
>>>>                                                     &sunkbd_handler);
>>>>      }
>>>> -
>>>> -    return 0;
>>>> }
>>>>
>>>> static Property escc_properties[] = {
>>>> @@ -1032,10 +1040,9 @@ static Property escc_properties[] = {
>>>> static void escc_class_init(ObjectClass *klass, void *data)
>>>> {
>>>>      DeviceClass *dc = DEVICE_CLASS(klass);
>>>> -    SysBusDeviceClass *k = SYS_BUS_DEVICE_CLASS(klass);
>>>>
>>>> -    k->init = escc_init1;
>>>>      dc->reset = escc_reset;
>>>> +    dc->realize = escc_realize;
>>>>      dc->vmsd = &vmstate_escc;
>>>>      dc->props = escc_properties;
>>>>      set_bit(DEVICE_CATEGORY_INPUT, dc->categories);
>>>> @@ -1045,6 +1052,7 @@ static const TypeInfo escc_info = {
>>>>      .name          = TYPE_ESCC,
>>>>      .parent        = TYPE_SYS_BUS_DEVICE,
>>>>      .instance_size = sizeof(ESCCState),
>>>> +    .instance_init = escc_init1,
>>>>      .class_init    = escc_class_init,
>>>> };
>>> Unfortunately this patch causes OpenBIOS to freeze on startup under
>>> qemu-system-ppc (presumably as there is a problem accessing the serial
>>> port). You can reproduce this by starting qemu-system-ppc with no
>>> parameters against the commits below:
>>>
>>> Bad : e7c9136977cb99c6eb52c9139f7b8d8b5fa87db9
>>> Good: b138e654a0525f009e7e7c96fc67d74baf3e011b
>>>
>>> Note that you'll currently need to use the above two hashes to reproduce
>>> the issue against git master as another regression has just crept in.
>>>
>>>
>>> ATB,
>>>
>>> Mark.
>>>
>>>
>> Mark:
>>     Sorry for the inconvenience. This problem is due to the incorrect property value in the realize stage. I have fix this and the test is passed.
> No problem.
>
>> Paolo:  Do i need to send a new version or just this one?
> The original patch has already applied to git master, so please send
> your fix as a separate patch.
>
>
> ATB,
>
> Mark.
>
Ok, coming soon ;-)
diff mbox

Patch

diff --git a/hw/char/escc.c b/hw/char/escc.c
index 7bf09a0..8e6a7df 100644
--- a/hw/char/escc.c
+++ b/hw/char/escc.c
@@ -983,9 +983,10 @@  void slavio_serial_ms_kbd_init(hwaddr base, qemu_irq irq,
     sysbus_mmio_map(s, 0, base);
 }
 
-static int escc_init1(SysBusDevice *dev)
+static void escc_init1(Object *obj)
 {
-    ESCCState *s = ESCC(dev);
+    ESCCState *s = ESCC(obj);
+    SysBusDevice *dev = SYS_BUS_DEVICE(obj);
     unsigned int i;
 
     s->chn[0].disabled = s->disabled;
@@ -994,17 +995,26 @@  static int escc_init1(SysBusDevice *dev)
         sysbus_init_irq(dev, &s->chn[i].irq);
         s->chn[i].chn = 1 - i;
         s->chn[i].clock = s->frequency / 2;
-        if (s->chn[i].chr) {
-            qemu_chr_add_handlers(s->chn[i].chr, serial_can_receive,
-                                  serial_receive1, serial_event, &s->chn[i]);
-        }
     }
     s->chn[0].otherchn = &s->chn[1];
     s->chn[1].otherchn = &s->chn[0];
 
-    memory_region_init_io(&s->mmio, OBJECT(s), &escc_mem_ops, s, "escc",
+    memory_region_init_io(&s->mmio, obj, &escc_mem_ops, s, "escc",
                           ESCC_SIZE << s->it_shift);
     sysbus_init_mmio(dev, &s->mmio);
+}
+
+static void escc_realize(DeviceState *dev, Error **errp)
+{
+    ESCCState *s = ESCC(dev);
+    unsigned int i;
+
+    for (i = 0; i < 2; i++) {
+        if (s->chn[i].chr) {
+            qemu_chr_add_handlers(s->chn[i].chr, serial_can_receive,
+                                  serial_receive1, serial_event, &s->chn[i]);
+        }
+    }
 
     if (s->chn[0].type == mouse) {
         qemu_add_mouse_event_handler(sunmouse_event, &s->chn[0], 0,
@@ -1014,8 +1024,6 @@  static int escc_init1(SysBusDevice *dev)
         s->chn[1].hs = qemu_input_handler_register((DeviceState *)(&s->chn[1]),
                                                    &sunkbd_handler);
     }
-
-    return 0;
 }
 
 static Property escc_properties[] = {
@@ -1032,10 +1040,9 @@  static Property escc_properties[] = {
 static void escc_class_init(ObjectClass *klass, void *data)
 {
     DeviceClass *dc = DEVICE_CLASS(klass);
-    SysBusDeviceClass *k = SYS_BUS_DEVICE_CLASS(klass);
 
-    k->init = escc_init1;
     dc->reset = escc_reset;
+    dc->realize = escc_realize;
     dc->vmsd = &vmstate_escc;
     dc->props = escc_properties;
     set_bit(DEVICE_CATEGORY_INPUT, dc->categories);
@@ -1045,6 +1052,7 @@  static const TypeInfo escc_info = {
     .name          = TYPE_ESCC,
     .parent        = TYPE_SYS_BUS_DEVICE,
     .instance_size = sizeof(ESCCState),
+    .instance_init = escc_init1,
     .class_init    = escc_class_init,
 };