On 5/28/20 1:04 PM, Markus Armbruster wrote: > These devices are optional, and enabled by property "enable-bitband". > armv7m_instance_init() creates them unconditionally, because the > property has not been set then. armv7m_realize() realizes them only > when the property is true. Works, although it leaves unrealized > devices hanging around in the QOM composition tree. Affects machines > microbit, mps2-an505, mps2-an521, musca-a, and musca-b1. > > Delete the unused devices by making armv7m_realize() unparent them. > Visible in "info qom-tree"; here's the change for microbit: > > /machine (microbit-machine) > /microbit.twi (microbit.i2c) > /microbit.twi[0] (qemu:memory-region) > /nrf51 (nrf51-soc) > /armv6m (armv7m) > /armv7m-container[0] (qemu:memory-region) > - /bitband[0] (ARM,bitband-memory) > - /bitband[0] (qemu:memory-region) > - /bitband[1] (ARM,bitband-memory) > - /bitband[0] (qemu:memory-region) > /cpu (cortex-m0-arm-cpu) > > Cc: Peter Maydell <peter.mayd...@linaro.org> > Cc: qemu-...@nongnu.org > Signed-off-by: Markus Armbruster <arm...@redhat.com>
Reviewed-by: Philippe Mathieu-Daudé <f4...@amsat.org> > --- > hw/arm/armv7m.c | 6 ++++-- > 1 file changed, 4 insertions(+), 2 deletions(-) > > diff --git a/hw/arm/armv7m.c b/hw/arm/armv7m.c > index 7da57f56d3..f930619f53 100644 > --- a/hw/arm/armv7m.c > +++ b/hw/arm/armv7m.c > @@ -245,8 +245,8 @@ static void armv7m_realize(DeviceState *dev, Error **errp) > memory_region_add_subregion(&s->container, 0xe000e000, > sysbus_mmio_get_region(sbd, 0)); > > - if (s->enable_bitband) { > - for (i = 0; i < ARRAY_SIZE(s->bitband); i++) { > + for (i = 0; i < ARRAY_SIZE(s->bitband); i++) { > + if (s->enable_bitband) { > Object *obj = OBJECT(&s->bitband[i]); > SysBusDevice *sbd = SYS_BUS_DEVICE(&s->bitband[i]); > > @@ -265,6 +265,8 @@ static void armv7m_realize(DeviceState *dev, Error **errp) > > memory_region_add_subregion(&s->container, > bitband_output_addr[i], > sysbus_mmio_get_region(sbd, 0)); > + } else { > + object_unparent(OBJECT(&s->bitband[i])); > } > } > } >