Re: [PATCH 1/1] I2C: designware: fix IO timeout issue for AMD controller

Jarkko Nikula
2015-11-06T08:59:40Z

On 06.11.2015 06:34, Yu, Xiangliang wrote:
>> -----Original Message-----
>> From: Mika Westerberg [mailto:mika.westerberg@linux.intel.com]
>>> --- a/drivers/i2c/busses/i2c-designware-core.c
>>> +++ b/drivers/i2c/busses/i2c-designware-core.c
>>> @@ -783,6 +783,9 @@ irqreturn_t i2c_dw_isr(int this_irq, void *dev_id)
>>>
>>> stat = i2c_dw_read_clear_intrbits(dev);
>>
>> What if the status changes right here, before you go and mask the interrupt?
> Have no effect, because i2c controller can't trigger next interrupt.
>
Does it mean possible lost interrupt too? I guess it can be debugged by
placing a few ms long mdelay() between clearing and masking.

How frequent is this timeout? I guess lost interrupt is somehow nearly
related to clearing, masking and unmasking if that cycle helps. One
thing that comes to my mind is masking needed and could plain unmasking
be also a working workaround?

Have you tried to print DW_IC_INTR_STAT, DW_IC_INTR_MASK and
DW_IC_RAW_INTR_STAT when timeout occurs? E.g. just after printing the
timeout out error in i2c_dw_xfer(). Probably good in i2c_dw_isr() too if
if doesn't produce too much data and make debugging impossible.

--
Jarkko