Hi,
I'm working on a custom am3703 based design, which shows a strange behaviour.
The software is based on Linux 2.6.32.
The board supports 3G and WiFi.
- connected via WiFi everything is fine
- connected via 3G everything is fine
- connected via GPRS and bad signal quality the problem occurs.
I can see 2 things, sometimes both at the same time:
- the time ( via 'date') jumps forward. 60% of these jumps are 2^17 , 131072 seconds. (edit: no rtc, only the internal linux timer module)
- 3G module disconnects from the USB core with following message:
[ 3725.886993] hub 1-0:1.0: port 2 disabled by hub (EMI?), re-enabling... [ 3725.905426] usb 1-2: USB disconnect, address 2 [ 3725.918304] generic ttyUSB0: generic converter now disconnected from ttyUSB0 [ 3725.936340] usbserial_generic 1-2:1.0: device disconnected [ 3725.957672] generic ttyUSB1: generic converter now disconnected from ttyUSB1 [ 3725.979309] usbserial_generic 1-2:1.1: device disconnected [ 3726.016082] generic ttyUSB2: generic converter now disconnected from ttyUSB2 [ 3726.040435] usbserial_generic 1-2:1.2: device disconnected [ 3726.062866] generic ttyUSB3: generic converter now disconnected from ttyUSB3 [ 3726.083557] usbserial_generic 1-2:1.3: device disconnected [ 3726.108398] generic ttyUSB4: generic converter now disconnected from ttyUSB4 [ 3726.129089] usbserial_generic 1-2:1.4: device disconnected
A hardware reset of the 3G Module, via GPIOs doesn't help, but a reboot of the linux system with 'reboot' works. The module enumerats fine, while booting the system.
While searching on e2e for similar problems, I came across the errata "Delay Required to Read Some GP, WD, and Sync Timer Registers After Wake-Up" and fix for linux >3.0 (http://e2e.ti.com/support/embedded/linux/f/354/t/280122.aspx). I couldn't find a backport to our version, so I tried to fix it by myself:
in arch/arm/plat-omap/dmtimer.c
#define OMAP_TIMER_NONPOSTED 0x00 static void omap_dm_timer_reset(struct omap_dm_timer *timer) omap_dm_timer_write_reg(timer, OMAP_TIMER_IF_CTRL_REG,OMAP_TIMER_CTRL_NONPOSTED); timer->posted = 0;
This code should change the configuration of every timer to nonposted mode.
Im not sure if this fix does, what it is supposed to do. But i know it didn't work..the time jumps forward.
My next problem is, i can't see a link between a bad connection via GPRS, the disconnect and the time change.
Im not sure if I see 2 problems or one...
Do you have any ideas?
Thank you
Michael