diff mbox

[v1,1/5] cadence_gem: QOMify Cadence GEM

Message ID c60215f02b1383e81daa7ac9264decf8abcc69cb.1468279072.git.alistair.francis@xilinx.com
State New
Headers show

Commit Message

Alistair Francis July 11, 2016, 11:20 p.m. UTC
Signed-off-by: Alistair Francis <alistair.francis@xilinx.com>
---

 hw/net/cadence_gem.c | 27 ++++++++++++++++-----------
 1 file changed, 16 insertions(+), 11 deletions(-)

Comments

Peter Maydell July 25, 2016, 3:20 p.m. UTC | #1
On 12 July 2016 at 00:20, Alistair Francis <alistair.francis@xilinx.com> wrote:
> Signed-off-by: Alistair Francis <alistair.francis@xilinx.com>
> ---
>
>  hw/net/cadence_gem.c | 27 ++++++++++++++++-----------
>  1 file changed, 16 insertions(+), 11 deletions(-)
>
> diff --git a/hw/net/cadence_gem.c b/hw/net/cadence_gem.c
> index 8a4be1e..9d64644 100644
> --- a/hw/net/cadence_gem.c
> +++ b/hw/net/cadence_gem.c
> @@ -1214,24 +1214,29 @@ static NetClientInfo net_gem_info = {
>      .link_status_changed = gem_set_link,
>  };
>
> -static int gem_init(SysBusDevice *sbd)
> +static void gem_realize(DeviceState *dev, Error **errp)
>  {
> -    DeviceState *dev = DEVICE(sbd);
>      CadenceGEMState *s = CADENCE_GEM(dev);
>
> -    DB_PRINT("\n");
> +    sysbus_init_irq(SYS_BUS_DEVICE(dev), &s->irq);
>
> -    gem_init_register_masks(s);
> -    memory_region_init_io(&s->iomem, OBJECT(s), &gem_ops, s,
> -                          "enet", sizeof(s->regs));
> -    sysbus_init_mmio(sbd, &s->iomem);
> -    sysbus_init_irq(sbd, &s->irq);
>      qemu_macaddr_default_if_unset(&s->conf.macaddr);
>
>      s->nic = qemu_new_nic(&net_gem_info, &s->conf,
>              object_get_typename(OBJECT(dev)), dev->id, s);
> +}
> +
> +static void gem_init(Object *obj)
> +{
> +    CadenceGEMState *s = CADENCE_GEM(obj);
> +    DeviceState *dev = DEVICE(obj);
> +
> +    DB_PRINT("\n");
>
> -    return 0;
> +    gem_init_register_masks(s);
> +    memory_region_init_io(&s->iomem, OBJECT(s), &gem_ops, s,
> +                          "enet", sizeof(s->regs));
> +    sysbus_init_mmio(SYS_BUS_DEVICE(dev), &s->iomem);
>  }

I don't understand the logic behind which things are
in init and which in realize here -- why is
sysbus_init_mmio() in init but sysbus_init_irq() in
realize ?

