On Mon, 23 Apr 2018, Ben Gardner wrote: > I think we need to be smarter about which boards have the > IC_ENABLE_STATUS register, but I don't know enough about the various > supported Designware I2C controller implementations to suggest an > approach. We can assume that 1.1.5 (the IP rev. in your Atom) and newer have it, if we don't find a better solution. Does changing __i2c_dw_enable to __i2c_dw_enable_and_wait in i2c_dw_xfer on its own fix the problem for you? If that works, I think a possible solution might be to always poll on disabling as recommended by docs, but do it asynchronously to avoid the slowdown that prompted the elision we have now. Although in that case I'm not sure why current code leads to a failure, as i2c_dw_xfer_init performs the polling anyway. Can you add printks in dw_readl/dw_writel and maybe a few extra printks in their callers to see what accesses are being made, and share the resulting trace? What are the devices being accessed on the i2c bus in your case? Alexander