Re: kernel oops for 3430sdp

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

 



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