On Mon, 19 Mar 2018, Jarkko Nikula wrote: > I see specification mentions that for older IP versions have to monitor two > registers IC_STATUS and IC_RAW_INTR_STAT but don't say exactly how. > > Luis: Do you know can the availability of IC_ENABLE_STATUS register 0x9c be > seen from DW_IC_COMP_VERSION and how to find the same enabled status from > those two registers? Ping? The change introduced a regression for (at least) ARM Berlin and SPEAr. Is there confidence that that was the right fix? Various sources quoting what appears to be the DW_apb_i2c databook (e.g. alt_i2c.h in RTEMS) only say that checking IC_ENABLE_STATUS is needed when disabling, not enabling. Is it possible that i2c_dw_isr is racing with i2c_dw_xfer_init? Ben, did you check that? Can you also retrieve your DW I2C core version, e.g. with the following patch? Thanks in advance. For me it prints: i2c_designware f7e81400.i2c: Synopsis DesignWare I2C version: 0x3130352a diff --git a/drivers/i2c/busses/i2c-designware-master.c b/drivers/i2c/busses/i2c-designware-master.c index 1b91963d30c2..9740de45e14b 100644 --- a/drivers/i2c/busses/i2c-designware-master.c +++ b/drivers/i2c/busses/i2c-designware-master.c @@ -148,6 +148,7 @@ static int i2c_dw_init_master(struct dw_i2c_dev *dev) /* Configure SDA Hold Time if required */ reg = dw_readl(dev, DW_IC_COMP_VERSION); + dev_info(dev->dev, "Synopsis DesignWare I2C version: %#08x\n", reg); if (reg >= DW_IC_SDA_HOLD_MIN_VERS) { if (!dev->sda_hold_time) { /* Keep previous hold time setting if no one set it */