Re: [PATCH 0/3] i2c: designware: should not wait for enable

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Mon, 23 Apr 2018, Ben Gardner wrote:
> > 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?
> 
> Sure. The log is below. I filtered out the logs from other buses and
> removed repetitive messages.

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.

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);



[Index of Archives]     [Linux GPIO]     [Linux SPI]     [Linux Hardward Monitoring]     [LM Sensors]     [Linux USB Devel]     [Linux Media]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux