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>
next prev parent 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).