lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <alpine.DEB.2.21.2411080343040.9262@angie.orcam.me.uk>
Date: Sun, 1 Dec 2024 00:04:36 +0000 (GMT)
From: "Maciej W. Rozycki" <macro@...am.me.uk>
To: Jiri Slaby <jirislaby@...nel.org>
cc: John Ogness <john.ogness@...utronix.de>, 
    Greg Kroah-Hartman <gregkh@...uxfoundation.org>, 
    Petr Mladek <pmladek@...e.com>, 
    Sergey Senozhatsky <senozhatsky@...omium.org>, 
    Steven Rostedt <rostedt@...dmis.org>, Thomas Gleixner <tglx@...utronix.de>, 
    Esben Haabendal <esben@...nix.com>, linux-serial@...r.kernel.org, 
    linux-kernel@...r.kernel.org, 
    Andy Shevchenko <andriy.shevchenko@...ux.intel.com>, 
    Rengarajan S <rengarajan.s@...rochip.com>, 
    Jeff Johnson <quic_jjohnson@...cinc.com>, 
    Serge Semin <fancer.lancer@...il.com>, 
    Lino Sanfilippo <l.sanfilippo@...bus.com>, 
    Wander Lairson Costa <wander@...hat.com>
Subject: Re: [PATCH tty-next v3 1/6] serial: 8250: Adjust the timeout for
 FIFO mode

On Mon, 4 Nov 2024, Jiri Slaby wrote:

> > > THRE only signals there is a space for one character.
> > 
> >   Nope[1]:
> > 
> > "In the FIFO mode, THRE is set when the transmit FIFO is empty; it is
> > cleared when at least one byte is written to the transmit FIFO."
> 
> Hmm, I was confused by NXP's 16c650b [1] datasheet then (or I cannot parse):
> ===
> The THR empty flag in the LSR register will be set to a logic 1 when the
> transmitter is empty or when data is transferred to the TSR. Note that a write
> operation can be performed when the THR empty flag is set
> (logic 0 = FIFO full; logic 1 = at least one FIFO location available).
> ===

 This description seems broken indeed and I find your interpretation of it
correct.  I do hope this is just an editorial mistake with the NXP device.

> But indeed in the LSR[5] bit description, they state:
> ===
> In the FIFO mode, this bit is set when the transmit FIFO is
> empty; it is cleared when at least 1 byte is written to the transmit FIFO.
> ===

 FWIW I chased documentation for the original 16550A device and it uses 
analogous wording[1]:

"Bit 5: This bit is the Transmitter Holding Register Empty (THRE)
indicator. Bit 5 indicates that the UART is ready to
accept a new character for transmission. In addition, this bit
causes the UART to issue an interrupt to the CPU when the
Transmit Holding Register Empty Interrupt enable is set
high. The THRE bit is set to a logic 1 when a character is
transferred from the Transmitter Holding Register into the
Transmitter Shift Register. The bit is reset to logic 0 concur-
rently with the loading of the Transmitter Holding Register
by the CPU. In the FIFO mode this bit is set when the XMIT
FIFO is empty; it is cleared when at least 1 byte is written to
the XMIT FIFO."

It further documents polled operation for THRE[2]:

"LSR5 will indicate when the XMIT FIFO is empty."

and provides further details as to the transmit FIFO[3]:

"The NS16550A transmitter optimizes the CPU/UART data
transaction via the following features:

"1. The depth of the Transmitter (Tx) FIFO ensures that as
    many as 16 characters can be transferred when the
    CPU services the Tx interrupt. Once again, this effec-
    tively buffers the CPU transfer rate from the serial data
    rate.

"2. The Transmitter (Tx) FIFO is similar in structure to
    FIFOs the user may have previously set up in RAM. The
    Tx depth allows the CPU to load 16 characters each
    time it switches context to the service routine. This re-
    duces the impact of the CPU time lost in context switch-
    ing.

"3. Since a time lag in servicing an asynchronous transmit-
    ter usually has no penalty, CPU latency time is of no
    concern to transmitter operation."

This design choice may result in "choppy" transmission due to the transmit 
handler invocation latency, but as noted above it is intentional.  DMA can 
be used with the NS16550A if it is required to avoid this issue, and later 
compatible UART designs such as the 650 give more flexibility as to the Tx 
FIFO fill level trigger threshold.

References:

[1] National Semiconductor Corporation, "Microcommunication Elements 
    Databook, 1987 Edition", "NS16550A Universal Asynchronous 
    Receiver/Transmitter with FIFOs", Section 8.4 "LINE STATUS REGISTER", 
    p. 2-73

[2] same, Section 8.12 "FIFO POLLED MODE OPERATION", p. 2-75

[3] same, Martin S. Michael, Daniel G. Durich, Application Note 491, "The 
    NS 16550A: UART Design and Application Considerations", Section 1.0 
    "Design Considerations and Operation of the New UART Features", p. 5-4

Available from: 
<http://bitsavers.org/components/national/_dataBooks/1987_National_Microcommunications_Elements_Data_Book.pdf>.

 HTH,

  Maciej

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