Occasional fail to initiate resume by incoming call, easy workaround proposed

Joerg Reisenweber joerg at openmoko.org
Mon Feb 9 16:35:38 CET 2009


Dieter, could you look into that?

To whom it may concern: It also seems it turned out the kernel UART driver 
written by TI doesn't correctly handle STX/ETX resp. RTS/CTS handshake in a 
by-character granularity. A nice cause for buffer overruns, if that's a 
correct observation.

A third thing: in kernel we should mask/disable the calypso IRQ during calypso 
powerdown time, as it certainly isn't expected to see IRQs from a power-down 
modem, and state of this line during power-down isn't very well defined - 
might be floating. This could cause bogus resumes.

/j

Am Mo  9. Februar 2009 schrieb Paul Fertser:
> Hi,
> 
> Not exactly kernel issue, but since it is very low-level and affects
> all distributions, i hope this ML is appropriate enough.
> 
> Short summary:
> 
> Calypso will not generate any interrupt until it sees CTS_MODEM fall
> for the first time after powering on. That leads to inability to
> trigger a first resume by calling or sending an SMS after turning on
> GSM and suspending.
> 
> Userspace workaround:
> 
> After the Calypso is powered on, do "echo 1 >
> /sys/bus/platform/devices/neo1973-pm-gsm.0/flowcontrolled; echo 0 >
> /sys/bus/platform/devices/neo1973-pm-gsm.0/flowcontrolled"
> 
> Long story:
> 
> For quite some time i wondered why sometimes my FR doesn't resume on
> incoming call while pressing power button works perfectly.
> 
> Joerg was extremely helpful on IRC and spent considerable time
> discussing all kinds of wild guesses, ways to reproduce, possible
> races, irq handling techniques, testpoints access etc. Without his
> help i'd given up long time ago. Werner, mwester, lindi and Kensan
> also took part in discussions and gave plenty of good hints.
> 
> Finally a reproducible testcase was constructed and with a help of
> Werner's gpio tool it became obvious how the interrupt line works and
> why it fails for the first time.
> 
> Calypso is supposed to generate interrupt (via IO1 line, connected to
> EINT1/GPF1 at SoC side) in every case when it has some data to send to
> SoC but CTS_MODEM (NRTS0/GPH1) prohibits sending. It does that by
> pulling the line up and pulls the line down after CTS_MODEM is
> de-asserted (pulled down). The kernel is configured to react on edge
> rise, so the interrupt is generated and if device is suspended, resume
> is initiated.
> 
> The problem can be seen right after powering on the modem because it
> doesn't pull the IRQ line low on init and therefore it is unable to
> generate rise. Joerg believes that it's a firmware bug and should be
> fixed in the next version. If CTS_MODEM fall is somehow generated once
> (with sysfs node or suspending and resuming by other means), calypso
> finally pulls the line low and after that works as expected.
> 
> Sounds easy, doesn't it? ;)
> 
> -- 
> Be free, use free (http://www.gnu.org/philosophy/free-sw.html) software!
> mailto:fercerpav at gmail.com
> 
> 
> 


-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 197 bytes
Desc: This is a digitally signed message part.
Url : http://lists.openmoko.org/pipermail/openmoko-kernel/attachments/20090209/3a75e74e/attachment.pgp 


More information about the openmoko-kernel mailing list