Basic description
USB power management is unstable while usb pm supported device is connected to usbhost interface. Reading a value of High-Speed USB Host status register after softreset causes memory access violation (the controller does not respond, is in unknown state).
2. Environment
- Mistral EVM board rev. G with DM3730 processor module rev. D
- linux kernel (android) from git://gitorious.org/rowboat/kernel with kernel modules: sierra 1:7:40 and sierra net 3:0
branch: rowboat/rowboat-kernel-2.6.37
commit d52c5bdca59592c374484ccdc5674f777fc535e3
- Sierra Wireless GSM modem AirPrime SL8082
3. Detailed description:
Generally there are three issues:
- system crash
USB GSM device is connected to usb host port. USB PM is enabled for the device driver enters
suspend/resume sequences. The system crashes randomly while suspend or resume of the device.
The kernel oops message:
Unhandled fault: external abort on non-linefetch (0x1028) at 0xfa064014
...
PC is at omap stop ehc+0x100=0x460
In omap stop ehc function SYSCONFIG SOFTRESET bit is set UHH SYSCONFIG register. Before
this the UHH SYSCONFIG and UHH SYSSTATUS registers are fully accessible. After SYSCON-
FIG SOFTRESET setting, read attempt from UHH SYSCONFIG leads the system to crash.
- losing control over the usb device
omap stop ehc is called because there was timeout error in usb internal control msg (kernel/driver-s/usb/core/message.c) and usb driver decided to restart the controller.
- USB device does not achieve proper power state because its power level is decreased but it is not
possible minimum (this is not fully tested).
4. Additional information
- The SL8082 usb drivers are not placed in kernel tree in these versions but they were tested on PC under linux 3.0 kernel with good result.
- When debug in USB Host drivers is enabled and redirected to serial console it is very hard to reproduce the problem.
- USB host controller reset was also provoked without timeout in usb internal control msg, so it is possible that softreset can always cause such errors.
- Attached _le: kernel crash.txt with full oops message. 6507.kernel_crash.txt