From: "Jiri Slaby (SUSE)" <jirislaby@kernel.org>
To: gregkh@linuxfoundation.org
Cc: linux-serial@vger.kernel.org, linux-kernel@vger.kernel.org,
"Jiri Slaby (SUSE)" <jirislaby@kernel.org>,
"Ilpo Järvinen" <ilpo.jarvinen@linux.intel.com>
Subject: [PATCH 2/5] serial: 8250: extract serial8250_iir_txen_test()
Date: Mon, 23 Jun 2025 09:46:03 +0200 [thread overview]
Message-ID: <20250623074606.456532-3-jirislaby@kernel.org> (raw)
In-Reply-To: <20250623074606.456532-1-jirislaby@kernel.org>
After commit 795158691cc0 ("serial: 8250: extract
serial8250_initialize()"), split serial8250_initialize() even more --
the TX enable test part of this code can be separated into
serial8250_iir_txen_test().
Signed-off-by: Jiri Slaby (SUSE) <jirislaby@kernel.org>
Suggested-by: Ilpo Järvinen <ilpo.jarvinen@linux.intel.com>
---
drivers/tty/serial/8250/8250_port.c | 49 ++++++++++++++++-------------
1 file changed, 28 insertions(+), 21 deletions(-)
diff --git a/drivers/tty/serial/8250/8250_port.c b/drivers/tty/serial/8250/8250_port.c
index ca82ce26715a..584563c45424 100644
--- a/drivers/tty/serial/8250/8250_port.c
+++ b/drivers/tty/serial/8250/8250_port.c
@@ -2233,16 +2233,19 @@ static void serial8250_init_mctrl(struct uart_port *port)
serial8250_set_mctrl(port, port->mctrl);
}
-static void serial8250_initialize(struct uart_port *port)
+static void serial8250_iir_txen_test(struct uart_port *port)
{
struct uart_8250_port *up = up_to_u8250p(port);
- unsigned long flags;
bool lsr_TEMT, iir_NOINT;
- serial_port_out(port, UART_LCR, UART_LCR_WLEN8);
+ if (port->quirks & UPQ_NO_TXEN_TEST)
+ return;
- uart_port_lock_irqsave(port, &flags);
- serial8250_init_mctrl(port);
+ /* Do a quick test to see if we receive an interrupt when we enable the TX irq. */
+ serial_port_out(port, UART_IER, UART_IER_THRI);
+ lsr_TEMT = serial_port_in(port, UART_LSR) & UART_LSR_TEMT;
+ iir_NOINT = serial_port_in(port, UART_IIR) & UART_IIR_NO_INT;
+ serial_port_out(port, UART_IER, 0);
/*
* Serial over Lan (SoL) hack:
@@ -2250,26 +2253,30 @@ static void serial8250_initialize(struct uart_port *port)
* Lan. Those chips take a longer time than a normal serial device to signalize that a
* transmission data was queued. Due to that, the above test generally fails. One solution
* would be to delay the reading of iir. However, this is not reliable, since the timeout is
- * variable. So, let's just don't test if we receive TX irq. This way, we'll never enable
- * UART_BUG_TXEN.
+ * variable. So, in case of UPQ_NO_TXEN_TEST, let's just don't test if we receive TX irq.
+ * This way, we'll never enable UART_BUG_TXEN.
*/
- if (!(port->quirks & UPQ_NO_TXEN_TEST)) {
- /* Do a quick test to see if we receive an interrupt when we enable the TX irq. */
- serial_port_out(port, UART_IER, UART_IER_THRI);
- lsr_TEMT = serial_port_in(port, UART_LSR) & UART_LSR_TEMT;
- iir_NOINT = serial_port_in(port, UART_IIR) & UART_IIR_NO_INT;
- serial_port_out(port, UART_IER, 0);
-
- if (lsr_TEMT && iir_NOINT) {
- if (!(up->bugs & UART_BUG_TXEN)) {
- up->bugs |= UART_BUG_TXEN;
- dev_dbg(port->dev, "enabling bad tx status workarounds\n");
- }
- } else {
- up->bugs &= ~UART_BUG_TXEN;
+ if (lsr_TEMT && iir_NOINT) {
+ if (!(up->bugs & UART_BUG_TXEN)) {
+ up->bugs |= UART_BUG_TXEN;
+ dev_dbg(port->dev, "enabling bad tx status workarounds\n");
}
+ return;
}
+ /* FIXME: why is this needed? */
+ up->bugs &= ~UART_BUG_TXEN;
+}
+
+static void serial8250_initialize(struct uart_port *port)
+{
+ unsigned long flags;
+
+ serial_port_out(port, UART_LCR, UART_LCR_WLEN8);
+
+ uart_port_lock_irqsave(port, &flags);
+ serial8250_init_mctrl(port);
+ serial8250_iir_txen_test(port);
uart_port_unlock_irqrestore(port, flags);
}
--
2.49.0
next prev parent reply other threads:[~2025-06-23 7:46 UTC|newest]
Thread overview: 9+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-06-23 7:46 [PATCH 0/5] tty: fixes on top of summer cleanup Jiri Slaby (SUSE)
2025-06-23 7:46 ` [PATCH 1/5] serial: 8250: extract serial8250_init_mctrl() Jiri Slaby (SUSE)
2025-06-23 18:11 ` Andy Shevchenko
2025-06-24 5:29 ` Jiri Slaby
2025-06-23 7:46 ` Jiri Slaby (SUSE) [this message]
2025-06-23 7:46 ` [PATCH 3/5] serial: 8250: rename lsr_TEMT, iir_NOINT to lowercase Jiri Slaby (SUSE)
2025-06-23 7:46 ` [PATCH 4/5] serial: 8250: document doubled "type == PORT_8250_CIR" check Jiri Slaby (SUSE)
2025-06-23 8:19 ` Andy Shevchenko
2025-06-23 7:46 ` [PATCH 5/5] tty: fix tty_port_tty_*hangup() kernel-doc Jiri Slaby (SUSE)
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=20250623074606.456532-3-jirislaby@kernel.org \
--to=jirislaby@kernel.org \
--cc=gregkh@linuxfoundation.org \
--cc=ilpo.jarvinen@linux.intel.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-serial@vger.kernel.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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.