Skip to content

Commit

Permalink
ppc/pnv: Use resettable interface to reset child I2C buses
Browse files Browse the repository at this point in the history
The QEMU I2C buses and devices use the resettable
interface for resetting while the PNV I2C controller
and parent buses and devices have not yet transitioned
to this new interface and use the old reset strategy.
This was preventing the I2C buses and devices wired
to the PNV I2C controller from being reset.

The short term fix for this is to have the PNV I2C
Controller's reset function explicitly call the resettable
interface function, bus_cold_reset(), on all child
I2C buses.

The long term fix should be to transition all PNV parent
devices and buses to use the resettable interface so that
all child buses and devices are automatically reset.

Reviewed-by: Cédric Le Goater <clg@kaod.org>
Signed-off-by: Glenn Miles <milesg@linux.vnet.ibm.com>
Signed-off-by: Nicholas Piggin <npiggin@gmail.com>
  • Loading branch information
milesg-github authored and npiggin committed Feb 23, 2024
1 parent 6f86885 commit 7b85f00
Showing 1 changed file with 14 additions and 1 deletion.
15 changes: 14 additions & 1 deletion hw/ppc/pnv_i2c.c
Original file line number Diff line number Diff line change
Expand Up @@ -629,6 +629,19 @@ static int pnv_i2c_dt_xscom(PnvXScomInterface *dev, void *fdt,
return 0;
}

static void pnv_i2c_sys_reset(void *dev)
{
int port;
PnvI2C *i2c = PNV_I2C(dev);

pnv_i2c_reset(dev);

/* reset all buses connected to this i2c controller */
for (port = 0; port < i2c->num_busses; port++) {
bus_cold_reset(BUS(i2c->busses[port]));
}
}

static void pnv_i2c_realize(DeviceState *dev, Error **errp)
{
PnvI2C *i2c = PNV_I2C(dev);
Expand All @@ -654,7 +667,7 @@ static void pnv_i2c_realize(DeviceState *dev, Error **errp)

fifo8_create(&i2c->fifo, PNV_I2C_FIFO_SIZE);

qemu_register_reset(pnv_i2c_reset, dev);
qemu_register_reset(pnv_i2c_sys_reset, dev);

qdev_init_gpio_out(DEVICE(dev), &i2c->psi_irq, 1);
}
Expand Down

0 comments on commit 7b85f00

Please sign in to comment.