hw/i2c/allwinner-i2c: Fix subclassing of TYPE_AW_I2C_SUN6I
In commit8461bfdca9
we added the TYPE_AW_I2C_SUN6I, which is a minor variant of the TYPE_AW_I2C device. However, we didn't quite get the class hierarchy right. We made the new TYPE_AW_I2C_SUN6I a subclass of TYPE_SYS_BUS_DEVICE, which means that you can't validly use a pointer to this object via the AW_I2C() cast macro, which insists on having something that is an instance of TYPE_AW_I2C or some subclass of that type. This only causes a problem if QOM cast macro debugging is enabled; that is supposed to be on by default, but a mistake in the meson conversion in commitc55cf6ab03
meant that it ended up disabled by default, and we didn't catch this bug. Fix the problem by arranging the classes in the same way we do for TYPE_PL011 and TYPE_PL011_LUMINARY in hw/char/pl011.c -- make the variant class be a subclass of the "normal" version of the device. This was reported in https://gitlab.com/qemu-project/qemu/-/issues/1586 but this fix alone isn't sufficient, as there is a separate cast-related issue in the CXL code in pci_expander_bridge.c. Signed-off-by: Peter Maydell <peter.maydell@linaro.org> Reviewed-by: Alex Bennée <alex.bennee@linaro.org> Reviewed-by: Corey Minyard <cminyard@mvista.com> Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org> Reviewed-by: Thomas Huth <thuth@redhat.com>
This commit is contained in:
parent
dda860b9c0
commit
6c50845a91
@ -466,10 +466,8 @@ static void allwinner_i2c_sun6i_init(Object *obj)
|
|||||||
|
|
||||||
static const TypeInfo allwinner_i2c_sun6i_type_info = {
|
static const TypeInfo allwinner_i2c_sun6i_type_info = {
|
||||||
.name = TYPE_AW_I2C_SUN6I,
|
.name = TYPE_AW_I2C_SUN6I,
|
||||||
.parent = TYPE_SYS_BUS_DEVICE,
|
.parent = TYPE_AW_I2C,
|
||||||
.instance_size = sizeof(AWI2CState),
|
|
||||||
.instance_init = allwinner_i2c_sun6i_init,
|
.instance_init = allwinner_i2c_sun6i_init,
|
||||||
.class_init = allwinner_i2c_class_init,
|
|
||||||
};
|
};
|
||||||
|
|
||||||
static void allwinner_i2c_register_types(void)
|
static void allwinner_i2c_register_types(void)
|
||||||
|
Loading…
Reference in New Issue
Block a user