Thread (1 message) 1 message, 1 author, 2011-05-19

Re: serial_core's port->count mess

From: Pavan Savoy <hidden>
Date: 2011-05-19 12:51:02

On Thu, May 19, 2011 at 3:58 PM, Govindraj [off-list ref] wrote:
On Thu, May 19, 2011 at 3:08 PM, Pavan Savoy [off-list ref] wrote:
quoted
Hi,

I have a device connected to my apps processor over UART, the serial
core's hooked up with omap-serial UART driver.
There is a scenario, where the device just fails to respond, and I
should be closing the UART & opening it again to re-try the request.
This is also coupled with power-cycling the chip.

However a normal start/stop sequence where chip responds to every
request & I close UART when I'm done - is something like this,
[function name & line number in logs)
uart_open(1) called
uart_open: 1635
uart_open: 1651
uart_open: 1663
uart_open: 1674
omap-hsuart omap-hsuart.1: serial_omap_pm+1
omap-hsuart omap-hsuart.1: Enable CTS wakeup for UART 1
omap-hsuart omap-hsuart.1: serial_omap_startup+1
omap-hsuart omap-hsuart.1: serial_omap_set_mctrl+1
omap-hsuart omap-hsuart.1: serial_omap_get_mctrl+1
uart_open: 1686
uart_open: 1694
omap-hsuart omap-hsuart.1: serial_omap_set_mctrl+1
omap-hsuart omap-hsuart.1: serial_omap_set_termios+1
omap-hsuart omap-hsuart.1: serial_omap_set_mctrl+1
uart_open: 1705
uart_flush_buffer(1) called
omap-hsuart omap-hsuart.1: serial_omap_set_mctrl+1
omap-hsuart omap-hsuart.1: serial_omap_set_termios+1
omap-hsuart omap-hsuart.1: serial_omap_set_mctrl+1
omap-hsuart omap-hsuart.1: serial_omap_set_termios+1
uart_flush_buffer(1) called
uart_flush_buffer(1) called
uart_flush_buffer(1) called
omap-hsuart omap-hsuart.1: serial_omap_set_mctrl+1
omap-hsuart omap-hsuart.1: serial_omap_set_termios+1
uart_wait_until_sent(1), jiffies=4294954470, expire=4294954474...
omap-hsuart omap-hsuart.1: serial_omap_tx_empty+1
uart_wait_until_sent(1), jiffies=4294954471, expire=4294954475...
omap-hsuart omap-hsuart.1: serial_omap_tx_empty+1
(stc): st_tty_open

uart_flush_buffer(1) called
uart_flush_buffer(1) called
uart_flush_buffer(1) called
(stk) :ldisc_install = 0
uart_close(1) called
uart_close: 1295
uart_close: 1316
uart_wait_until_sent(1), jiffies=4294951992, expire=4294951996...
omap-hsuart omap-hsuart.1: serial_omap_tx_empty+1
uart_close: 1327
omap-hsuart omap-hsuart.1: Disable CTS wakeup for UART1
uart_wait_until_sent(1), jiffies=4294951994, expire=4294951996...
omap-hsuart omap-hsuart.1: serial_omap_tx_empty+1
uart_close: 1345
omap-hsuart omap-hsuart.1: serial_omap_set_mctrl+1
omap-hsuart omap-hsuart.1: serial_omap_shutdown+1
omap-hsuart omap-hsuart.1: serial_omap_set_mctrl+1
uart_flush_buffer(1) called
uart_flush_buffer(1) called
omap-hsuart omap-hsuart.1: serial_omap_pm+1
uart_close: 1368
(stc): st_tty_close

However, in a scenario where the chip fails to respond to one of the
requests, the start/stop sequence becomes something like this,
uart_open(1) called
uart_open: 1635
uart_open: 1651
uart_open: 1663
uart_open: 1705

So, the problem seems to be that the port->count in the serial_core
isn't 1 & hence the call,
       if (port->count == 1)
               uart_change_pm(state, 0);
Actually port count will be incremented based on number of times
the port will be opened. (file open do on the the given ttyOx interface)
for the first tty open the count gets incremented to one and sets state to
active
(state, 0)
if you open multiple times then the serial_core knows port in active state
so it is not necessary to call uart_change_pm(state, 0)
Assuming multiple opens isn't that big a deal...
But I get a tcgetattr() failure then, and thereby unable to set the
default baud-rate
and hence send data over UART.
quoted
doesn't seem to be happening, which is very critical. Also no calls
are made to uart_startup & hence omap-serial's startup.

Where should I be looking as to why the port->count is messed up ?
What is the this count used for?
Also how is this related to chip not responding to certain commands?
Is the uart_clks cut? Try keeping uart clocks active always.
Need to check this then....
How do I make sure they stay on ?
Govindraj.R
quoted
--
To unsubscribe from this list: send the line "unsubscribe linux-serial" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
--
To unsubscribe from this list: send the line "unsubscribe linux-serial" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help