From: linux@arm.linux.org.uk (Russell King - ARM Linux)
To: linux-arm-kernel@lists.infradead.org
Subject: [PATCH REPOST 1/2] serial/amba-pl011: Activate TX IRQ passively
Date: Thu, 12 Mar 2015 11:03:45 +0000 [thread overview]
Message-ID: <20150312110344.GL8656@n2100.arm.linux.org.uk> (raw)
In-Reply-To: <1425472054-7543-2-git-send-email-Dave.Martin@arm.com>
On Wed, Mar 04, 2015 at 12:27:33PM +0000, Dave Martin wrote:
> The current PL011 driver transmits a dummy character when the UART
> is opened, to assert the TX IRQ for the first time
> (see pl011_startup()). The UART is put in loopback mode temporarily,
> so the receiver presumably shouldn't see anything.
We do this so that we know for certain that the PL011 has room to accept
at least one character.
> However...
>
> At least some platforms containing a PL011 send characters down the
> wire even when loopback mode is enabled. This means that a
> spurious NUL character may be seen at the receiver when the PL011 is
> opened through the TTY layer.
... which is an annoyance.
> The current code also temporarily sets the baud rate to maximum and
> the character width to the minimum, to that the dummy TX completes
> as quickly as possible. If this is seen by the receiver it will
> result in a framing error and can knock the receiver out of sync --
> turning subsequent output into garbage until synchronisation
> is reestablished. (Particularly problematic during boot with systemd.)
Yea, I have my own issues with systemd, but let's stay away from that
potential argument. :)
> To avoid spurious transmissions, this patch removes assumptions about
> whether the TX IRQ will fire until at least one TX IRQ has been seen.
>
> Instead, the UART will unmask the TX IRQ and then slow-start via
> polling and timer-based soft IRQs initially. If the TTY layer writes
> enough data to fill the FIFO to the interrupt threshold in one go,
> the TX IRQ should assert, at which point the driver changes to
> fully interrupt-driven TX.
I'm concerned about this. What happens if the PL011 is also being used
as a console, and the UART TX FIFO is fully stuffed?
Reading the updated code, it seems that we can call pl011_tx_chars()
irrespective of whether the TX FIFO is full or not. pl011_tx_chars()
makes the assumption that the TX FIFO can always accept the next
character, and it results in (eg, in the x_char handling) the next
character being written, even if the FIFO is full.
If hardware CTS flow control is enabled, the problem gets worse - in
that mode, the TX FIFO can remain fully occupied for an indeterminant
amount of time.
This introduces a whole new unreliability to the driver which wasn't
there to start with.
So, I'm afraid this gets a NAK.
You need to check the TX FIFO status before trying to stuff it with
characters.
--
FTTC broadband for 0.8mile line: currently at 10.5Mbps down 400kbps up
according to speedtest.net.
next prev parent reply other threads:[~2015-03-12 11:03 UTC|newest]
Thread overview: 13+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-03-04 12:27 [PATCH REPOST 0/2] Remove pl011 startup glitches and avoid dummy TX during startup Dave Martin
2015-03-04 12:27 ` [PATCH REPOST 1/2] serial/amba-pl011: Activate TX IRQ passively Dave Martin
2015-03-12 11:03 ` Russell King - ARM Linux [this message]
2015-03-12 12:55 ` Dave Martin
2015-03-12 14:39 ` Russell King - ARM Linux
2015-03-12 16:34 ` Dave Martin
2015-03-04 12:27 ` [PATCH REPOST 2/2] serial/amba-pl011: Leave the TX IRQ alone when the UART is not open Dave Martin
2015-03-12 11:04 ` Russell King - ARM Linux
2015-03-12 12:56 ` Dave Martin
2015-03-04 16:44 ` [PATCH REPOST 0/2] Remove pl011 startup glitches and avoid dummy TX during startup Andre Przywara
2015-03-05 12:03 ` Dave Martin
2015-03-05 12:07 ` Andre Przywara
2015-03-05 12:33 ` Dave Martin
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=20150312110344.GL8656@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).