linux-arm-kernel.lists.infradead.org archive mirror
 help / color / mirror / Atom feed
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: Sat, 4 Feb 2012 16:39:31 +0000	[thread overview]
Message-ID: <20120204163931.GH1275@n2100.arm.linux.org.uk> (raw)
In-Reply-To: <CANOLnOPm-ZKRvu1PVs-jU2sceehRiwNPd=ysu2SDsLbarAPVbw@mail.gmail.com>

On Sat, Feb 04, 2012 at 06:00:56PM +0200, Grazvydas Ignotas wrote:
> It's case 1. What I wanted to say is that first char is most often
> nicely dropped and does not get into the terminal, so I can just type
> the command after it. But in some cases terminal gets corrupted char
> instead, so I must then first get rid of it somehow to successfully
> send a command, which is annoying a bit. I thought that maybe there is
> code somewhere that gets rid of first bad char received and maybe it
> can be tuned, but judging on further discussions it's all done by
> hardware?

If it's the case that the UART bitclock is derived from a PLL which is
shutdown while idle, then no matter which way you look at it - if the
port is open, and therefore the port is expecting to transfer data,
the port must _never_ be allowed to go into any low power state, period.

If it does, then the PLL stops, and it takes time for the PLL to re-lock.
That time will cause a character to be dropped, which is exactly what
people are reporting in this thread.

Moreover, if that then means that the OMAP CPU cores can't be put into a
low power state, then that's the hit that _has_ to be taken because of
the design of the hardware.

It is entirely unacceptable to drop characters on a serial port through
the use of PM.  Many serial protocols just will not cope with that kind
of behaviour - yes, serial protocols may have retry built-in, but will
they retry _before_ the port re-idles and the PLL shuts down?  Can you
be sure?

If you can't, then you can't do PM in this area while the port is open.
Runtime power management is _supposed_ to be transparent.  If it isn't,
it's a bug plain and simple, which blocks the ability for the device to
even _use_ runtime power management.

There's no absolutely argument here.  OMAP's hardware auto idle on the
UART which results in characters being dropped is quite clearly broken.

So, what I suggest is reverting back to standard FIFO thresholds, and
then doing the PM in software: if the kernel transmit buffer holds
characters, or the device FIFO contains characters, PM on the transmit
side must be denied.  If the port is _open_, PM on the receive side
must be denied.  If you don't have a distinction between the transmit
and receive sides, then that becomes a very simple rule: if the port is
open, runtime PM of the serial port is denied and the port must remain
active all the time that it's open.  It's that simple, no ifs or buts.

Anything else, which results in characters lost, is buggy.

  parent reply	other threads:[~2012-02-04 16:39 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 [this message]
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
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=20120204163931.GH1275@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).