From: "Ilpo Järvinen" <ilpo.jarvinen@linux.intel.com>
To: "Jiri Slaby (SUSE)" <jirislaby@kernel.org>
Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
linux-serial <linux-serial@vger.kernel.org>,
LKML <linux-kernel@vger.kernel.org>
Subject: Re: [PATCH 16/33] serial: 8250: extract serial8250_initialize()
Date: Wed, 11 Jun 2025 15:19:54 +0300 (EEST) [thread overview]
Message-ID: <49e23ee2-a432-5d0e-3185-e455c2d1ca8c@linux.intel.com> (raw)
In-Reply-To: <20250611100319.186924-17-jirislaby@kernel.org>
On Wed, 11 Jun 2025, Jiri Slaby (SUSE) wrote:
> serial8250_do_startup() initializes the ports in the middle of the
> function. This code can be separated to serial8250_initialize(), so that
> serial8250_do_startup() can be readable again.
>
> Signed-off-by: Jiri Slaby (SUSE) <jirislaby@kernel.org>
> ---
> drivers/tty/serial/8250/8250_port.c | 103 ++++++++++++++--------------
> 1 file changed, 50 insertions(+), 53 deletions(-)
>
> diff --git a/drivers/tty/serial/8250/8250_port.c b/drivers/tty/serial/8250/8250_port.c
> index 5466286bb44f..6851c197b31d 100644
> --- a/drivers/tty/serial/8250/8250_port.c
> +++ b/drivers/tty/serial/8250/8250_port.c
> @@ -2247,13 +2247,59 @@ static void serial8250_THRE_test(struct uart_port *port)
> up->bugs |= UART_BUG_THRE;
> }
>
> -int serial8250_do_startup(struct uart_port *port)
> +static void serial8250_initialize(struct uart_port *port)
> {
> struct uart_8250_port *up = up_to_u8250p(port);
> unsigned long flags;
> - unsigned char iir;
> + bool lsr_TEMT, iir_NOINT;
Has the coding style guidance changed at some point to be more liberal
about lower/uppercase? To me it looks entirely unnecessary to capitalize
these.
> + serial_port_out(port, UART_LCR, UART_LCR_WLEN8);
> +
> + uart_port_lock_irqsave(port, &flags);
> + if (port->flags & UPF_FOURPORT) {
> + if (!port->irq)
> + port->mctrl |= TIOCM_OUT1;
I assume you're moving this too in some later patch.
I've no idea why drivers/tty/serial/sunsu.c checks for that flag as well.
> + } else {
> + /* Most PC uarts need OUT2 raised to enable interrupts. */
> + if (port->irq)
> + port->mctrl |= TIOCM_OUT2;
> + }
> +
> + serial8250_set_mctrl(port, port->mctrl);
> +
> + /*
> + * Serial over Lan (SoL) hack:
> + * Intel 8257x Gigabit ethernet chips have a 16550 emulation, to be used for Serial Over
> + * 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
Ironically, you capitalized the variable names but here it still says
"iir". IIRC, some comments in the other patches too have lowercased
references to registers.
> + * variable. So, 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;
Is this necessary at all as the line above is the only place setting this
flag (AFAICT)? Maybe you address this in some later patch, if that's the
case, please ignore my comment. :-)
> + }
> + }
> +
> + uart_port_unlock_irqrestore(port, flags);
> +}
--
i.
> +
> +int serial8250_do_startup(struct uart_port *port)
> +{
> + struct uart_8250_port *up = up_to_u8250p(port);
> int retval;
> - u16 lsr;
>
> if (!port->fifosize)
> port->fifosize = uart_config[port->type].fifo_size;
> @@ -2310,56 +2356,7 @@ int serial8250_do_startup(struct uart_port *port)
>
> up->ops->setup_timer(up);
>
> - /*
> - * Now, initialize the UART
> - */
> - serial_port_out(port, UART_LCR, UART_LCR_WLEN8);
> -
> - uart_port_lock_irqsave(port, &flags);
> - if (up->port.flags & UPF_FOURPORT) {
> - if (!up->port.irq)
> - up->port.mctrl |= TIOCM_OUT1;
> - } else
> - /*
> - * Most PC uarts need OUT2 raised to enable interrupts.
> - */
> - if (port->irq)
> - up->port.mctrl |= TIOCM_OUT2;
> -
> - serial8250_set_mctrl(port, port->mctrl);
> -
> - /*
> - * Serial over Lan (SoL) hack:
> - * Intel 8257x Gigabit ethernet chips have a 16550 emulation, to be
> - * used for Serial Over 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.
> - */
> - if (!(up->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 = serial_port_in(port, UART_LSR);
> - iir = serial_port_in(port, UART_IIR);
> - serial_port_out(port, UART_IER, 0);
> -
> - if (lsr & UART_LSR_TEMT && iir & UART_IIR_NO_INT) {
> - 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;
> - }
> - }
> -
> - uart_port_unlock_irqrestore(port, flags);
> + serial8250_initialize(port);
>
> /*
> * Clear the interrupt registers again for luck, and clear the
>
next prev parent reply other threads:[~2025-06-11 12:20 UTC|newest]
Thread overview: 91+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-06-11 10:02 [PATCH 00/33] tty: summer cleanup Jiri Slaby (SUSE)
2025-06-11 10:02 ` [PATCH 01/33] tty: introduce and use tty_port_tty_vhangup() helper Jiri Slaby (SUSE)
2025-06-11 11:13 ` Ilpo Järvinen
2025-06-23 7:30 ` Jiri Slaby
2025-06-11 10:02 ` [PATCH 02/33] powerpc/legacy_serial: cache serial port and info in add_legacy_port() Jiri Slaby (SUSE)
2025-06-11 11:15 ` Ilpo Järvinen
2025-06-11 10:02 ` [PATCH 03/33] powerpc/legacy_serial: use %pa for phys_addr_t prints Jiri Slaby (SUSE)
2025-06-11 10:02 ` [PATCH 04/33] m68k: remove unneeded tty includes Jiri Slaby (SUSE)
2025-06-11 11:22 ` Ilpo Järvinen
2025-06-17 12:29 ` Geert Uytterhoeven
2025-06-11 10:02 ` [PATCH 05/33] powerpc/powermac: " Jiri Slaby (SUSE)
2025-06-11 11:25 ` Ilpo Järvinen
2025-06-11 10:02 ` [PATCH 06/33] tty: vt: use sane types for userspace API Jiri Slaby (SUSE)
2025-06-11 14:38 ` Nicolas Pitre
2025-06-11 10:02 ` [PATCH 07/33] tty: vt: use _IO() to define ioctl numbers Jiri Slaby (SUSE)
2025-06-11 11:30 ` Ilpo Järvinen
2025-06-11 14:42 ` Nicolas Pitre
2025-07-31 14:35 ` Christophe Leroy
2025-07-31 14:41 ` Christophe Leroy
2025-07-31 20:58 ` Nicolas Pitre
2025-08-01 4:47 ` Jiri Slaby
2025-08-01 7:38 ` Greg KH
2025-06-11 10:02 ` [PATCH 08/33] serial: 8250: sanitize uart_port::serial_{in,out}() types Jiri Slaby (SUSE)
2025-06-11 15:12 ` Andy Shevchenko
2025-06-23 6:55 ` Jiri Slaby
2025-06-11 10:02 ` [PATCH 09/33] serial: 8250: remove CONFIG_SERIAL_8250_RSA inline macros from code Jiri Slaby (SUSE)
2025-06-11 11:42 ` Ilpo Järvinen
2025-06-11 11:46 ` Ilpo Järvinen
2025-06-11 10:02 ` [PATCH 10/33] serial: 8250: invert conditions in RSA functions Jiri Slaby (SUSE)
2025-06-11 11:45 ` Ilpo Järvinen
2025-06-11 10:02 ` [PATCH 11/33] serial: 8250: put RSA functions to their namespace Jiri Slaby (SUSE)
2025-06-11 11:54 ` Ilpo Järvinen
2025-06-11 10:02 ` [PATCH 12/33] serial: 8250: move RSA functions to 8250_rsa.c Jiri Slaby (SUSE)
2025-06-11 11:49 ` Ilpo Järvinen
2025-06-11 10:02 ` [PATCH 13/33] serial: 8250: extract serial8250_startup_special() Jiri Slaby (SUSE)
2025-06-11 11:53 ` Ilpo Järvinen
2025-06-11 10:03 ` [PATCH 14/33] serial: 8250: extract serial8250_set_TRG_levels() Jiri Slaby (SUSE)
2025-06-11 12:07 ` Ilpo Järvinen
2025-06-11 10:03 ` [PATCH 15/33] serial: 8250: extract serial8250_THRE_test() Jiri Slaby (SUSE)
2025-06-11 12:03 ` Ilpo Järvinen
2025-06-12 8:54 ` Jiri Slaby
2025-06-12 9:18 ` Ilpo Järvinen
2025-06-11 10:03 ` [PATCH 16/33] serial: 8250: extract serial8250_initialize() Jiri Slaby (SUSE)
2025-06-11 12:19 ` Ilpo Järvinen [this message]
2025-06-23 6:59 ` Jiri Slaby
2025-06-11 10:03 ` [PATCH 17/33] serial: 8250: extract serial8250_clear_interrupts() Jiri Slaby (SUSE)
2025-06-11 12:27 ` Ilpo Järvinen
2025-06-11 10:03 ` [PATCH 18/33] serial: 8250: extract serial8250_set_mini() Jiri Slaby (SUSE)
2025-06-11 12:29 ` Ilpo Järvinen
2025-06-11 10:03 ` [PATCH 19/33] serial: 8250: extract serial8250_set_trigger_for_slow_speed() Jiri Slaby (SUSE)
2025-06-11 12:34 ` Ilpo Järvinen
2025-06-11 10:03 ` [PATCH 20/33] serial: 8250: extract serial8250_set_afe() Jiri Slaby (SUSE)
2025-06-11 12:35 ` Ilpo Järvinen
2025-06-11 10:03 ` [PATCH 21/33] serial: 8250: extract serial8250_set_errors_and_ignores Jiri Slaby (SUSE)
2025-06-11 12:43 ` Ilpo Järvinen
2025-06-11 10:03 ` [PATCH 22/33] serial: 8250: extract serial8250_set_ier() Jiri Slaby (SUSE)
2025-06-11 12:47 ` Ilpo Järvinen
2025-06-11 10:03 ` [PATCH 23/33] serial: 8250: extract serial8250_set_efr() Jiri Slaby (SUSE)
2025-06-11 12:58 ` Ilpo Järvinen
2025-06-12 10:01 ` Jiri Slaby
2025-06-12 10:04 ` Jiri Slaby
2025-06-12 13:33 ` Andy Shevchenko
2025-06-12 18:54 ` Andy Shevchenko
2025-06-23 7:20 ` Jiri Slaby
2025-06-11 10:03 ` [PATCH 24/33] serial: 8250: extract serial8250_set_fcr() Jiri Slaby (SUSE)
2025-06-11 13:01 ` Ilpo Järvinen
2025-06-11 10:03 ` [PATCH 25/33] serial: 8250: lcr compute cleanup Jiri Slaby (SUSE)
2025-06-11 13:03 ` Ilpo Järvinen
2025-06-11 10:03 ` [PATCH 26/33] serial: 8250: drop unused frac from serial8250_do_get_divisor() Jiri Slaby (SUSE)
2025-06-11 13:04 ` Ilpo Järvinen
2025-06-11 10:03 ` [PATCH 27/33] serial: 8250: extract serial_get_or_create_irq_info() Jiri Slaby (SUSE)
2025-06-11 13:09 ` Ilpo Järvinen
2025-06-11 10:03 ` [PATCH 28/33] serial: 8250: remove debug prints from ISR Jiri Slaby (SUSE)
2025-06-11 13:09 ` Ilpo Järvinen
2025-06-11 10:03 ` [PATCH 29/33] serial: 8250: drop DEBUG_AUTOCONF() macro Jiri Slaby (SUSE)
2025-06-11 13:10 ` Ilpo Järvinen
2025-06-17 11:32 ` Maciej W. Rozycki
2025-06-17 11:42 ` Greg Kroah-Hartman
2025-06-17 13:21 ` Maciej W. Rozycki
2025-06-11 10:03 ` [PATCH 30/33] serial: 8250: invert serial8250_register_8250_port() CIR condition Jiri Slaby (SUSE)
2025-06-11 13:21 ` Ilpo Järvinen
2025-06-18 5:48 ` Andy Shevchenko
2025-06-20 21:48 ` Maciej S. Szmigiero
2025-06-21 19:08 ` Andy Shevchenko
2025-06-23 7:05 ` Jiri Slaby
2025-06-23 7:17 ` Andy Shevchenko
2025-06-11 10:03 ` [PATCH 31/33] serial: 8250: invert condition to avoid a goto label Jiri Slaby (SUSE)
2025-06-18 5:45 ` Andy Shevchenko
2025-06-11 10:03 ` [PATCH 32/33] serial: 8250: use hashtable Jiri Slaby (SUSE)
2025-06-11 13:25 ` Ilpo Järvinen
2025-06-11 10:03 ` [PATCH 33/33] serial: 8250_omap: use uart_port pointer when available 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=49e23ee2-a432-5d0e-3185-e455c2d1ca8c@linux.intel.com \
--to=ilpo.jarvinen@linux.intel.com \
--cc=gregkh@linuxfoundation.org \
--cc=jirislaby@kernel.org \
--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 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).