thanks
-- PMM
Alistair Francis July 25, 2016, 4:38 p.m. UTC | #2
On Mon, Jul 25, 2016 at 8:20 AM, Peter Maydell <peter.maydell@linaro.org> wrote:
> On 12 July 2016 at 00:20, Alistair Francis <alistair.francis@xilinx.com> wrote:
>> Signed-off-by: Alistair Francis <alistair.francis@xilinx.com>
>> ---
>>
>>  hw/net/cadence_gem.c | 27 ++++++++++++++++-----------
>>  1 file changed, 16 insertions(+), 11 deletions(-)
>>
>> diff --git a/hw/net/cadence_gem.c b/hw/net/cadence_gem.c
>> index 8a4be1e..9d64644 100644
>> --- a/hw/net/cadence_gem.c
>> +++ b/hw/net/cadence_gem.c
>> @@ -1214,24 +1214,29 @@ static NetClientInfo net_gem_info = {
>>      .link_status_changed = gem_set_link,
>>  };
>>
>> -static int gem_init(SysBusDevice *sbd)
>> +static void gem_realize(DeviceState *dev, Error **errp)
>>  {
>> -    DeviceState *dev = DEVICE(sbd);
>>      CadenceGEMState *s = CADENCE_GEM(dev);
>>
>> -    DB_PRINT("\n");
>> +    sysbus_init_irq(SYS_BUS_DEVICE(dev), &s->irq);
>>
>> -    gem_init_register_masks(s);
>> -    memory_region_init_io(&s->iomem, OBJECT(s), &gem_ops, s,
>> -                          "enet", sizeof(s->regs));
>> -    sysbus_init_mmio(sbd, &s->iomem);
>> -    sysbus_init_irq(sbd, &s->irq);
>>      qemu_macaddr_default_if_unset(&s->conf.macaddr);
>>
>>      s->nic = qemu_new_nic(&net_gem_info, &s->conf,
>>              object_get_typename(OBJECT(dev)), dev->id, s);
>> +}
>> +
>> +static void gem_init(Object *obj)
>> +{
>> +    CadenceGEMState *s = CADENCE_GEM(obj);
>> +    DeviceState *dev = DEVICE(obj);
>> +
>> +    DB_PRINT("\n");
>>
>> -    return 0;
>> +    gem_init_register_masks(s);
>> +    memory_region_init_io(&s->iomem, OBJECT(s), &gem_ops, s,
>> +                          "enet", sizeof(s->regs));
>> +    sysbus_init_mmio(SYS_BUS_DEVICE(dev), &s->iomem);
>>  }
>
> I don't understand the logic behind which things are
> in init and which in realize here -- why is
> sysbus_init_mmio() in init but sysbus_init_irq() in
> realize ?

That was just a mistake. I have moved all of the *_init_* functions to
the main init function.

Thanks,

Alistair

>
> thanks
> -- PMM
>
Alistair Francis July 25, 2016, 4:42 p.m. UTC | #3
On Mon, Jul 25, 2016 at 9:38 AM, Alistair Francis
<alistair.francis@xilinx.com> wrote:
> On Mon, Jul 25, 2016 at 8:20 AM, Peter Maydell <peter.maydell@linaro.org> wrote:
>> On 12 July 2016 at 00:20, Alistair Francis <alistair.francis@xilinx.com> wrote:
>>> Signed-off-by: Alistair Francis <alistair.francis@xilinx.com>
>>> ---
>>>
>>>  hw/net/cadence_gem.c | 27 ++++++++++++++++-----------
>>>  1 file changed, 16 insertions(+), 11 deletions(-)
>>>
>>> diff --git a/hw/net/cadence_gem.c b/hw/net/cadence_gem.c
>>> index 8a4be1e..9d64644 100644
>>> --- a/hw/net/cadence_gem.c
>>> +++ b/hw/net/cadence_gem.c
>>> @@ -1214,24 +1214,29 @@ static NetClientInfo net_gem_info = {
>>>      .link_status_changed = gem_set_link,
>>>  };
>>>
>>> -static int gem_init(SysBusDevice *sbd)
>>> +static void gem_realize(DeviceState *dev, Error **errp)
>>>  {
>>> -    DeviceState *dev = DEVICE(sbd);
>>>      CadenceGEMState *s = CADENCE_GEM(dev);
>>>
>>> -    DB_PRINT("\n");
>>> +    sysbus_init_irq(SYS_BUS_DEVICE(dev), &s->irq);
>>>
>>> -    gem_init_register_masks(s);
>>> -    memory_region_init_io(&s->iomem, OBJECT(s), &gem_ops, s,
>>> -                          "enet", sizeof(s->regs));
>>> -    sysbus_init_mmio(sbd, &s->iomem);
>>> -    sysbus_init_irq(sbd, &s->irq);
>>>      qemu_macaddr_default_if_unset(&s->conf.macaddr);
>>>
>>>      s->nic = qemu_new_nic(&net_gem_info, &s->conf,
>>>              object_get_typename(OBJECT(dev)), dev->id, s);
>>> +}
>>> +
>>> +static void gem_init(Object *obj)
>>> +{
>>> +    CadenceGEMState *s = CADENCE_GEM(obj);
>>> +    DeviceState *dev = DEVICE(obj);
>>> +
>>> +    DB_PRINT("\n");
>>>
>>> -    return 0;
>>> +    gem_init_register_masks(s);
>>> +    memory_region_init_io(&s->iomem, OBJECT(s), &gem_ops, s,
>>> +                          "enet", sizeof(s->regs));
>>> +    sysbus_init_mmio(SYS_BUS_DEVICE(dev), &s->iomem);
>>>  }
>>
>> I don't understand the logic behind which things are
>> in init and which in realize here -- why is
>> sysbus_init_mmio() in init but sysbus_init_irq() in
>> realize ?
>
> That was just a mistake. I have moved all of the *_init_* functions to
> the main init function.

