Message ID | 1375621501-5564-1-git-send-email-afaerber@suse.de |
---|---|
State | New |
Headers | show |
Am 04.08.2013 15:05, schrieb Andreas Färber: > pxa2xx_i2c_init() creates a pxa2xx-i2c-slave device on a second i2c-bus, > which has a NULL parent device. This causes an assertion in > object_get_canonical_path() when accessing pxa2xx-i2c-slave's > "parent_bus" link<bus> property in tosa and likely other PXA2xx machines. > > Fix this by using the pxa2xx_i2c device, created just before, as parent. > > Signed-off-by: Andreas Färber <afaerber@suse.de> CC'ing Anthony as this may be lurking elsewhere, too. Unfortunately qtest can still only send QMP command but does not return the response, so we can't generically test walking the QOM composition tree in my proposed qom-test. Andreas > --- > hw/arm/pxa2xx.c | 4 +++- > 1 file changed, 3 insertions(+), 1 deletion(-) > > diff --git a/hw/arm/pxa2xx.c b/hw/arm/pxa2xx.c > index 7de6453..17ddd3f 100644 > --- a/hw/arm/pxa2xx.c > +++ b/hw/arm/pxa2xx.c > @@ -1479,6 +1479,7 @@ PXA2xxI2CState *pxa2xx_i2c_init(hwaddr base, > DeviceState *dev; > SysBusDevice *i2c_dev; > PXA2xxI2CState *s; > + i2c_bus *i2cbus; > > dev = qdev_create(NULL, TYPE_PXA2XX_I2C); > qdev_prop_set_uint32(dev, "size", region_size + 1); > @@ -1491,7 +1492,8 @@ PXA2xxI2CState *pxa2xx_i2c_init(hwaddr base, > > s = PXA2XX_I2C(i2c_dev); > /* FIXME: Should the slave device really be on a separate bus? */ > - dev = i2c_create_slave(i2c_init_bus(NULL, "dummy"), "pxa2xx-i2c-slave", 0); > + i2cbus = i2c_init_bus(dev, "dummy"); > + dev = i2c_create_slave(i2cbus, "pxa2xx-i2c-slave", 0); > s->slave = FROM_I2C_SLAVE(PXA2xxI2CSlaveState, I2C_SLAVE(dev)); > s->slave->host = s; >
Applied. Thanks. Regards, Anthony Liguori
diff --git a/hw/arm/pxa2xx.c b/hw/arm/pxa2xx.c index 7de6453..17ddd3f 100644 --- a/hw/arm/pxa2xx.c +++ b/hw/arm/pxa2xx.c @@ -1479,6 +1479,7 @@ PXA2xxI2CState *pxa2xx_i2c_init(hwaddr base, DeviceState *dev; SysBusDevice *i2c_dev; PXA2xxI2CState *s; + i2c_bus *i2cbus; dev = qdev_create(NULL, TYPE_PXA2XX_I2C); qdev_prop_set_uint32(dev, "size", region_size + 1); @@ -1491,7 +1492,8 @@ PXA2xxI2CState *pxa2xx_i2c_init(hwaddr base, s = PXA2XX_I2C(i2c_dev); /* FIXME: Should the slave device really be on a separate bus? */ - dev = i2c_create_slave(i2c_init_bus(NULL, "dummy"), "pxa2xx-i2c-slave", 0); + i2cbus = i2c_init_bus(dev, "dummy"); + dev = i2c_create_slave(i2cbus, "pxa2xx-i2c-slave", 0); s->slave = FROM_I2C_SLAVE(PXA2xxI2CSlaveState, I2C_SLAVE(dev)); s->slave->host = s;
pxa2xx_i2c_init() creates a pxa2xx-i2c-slave device on a second i2c-bus, which has a NULL parent device. This causes an assertion in object_get_canonical_path() when accessing pxa2xx-i2c-slave's "parent_bus" link<bus> property in tosa and likely other PXA2xx machines. Fix this by using the pxa2xx_i2c device, created just before, as parent. Signed-off-by: Andreas Färber <afaerber@suse.de> --- hw/arm/pxa2xx.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-)