Paul Fertser > http://docs.openmoko.org/trac/ticket/1376
Thanks ! This one fell completely through the cracks :-( Wish we had a competent bugmaster who does nothing but track such items ... Andy Green wrote: > Werner says he's eyeballed the code and doesn't see a problem. > > Therefore I don't see that there is a "multi character" handshake > granularity in the GSM device from all this. Do you see how to work > that out from this? Hmm, this one is a different sort of problem. The software should respond "immediately" to changes in CTS. What it does then is that it sets a flag that no more data should be sent to the UART. That flag gets checked whenever there is a TX interrupt, not only when we enqueue a new message. So far so good. However, if I'm reading the code right, there's a huge TX FIFO in the hardware: 64 bytes. I don't see any sign of hardware-assisted flow control being used in the driver. According to uartfax.c, the UART is a 16750: http://focus.ti.com/docs/prod/folders/print/tl16c750.html This chip does have hardware-assisted flow control. You enable it by setting bit 5 in MCR (cleared after reset). However, some of the bits used in the Calypso driver differ or don't exist in the 16750 data sheet, so I don't know if the flow control is actually implemented. Okay, this should be easy to fix: 1) add some way, AT command or whatever, to make the modem send lots of data, perhaps in an endless loop 2) make the CPU just ignore the data, force CTS with "gpio", and watch on a scope how long it takes the modem to react. Repeat a few times to get the range of possible responses. 3) set bit 5 (AFE) in MCR and retry 4) if this doesn't fix it, we can at least reduce the amount of data sent after CTS gets deasserted. This would be done by splitting FIFO_SIZE into RX_FIFO_SIZE and TX_FIFO_SIZE, and shrinking TX_FIFO_SIZE according to taste. GTA01 would need this to be set to just 1-2 bytes, which sucks. For GTA02, something like 30 should be fine. Dieter, this is mainly wrestling with the firmware. Can you take care of this one ? I can help if you need anything on the Linux/kernel side. - Werner