As soon as I sent that mail I remembered why it was like that.

Eventually the sysbus_init_irq() function depends on the number of
queues, which is a property so it can't be set in the init.

Do you think the sysbus_init_mmio() should be moved to the realise as well then?

Thanks,

Alistair

>
> Thanks,
>
> Alistair
>
>>
>> thanks
>> -- PMM
>>
Peter Maydell July 25, 2016, 4:55 p.m. UTC | #4
On 25 July 2016 at 17:42, Alistair Francis <alistair.francis@xilinx.com> wrote:
> On Mon, Jul 25, 2016 at 9:38 AM, Alistair Francis
> <alistair.francis@xilinx.com> wrote:
>> On Mon, Jul 25, 2016 at 8:20 AM, Peter Maydell <peter.maydell@linaro.org> wrote:
>>> On 12 July 2016 at 00:20, Alistair Francis <alistair.francis@xilinx.com> wrote:
>>>> Signed-off-by: Alistair Francis <alistair.francis@xilinx.com>
>>>> ---
>>>>
>>>>  hw/net/cadence_gem.c | 27 ++++++++++++++++-----------
>>>>  1 file changed, 16 insertions(+), 11 deletions(-)
>>>>
>>>> diff --git a/hw/net/cadence_gem.c b/hw/net/cadence_gem.c
>>>> index 8a4be1e..9d64644 100644
>>>> --- a/hw/net/cadence_gem.c
>>>> +++ b/hw/net/cadence_gem.c
>>>> @@ -1214,24 +1214,29 @@ static NetClientInfo net_gem_info = {
>>>>      .link_status_changed = gem_set_link,
>>>>  };
>>>>
>>>> -static int gem_init(SysBusDevice *sbd)
>>>> +static void gem_realize(DeviceState *dev, Error **errp)
>>>>  {
>>>> -    DeviceState *dev = DEVICE(sbd);
>>>>      CadenceGEMState *s = CADENCE_GEM(dev);
>>>>
>>>> -    DB_PRINT("\n");
>>>> +    sysbus_init_irq(SYS_BUS_DEVICE(dev), &s->irq);
>>>>
>>>> -    gem_init_register_masks(s);
>>>> -    memory_region_init_io(&s->iomem, OBJECT(s), &gem_ops, s,
>>>> -                          "enet", sizeof(s->regs));
>>>> -    sysbus_init_mmio(sbd, &s->iomem);
>>>> -    sysbus_init_irq(sbd, &s->irq);
>>>>      qemu_macaddr_default_if_unset(&s->conf.macaddr);
>>>>
>>>>      s->nic = qemu_new_nic(&net_gem_info, &s->conf,
>>>>              object_get_typename(OBJECT(dev)), dev->id, s);
>>>> +}
>>>> +
>>>> +static void gem_init(Object *obj)
>>>> +{
>>>> +    CadenceGEMState *s = CADENCE_GEM(obj);
>>>> +    DeviceState *dev = DEVICE(obj);
>>>> +
>>>> +    DB_PRINT("\n");
>>>>
>>>> -    return 0;
>>>> +    gem_init_register_masks(s);
>>>> +    memory_region_init_io(&s->iomem, OBJECT(s), &gem_ops, s,
>>>> +                          "enet", sizeof(s->regs));
>>>> +    sysbus_init_mmio(SYS_BUS_DEVICE(dev), &s->iomem);
>>>>  }
>>>
>>> I don't understand the logic behind which things are
>>> in init and which in realize here -- why is
>>> sysbus_init_mmio() in init but sysbus_init_irq() in
>>> realize ?
>>
>> That was just a mistake. I have moved all of the *_init_* functions to
>> the main init function.
>
> As soon as I sent that mail I remembered why it was like that.
>
> Eventually the sysbus_init_irq() function depends on the number of
> queues, which is a property so it can't be set in the init.
>
> Do you think the sysbus_init_mmio() should be moved to the realise as well then?

