RE: kernel oops for 3430sdp

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

 



Thanks for that, it worked fine now.

> -----Original Message-----
> From: David Brownell [mailto:david-b@xxxxxxxxxxx]
> Sent: Tuesday, October 07, 2008 1:29 PM
> To: Aguirre Rodriguez, Sergio Alberto
> Cc: linux-omap@xxxxxxxxxxxxxxx
> Subject: Re: kernel oops for 3430sdp
> 
> On Tuesday 07 October 2008, Aguirre Rodriguez, Sergio Alberto wrote:
> > <1>Unable to handle kernel NULL pointer dereference at virtual address
> 00000000
> 
> Did you try with the hack I've sent, to work around one problematic
> (and surprisingly reproducible!) i2c-omap timeout?  Appended.
> 
> Given I2C faults, many things blow up rudely ... hardly any I2C
> drivers are written to tolerate transfer errors.  Not entirely
> unreasonably, since such errors are otherwise quite rare.
> 
> 
> I currently suspect there's an issue where the i2c-omap code can
> handle a bunch of requests that group closely together ... or are
> separated by a lot of time ... but there's some middle ground
> where if you wait the "right" amount of time before making the
> next request, it times out instead of working correctly.
> 
> I have no proof behind that theory, but it does seem to match up
> to a few of the observed facts.  Notably that the i2c timeouts
> appear when the only device on that bus is the TWL4030, and the
> drivers make known-to-be-valid requets ... the timeouts started
> to appear only after some trivial changes in init timings, which
> were caused by moving code out of drivers/i2c into directories
> that are more appropriate.
> 
> - Dave
> 
> 
> ---
>  drivers/i2c/chips/twl4030-pwrirq.c |   10 ++++++++++
>  1 file changed, 10 insertions(+)
> 
> --- a/drivers/i2c/chips/twl4030-pwrirq.c
> +++ b/drivers/i2c/chips/twl4030-pwrirq.c
> @@ -161,6 +161,8 @@ static int twl4030_pwrirq_thread(void *d
>  	return 0;
>  }
> 
> +#include <linux/delay.h>
> +
>  static int __init twl4030_pwrirq_init(void)
>  {
>  	int i, err;
> @@ -168,8 +170,16 @@ static int __init twl4030_pwrirq_init(vo
>  	twl4030_pwrirq_mask = 0xff;
>  	twl4030_pwrirq_pending_unmask = 0;
> 
> +/* HEY:  core already did this.
> + * But that's surely not why we
> + * sometimes see timeouts here ...
> + */
> +for (i = 0; i < 5; i++) {
>  	err = twl4030_i2c_write_u8(TWL4030_MODULE_INT, twl4030_pwrirq_mask,
>  					TWL4030_INT_PWR_IMR1);
> +if (!err) break;
> +msleep(10);
> +}
>  	if (err)
>  		return err;
> 
> 

--
To unsubscribe from this list: send the line "unsubscribe linux-omap" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html

[Index of Archives]     [Linux Arm (vger)]     [ARM Kernel]     [ARM MSM]     [Linux Tegra]     [Linux WPAN Networking]     [Linux Wireless Networking]     [Maemo Users]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite Trails]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux