linux-arm-kernel.lists.infradead.org archive mirror
 help / color / mirror / Atom feed
From: neilb@suse.de (NeilBrown)
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 11:01:31 +1100	[thread overview]
Message-ID: <20120204110131.7378b8fe@notabene.brown> (raw)
In-Reply-To: <alpine.DEB.2.00.1202031532540.27947@utopia.booyaka.com>

On Fri, 3 Feb 2012 16:02:42 -0700 (MST) Paul Walmsley <paul@pwsan.com> wrote:

> On Sat, 4 Feb 2012, NeilBrown wrote:
> 
> > On Fri, 3 Feb 2012 13:10:28 -0700 (MST) Paul Walmsley <paul@pwsan.com> wrote:
> > 
> > > Considering your theory that the UART clocks are being cut while there's 
> > > still data in the FIFO, you might consider removing this code at the end 
> > > of transmit_chars():
> > > 
> > > 	if (uart_circ_empty(xmit))
> > > 		serial_omap_stop_tx(&up->port);
> > 
> > I read the code and chickened out of just removing that.
> > serial_omap_stop_tx seem to do 2 things:
> >  1/ tell the uart to stop sending interrupts when the tx fifo is empty
> >  2/ set forceidle (really smartidle) on the uart.
> > 
> > I didn't feel comfortable removing '1' as I thought it might generate an
> > interrupt storm .. maybe not.
> 
> Might be worth a try.  In theory, since the current UART driver sets the 
> TX_EMPTY flag in the SCR register, the UART should only raise a TX 
> interrupt when the FIFO + shift register are totally empty.  So hopefully 
> you should only get one extra interrupt per TTY transmit operation.
> 
> > Instead I just removed '2'.  In fact I replaced the 'set_forceidle' call with
> > 'set_noidle'.  So the uart should never report that it was idle.
> > 
> > I did this with my other patch removed so pm_runtime_put() was still being
> > called.
> > 
> > Result:  I still get corruption.
> > So having the UART say "no, I'm not idle" does *not* stop the clock
> > being turned off when we use omap_hwmod_idle() to turn off the clocks.
> 
> Hmm that's doubtful.  If that's really so, then we should be seeing 
> massive UART transmit problems.  I'd expect that the driver wouldn't be 
> able to get any transmit buffers out the door at all before the UART's 
> fclk is cut.

Guess what happens if I set autosuspend_delay_ms to 0?
Massive transmit problems.  Driver can hardly get anything out before the
UART's fclk is cut...


> 
> What's probably happening in this case is that the hwmod code is rewriting 
> the UART SIDLEMODE bits in the hwmod code's _idle() function.  This gets 
> called as part of the PM runtime suspend operation.  So it's bypassing 
> your debugging hack :-)  The hwmod code expects to control the SYSCONFIG 
> register bits itself, and the current way that the UART driver messes with 
> the SYSCONFIG bits is a total hack that that hwmod code is not expecting.  
> You could try disabling that behavior in _idle_sysc() by adding a hack to 
> skip it if it's the UART3 hwmod.
> 
> > When we turn off a clock, if that is the last clock in the clock-domain, we
> > also turn off the clock-domain (I think).
> 
> That's only true if the clockdomain is programmed to use 
> software-supervised idle.  CORE & PER should both be programmed to 
> hardware-supervised idle by mach-omap2/pm34xx.c.  In that case, we let the 
> PRCM put the clockdomain to sleep by itself.
> 
> > Could it be that the clock-domain doesn't do any handshaking with modules,
> > and so turns off the clocks even though they are being used?
> 
> Probably not -- I'd think that hardware-supervised idle wouldn't work at 
> all if that were true.

Thanks for those hints.  Next time I dive into the code/doco they might help
me understand a bit more.

Thanks,
NeilBrown

-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 828 bytes
Desc: not available
URL: <http://lists.infradead.org/pipermail/linux-arm-kernel/attachments/20120204/f757a1ca/attachment.sig>

  reply	other threads:[~2012-02-04  0:01 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 [this message]
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=20120204110131.7378b8fe@notabene.brown \
    --to=neilb@suse.de \
    --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).