Oh, I see. This is fine, then, but put a note in the commit message
about why the sysbus_init_irq() is where it is.

Reviewed-by: Peter Maydell <peter.maydell@linaro.org>

thanks
-- PMM
diff mbox

Patch

diff --git a/hw/net/cadence_gem.c b/hw/net/cadence_gem.c
index 8a4be1e..9d64644 100644
--- a/hw/net/cadence_gem.c
+++ b/hw/net/cadence_gem.c
@@ -1214,24 +1214,29 @@  static NetClientInfo net_gem_info = {
     .link_status_changed = gem_set_link,
 };
 
-static int gem_init(SysBusDevice *sbd)
+static void gem_realize(DeviceState *dev, Error **errp)
 {
-    DeviceState *dev = DEVICE(sbd);
     CadenceGEMState *s = CADENCE_GEM(dev);
 
-    DB_PRINT("\n");
+    sysbus_init_irq(SYS_BUS_DEVICE(dev), &s->irq);
 
-    gem_init_register_masks(s);
-    memory_region_init_io(&s->iomem, OBJECT(s), &gem_ops, s,
-                          "enet", sizeof(s->regs));
-    sysbus_init_mmio(sbd, &s->iomem);
-    sysbus_init_irq(sbd, &s->irq);
     qemu_macaddr_default_if_unset(&s->conf.macaddr);
 
     s->nic = qemu_new_nic(&net_gem_info, &s->conf,
             object_get_typename(OBJECT(dev)), dev->id, s);
+}
+
+static void gem_init(Object *obj)
+{
+    CadenceGEMState *s = CADENCE_GEM(obj);
+    DeviceState *dev = DEVICE(obj);
+
+    DB_PRINT("\n");
 
-    return 0;
+    gem_init_register_masks(s);
+    memory_region_init_io(&s->iomem, OBJECT(s), &gem_ops, s,
+                          "enet", sizeof(s->regs));
+    sysbus_init_mmio(SYS_BUS_DEVICE(dev), &s->iomem);
 }
 
 static const VMStateDescription vmstate_cadence_gem = {
@@ -1257,9 +1262,8 @@  static Property gem_properties[] = {
 static void gem_class_init(ObjectClass *klass, void *data)
 {
     DeviceClass *dc = DEVICE_CLASS(klass);
-    SysBusDeviceClass *sdc = SYS_BUS_DEVICE_CLASS(klass);
 
-    sdc->init = gem_init;
+    dc->realize = gem_realize;
     dc->props = gem_properties;
     dc->vmsd = &vmstate_cadence_gem;
     dc->reset = gem_reset;
@@ -1269,6 +1273,7 @@  static const TypeInfo gem_info = {
     .name  = TYPE_CADENCE_GEM,
     .parent = TYPE_SYS_BUS_DEVICE,
     .instance_size  = sizeof(CadenceGEMState),
+    .instance_init = gem_init,
     .class_init = gem_class_init,
 };