On Wed, Mar 12, 2014 at 08:27:14PM +0100, Wolfram Sang wrote: > On Fri, Feb 07, 2014 at 02:24:09PM +0530, Naveen Krishna Chatradhi wrote: > > From: Simon Glass <sjg@xxxxxxxxxxxx> > > > > There is a rather odd feature of the exynos i2c controller that if it > > is left enabled, it can lock itself up with the clk line held low. > > This makes the bus unusable. > > > > Unfortunately, the s3c24xx_i2c_set_master() function does not notice > > this, and reports a timeout. From then on the bus cannot be used until > > the AP is rebooted. > > > > The problem happens when any sort of interrupt occurs (e.g. due to a > > bus transition) when we are not in the middle of a transaction. We > > have seen many instances of this when U-Boot leaves the bus apparently > > happy, but Linux cannot access it. > > > > The current code is therefore pretty fragile. > > > > This fixes things by leaving the bus disabled unless we are actually > > in a transaction. We enable the bus at the start of the transaction and > > disable it at the end. That way we won't get interrupts and will not > > lock up the bus. > > > > It might be possible to clear pending interrupts on start-up, but this > > seems to be a more robust solution. We can't service interrupts when > > we are not in a transaction, and anyway would rather not lock up the > > bus while we try. > > > > Signed-off-by: Simon Glass <sjg@xxxxxxxxxxxx> > > Cc: Grant Grundler <grundler@xxxxxxxxxxxx> > > Signed-off-by: Naveen Krishna Chatradhi <ch.naveen@xxxxxxxxxxx> > > Acked-by: Kyungmin Park <kyungmin.park@xxxxxxxxxxx> > > Applied to for-next, thanks! Do you consider this relevant for stable?
Attachment:
signature.asc
Description: Digital signature