From: linux@arm.linux.org.uk (Russell King - ARM Linux)
To: linux-arm-kernel@lists.infradead.org
Subject: patch "tty: serial: OMAP: ensure FIFO levels are set correctly in non-DMA" added to tty tree
Date: Fri, 3 Feb 2012 12:20:53 +0000 [thread overview]
Message-ID: <20120203122053.GF1275@n2100.arm.linux.org.uk> (raw)
In-Reply-To: <20120203230720.28666cc6@notabene.brown>
On Fri, Feb 03, 2012 at 11:07:20PM +1100, NeilBrown wrote:
> However what it really shows me is that I was misunderstanding the code
> (If I spent the time to verify every conclusion that I jumped to, I'd never
> get anywhere :-( ). Better clarify that now.
>
> So this function - serial_omap_tx_empty() is called to test if the
> tx queue is empty.
Not just the queue. The documentation for that function is accurate:
tx_empty(port)
This function tests whether the transmitter fifo and shifter
for the port described by 'port' is empty. If it is empty,
this function should return TIOCSER_TEMT, otherwise return 0.
If the port does not support this operation, then it should
return TIOCSER_TEMT.
So, if this is returning TIOCSER_TEMT while there's still a transmission
in progress, then it's buggy.
> So when I
>
> cat somefile
>
> to the serial console, most of the file comes out fine. But after 'cat'
> finishes and returns to the shell - while some chars are still in the FIFO -
> the shell does an 'stty' ioctl to make sure the settings are still OK.
> This ioctl calls serial_omap_tx_empty which calls pm_resume_put() which
> immediately suspends the uart, which seems to stop some clock - even though
> we think it shouldn't.
If there's an on-going transmission, why is the runtime PM count zero,
meaning that the UART can sleep at the point where serial_omap_tx_empty()
is being called - and obviously there's still characters in the FIFO?
I guess this is highlighting a problem with doing runtime PM with
serial ports: you don't know when the port has _actually_ finished
sending its final character, which is even more of a problem if the
port does hardware CTS flow control itself.
It seems that runtime PM should be checking whether the TX FIFO is empty
before shutting the port down - and that probably means a hook into the
idle stuff.
Note though, that serial_omap_tx_empty() can be called via ioctl from
userspace, so this function would still need the runtime callbacks in
it so that the register is readable at _any_ time that the port is open.
next prev parent reply other threads:[~2012-02-03 12:20 UTC|newest]
Thread overview: 66+ messages / expand[flat|nested] mbox.gz Atom feed top
[not found] <13274430881471@kroah.org>
2012-01-26 3:02 ` patch "tty: serial: OMAP: ensure FIFO levels are set correctly in non-DMA" added to tty tree Paul Walmsley
2012-01-26 4:21 ` Greg KH
2012-01-26 4:31 ` Paul Walmsley
2012-01-26 19:16 ` Greg KH
2012-01-26 19:34 ` Paul Walmsley
2012-02-02 20:03 ` Paul Walmsley
2012-02-02 20:22 ` Greg KH
2012-02-03 4:07 ` NeilBrown
2012-02-03 5:45 ` Paul Walmsley
2012-02-03 9:54 ` NeilBrown
2012-02-03 11:42 ` Grazvydas Ignotas
2012-02-03 12:11 ` NeilBrown
2012-02-03 19:49 ` Paul Walmsley
2012-02-03 20:34 ` Paul Walmsley
2012-02-03 21:42 ` Paul Walmsley
2012-02-03 22:10 ` NeilBrown
2012-02-03 22:30 ` Paul Walmsley
2012-02-04 0:23 ` Woodruff, Richard
2012-02-04 0:59 ` Paul Walmsley
2012-02-04 1:46 ` Woodruff, Richard
2012-02-04 2:39 ` Paul Walmsley
2012-02-04 2:31 ` NeilBrown
2012-02-07 1:00 ` Woodruff, Richard
2012-02-03 19:42 ` Paul Walmsley
2012-02-03 20:44 ` NeilBrown
2012-02-03 21:04 ` Paul Walmsley
2012-02-04 16:00 ` Grazvydas Ignotas
2012-02-04 16:31 ` Paul Walmsley
2012-02-04 16:57 ` Russell King - ARM Linux
2012-02-04 17:32 ` Paul Walmsley
2012-02-04 17:55 ` Russell King - ARM Linux
2012-02-04 19:37 ` Paul Walmsley
2012-02-05 12:16 ` Russell King - ARM Linux
2012-02-08 15:50 ` Paul Walmsley
2012-02-04 16:39 ` Russell King - ARM Linux
2012-02-04 16:49 ` Paul Walmsley
2012-02-04 16:55 ` Paul Walmsley
2012-02-04 17:01 ` Russell King - ARM Linux
2012-02-04 17:22 ` Paul Walmsley
2012-02-04 17:47 ` Russell King - ARM Linux
2012-02-04 18:59 ` Tony Lindgren
2012-02-04 19:24 ` Paul Walmsley
2012-02-04 20:07 ` Russell King - ARM Linux
2012-02-05 15:37 ` Woodruff, Richard
2012-02-05 16:03 ` Russell King - ARM Linux
2012-02-05 17:57 ` Woodruff, Richard
2012-02-06 23:58 ` NeilBrown
2012-02-07 1:13 ` Woodruff, Richard
2012-02-03 19:34 ` Paul Walmsley
2012-02-03 20:10 ` Paul Walmsley
2012-02-03 21:59 ` NeilBrown
2012-02-03 23:02 ` Paul Walmsley
2012-02-04 0:01 ` NeilBrown
2012-02-04 2:06 ` Paul Walmsley
2012-02-04 2:12 ` Paul Walmsley
2012-02-04 3:09 ` NeilBrown
2012-02-04 3:16 ` Paul Walmsley
2012-02-04 3:43 ` NeilBrown
2012-02-04 3:56 ` Paul Walmsley
2012-02-04 4:17 ` NeilBrown
2012-02-03 6:56 ` Govindraj
2012-02-03 12:07 ` NeilBrown
2012-02-03 12:20 ` Russell King - ARM Linux [this message]
2012-02-03 19:54 ` Paul Walmsley
2012-02-03 12:12 ` Felipe Contreras
2012-02-02 21:02 ` Greg KH
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20120203122053.GF1275@n2100.arm.linux.org.uk \
--to=linux@arm.linux.org.uk \
--cc=linux-arm-kernel@lists.infradead.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).