> Thank you. As I understand from the trace, everything up until the > disable-and-poll sequence is working as intended, and then the > IC_ENABLE_STATUS register seems "stuck" for no apparent reason. > > I wonder if simply reading it once after enabling (and discarding the > retrieved value) is enough to avoid the stuck state, can you please > check that? I'm pasting a patch below. > > If that works, that would be my preference to moving forward with > this issue. If not, or the idea is objectionable, then we could > keep polling-after-enable but limit it to IP rev. 1.1.5 and newer. That works. I'm happy with that fix. > Alexander > > diff --git a/drivers/i2c/busses/i2c-designware-master.c b/drivers/i2c/busses/i2c-designware-master.c > index fd36c39ddf4e..1bc358766957 100644 > --- a/drivers/i2c/busses/i2c-designware-master.c > +++ b/drivers/i2c/busses/i2c-designware-master.c > @@ -209,7 +209,8 @@ static void i2c_dw_xfer_init(struct dw_i2c_dev *dev) > i2c_dw_disable_int(dev); > > /* Enable the adapter */ > - __i2c_dw_enable_and_wait(dev, true); > + __i2c_dw_enable(dev, true); > + dw_readl(dev, DW_IC_ENABLE_STATUS); > > /* Clear and enable interrupts */ > dw_readl(dev, DW_IC_CLR_INTR);