QDev objects created with qdev_new() need to manually add
their parent relationship with object_property_add_child().
Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
---
hw/arm/stellaris.c | 4 ++++
1 file changed, 4 insertions(+)
diff --git a/hw/arm/stellaris.c b/hw/arm/stellaris.c
index 284b95005f..bb88b3ebde 100644
--- a/hw/arm/stellaris.c
+++ b/hw/arm/stellaris.c
@@ -1247,10 +1247,13 @@ static void stellaris_init(MachineState *ms, stellaris_board_info *board)
&error_fatal);
ssddev = qdev_new("ssd0323");
+ object_property_add_child(OBJECT(ms), "oled", OBJECT(ssddev));
qdev_prop_set_uint8(ssddev, "cs", 1);
qdev_realize_and_unref(ssddev, bus, &error_fatal);
gpio_d_splitter = qdev_new(TYPE_SPLIT_IRQ);
+ object_property_add_child(OBJECT(ms), "splitter",
+ OBJECT(gpio_d_splitter));
qdev_prop_set_uint32(gpio_d_splitter, "num-lines", 2);
qdev_realize_and_unref(gpio_d_splitter, NULL, &error_fatal);
qdev_connect_gpio_out(
@@ -1287,6 +1290,7 @@ static void stellaris_init(MachineState *ms, stellaris_board_info *board)
DeviceState *gpad;
gpad = qdev_new(TYPE_STELLARIS_GAMEPAD);
+ object_property_add_child(OBJECT(ms), "gamepad", OBJECT(gpad));
for (i = 0; i < ARRAY_SIZE(gpad_keycode); i++) {
qlist_append_int(gpad_keycode_list, gpad_keycode[i]);
}
--
2.41.0
On Tue, 30 Jan 2024 at 19:03, Philippe Mathieu-Daudé <philmd@linaro.org> wrote: > > QDev objects created with qdev_new() need to manually add > their parent relationship with object_property_add_child(). > > Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org> > --- > hw/arm/stellaris.c | 4 ++++ > 1 file changed, 4 insertions(+) > Reviewed-by: Peter Maydell <peter.maydell@linaro.org> thanks -- PMM
On Tue, 30 Jan 2024 at 19:03, Philippe Mathieu-Daudé <philmd@linaro.org> wrote:
>
> QDev objects created with qdev_new() need to manually add
> their parent relationship with object_property_add_child().
>
> Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
> ---
> hw/arm/stellaris.c | 4 ++++
> 1 file changed, 4 insertions(+)
>
> diff --git a/hw/arm/stellaris.c b/hw/arm/stellaris.c
> index 284b95005f..bb88b3ebde 100644
> --- a/hw/arm/stellaris.c
> +++ b/hw/arm/stellaris.c
> @@ -1247,10 +1247,13 @@ static void stellaris_init(MachineState *ms, stellaris_board_info *board)
> &error_fatal);
>
> ssddev = qdev_new("ssd0323");
> + object_property_add_child(OBJECT(ms), "oled", OBJECT(ssddev));
> qdev_prop_set_uint8(ssddev, "cs", 1);
> qdev_realize_and_unref(ssddev, bus, &error_fatal);
>
> gpio_d_splitter = qdev_new(TYPE_SPLIT_IRQ);
> + object_property_add_child(OBJECT(ms), "splitter",
> + OBJECT(gpio_d_splitter));
> qdev_prop_set_uint32(gpio_d_splitter, "num-lines", 2);
> qdev_realize_and_unref(gpio_d_splitter, NULL, &error_fatal);
> qdev_connect_gpio_out(
> @@ -1287,6 +1290,7 @@ static void stellaris_init(MachineState *ms, stellaris_board_info *board)
> DeviceState *gpad;
>
> gpad = qdev_new(TYPE_STELLARIS_GAMEPAD);
> + object_property_add_child(OBJECT(ms), "gamepad", OBJECT(gpad));
> for (i = 0; i < ARRAY_SIZE(gpad_keycode); i++) {
> qlist_append_int(gpad_keycode_list, gpad_keycode[i]);
> }
> --
We create almost all the devices in this board with
qdev_new(), and we don't use object_property_add_child()
on any of them. What is it about these three devices in
particular that means we need to call that function?
thanks
-- PMM
On 1/2/24 17:28, Peter Maydell wrote:
> On Tue, 30 Jan 2024 at 19:03, Philippe Mathieu-Daudé <philmd@linaro.org> wrote:
>>
>> QDev objects created with qdev_new() need to manually add
>> their parent relationship with object_property_add_child().
>>
>> Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
>> ---
>> hw/arm/stellaris.c | 4 ++++
>> 1 file changed, 4 insertions(+)
>>
>> diff --git a/hw/arm/stellaris.c b/hw/arm/stellaris.c
>> index 284b95005f..bb88b3ebde 100644
>> --- a/hw/arm/stellaris.c
>> +++ b/hw/arm/stellaris.c
>> @@ -1247,10 +1247,13 @@ static void stellaris_init(MachineState *ms, stellaris_board_info *board)
>> &error_fatal);
>>
>> ssddev = qdev_new("ssd0323");
>> + object_property_add_child(OBJECT(ms), "oled", OBJECT(ssddev));
>> qdev_prop_set_uint8(ssddev, "cs", 1);
>> qdev_realize_and_unref(ssddev, bus, &error_fatal);
>>
>> gpio_d_splitter = qdev_new(TYPE_SPLIT_IRQ);
>> + object_property_add_child(OBJECT(ms), "splitter",
>> + OBJECT(gpio_d_splitter));
>> qdev_prop_set_uint32(gpio_d_splitter, "num-lines", 2);
>> qdev_realize_and_unref(gpio_d_splitter, NULL, &error_fatal);
>> qdev_connect_gpio_out(
>> @@ -1287,6 +1290,7 @@ static void stellaris_init(MachineState *ms, stellaris_board_info *board)
>> DeviceState *gpad;
>>
>> gpad = qdev_new(TYPE_STELLARIS_GAMEPAD);
>> + object_property_add_child(OBJECT(ms), "gamepad", OBJECT(gpad));
>> for (i = 0; i < ARRAY_SIZE(gpad_keycode); i++) {
>> qlist_append_int(gpad_keycode_list, gpad_keycode[i]);
>> }
>> --
>
> We create almost all the devices in this board with
> qdev_new(), and we don't use object_property_add_child()
> on any of them. What is it about these three devices in
> particular that means we need to call that function?
In v2 I added to the description:
This commit plug the devices which aren't part of the SoC;
they will be plugged into a SoC container in the next one.
© 2016 - 2026 Red Hat, Inc.