From: Hugo Villeneuve <hugo@hugovil.com>
To: Tapio Reijonen <tapio.reijonen@vaisala.com>
Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
Jiri Slaby <jirislaby@kernel.org>, <linux-kernel@vger.kernel.org>,
<linux-serial@vger.kernel.org>,
Hugo Villeneuve <hvilleneuve@dimonoff.com>,
Tapio Reijonen <tapio.reijonen@kolumbus.fi>
Subject: Re: [PATCH v7 1/9] serial: max310x: don't clobber the TX break bit in set_termios
Date: Mon, 5 Oct 2026 11:57:37 -0400 [thread overview]
Message-ID: <20261005115737.3a26240eadeff00262e920ff@hugovil.com> (raw)
In-Reply-To: <20261005-max310x-rs485-sw-delay-v7-1-6ae392eca08c@vaisala.com>
Hi Tapio,
You commit message indicate only part of what your patch changed,
but not why.
In this case, IIUC, your patch prevent ending a preconfigured
TX break when calling set_termios()?
Check this great resource for tips:
https://cbea.ms/git-commit/#why-not-how
On Mon, 05 Oct 2026 13:19:32 +0000
Tapio Reijonen <tapio.reijonen@vaisala.com> wrote:
> max310x_set_termios() overwrites the whole LCR register, but LCR
> also carries the TX break bit that max310x_break_ctl() drives. A break
> is a state, not an event: TIOCSBRK sets the bit and it must stay set
> until TIOCCBRK. Any termios change in between - no concurrency
> required - rewrites LCR from the termios bits alone and silently ends
> the break early.
>
> Update only the LCR bits that are derived from termios and leave the
> TX break and RTS pin control bits untouched. Since nothing clears a
> break when a port is closed with the break still asserted - the tty
> core sends no break-off on release, and the unconditional write here
> was the accidental recovery - clear TXBREAK in startup(), the same way
> 8250 does.
>
> Fixes: f65444187a66 ("serial: New serial driver MAX310X")
> Assisted-by: Claude:claude-fable-5
> Signed-off-by: Tapio Reijonen <tapio.reijonen@vaisala.com>
> ---
> drivers/tty/serial/max310x.c | 17 +++++++++++++++--
> 1 file changed, 15 insertions(+), 2 deletions(-)
>
> diff --git a/drivers/tty/serial/max310x.c b/drivers/tty/serial/max310x.c
> index 022502986c5fcf1ff4de9328746ddc71677be730..fead9c51163d8372d1b609ee9cd5b87faa917fc1 100644
> --- a/drivers/tty/serial/max310x.c
> +++ b/drivers/tty/serial/max310x.c
> @@ -158,6 +158,8 @@
> #define MAX310X_LCR_FORCEPARITY_BIT (1 << 5) /* 9-bit multidrop parity */
> #define MAX310X_LCR_TXBREAK_BIT (1 << 6) /* TX break enable */
> #define MAX310X_LCR_RTS_BIT (1 << 7) /* RTS pin control */
> +/* LCR bits owned by termios; TX break and RTS are driven elsewhere */
> +#define MAX310X_LCR_TERMIOS_MASK GENMASK(5, 0)
>
> /* IRDA register bits */
> #define MAX310X_IRDA_IRDAEN_BIT (1 << 0) /* IRDA mode enable */
> @@ -969,8 +971,12 @@ static void max310x_set_termios(struct uart_port *port,
> if (termios->c_cflag & CSTOPB)
> lcr |= MAX310X_LCR_STOPLEN_BIT; /* 2 stops */
>
> - /* Update LCR register */
> - max310x_port_write(port, MAX310X_LCR_REG, lcr);
> + /*
> + * Update LCR register. Leave the TX break bit alone: it is driven by
> + * break_ctl(), and a whole-register write here would end a break in
> + * progress.
> + */
> + max310x_port_update(port, MAX310X_LCR_REG, MAX310X_LCR_TERMIOS_MASK, lcr);
>
> /* Set read status mask */
> port->read_status_mask = MAX310X_LSR_RXOVR_BIT;
> @@ -1088,6 +1094,13 @@ static int max310x_startup(struct uart_port *port)
>
> max310x_power(port, 1);
>
> + /*
> + * Clear a latched break: nothing clears TXBREAK when a port is
> + * closed with a break still asserted, and set_termios() no longer
> + * rewrites it.
> + */
> + max310x_port_update(port, MAX310X_LCR_REG, MAX310X_LCR_TXBREAK_BIT, 0);
> +
> /* Configure MODE1 register */
> max310x_port_update(port, MAX310X_MODE1_REG,
> MAX310X_MODE1_TRNSCVCTRL_BIT, 0);
>
> --
> 2.47.3
>
--
Hugo Villeneuve
next prev parent reply other threads:[~2026-10-05 15:57 UTC|newest]
Thread overview: 25+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-10-05 13:19 [PATCH v7 0/9] (no cover subject) Tapio Reijonen
2026-10-05 13:19 ` [PATCH v7 1/9] serial: max310x: don't clobber the TX break bit in set_termios Tapio Reijonen
2026-10-05 13:27 ` sashiko-bot
2026-10-05 15:57 ` Hugo Villeneuve [this message]
2026-10-06 4:06 ` Tapio Reijonen
2026-10-06 13:42 ` Hugo Villeneuve
2026-10-08 9:06 ` Tapio Reijonen
2026-10-05 13:19 ` [PATCH v7 2/9] serial: max310x: assert the transceiver during a break Tapio Reijonen
2026-10-05 13:39 ` sashiko-bot
2026-10-05 13:19 ` [PATCH v7 3/9] serial: max310x: centralize the RS485 transceiver programming Tapio Reijonen
2026-10-05 13:19 ` [PATCH v7 4/9] serial: max310x: convert RS485 delays from milliseconds to bit-times Tapio Reijonen
2026-10-05 13:33 ` sashiko-bot
2026-10-05 13:19 ` [PATCH v7 5/9] serial: max310x: stop the transmitter before powering down in shutdown Tapio Reijonen
2026-10-05 13:34 ` sashiko-bot
2026-10-05 13:19 ` [PATCH v7 6/9] serial: max310x: support active-low RTS on the hardware path Tapio Reijonen
2026-10-05 13:34 ` sashiko-bot
2026-10-05 13:19 ` [PATCH v7 7/9] serial: max310x: schedule tx_work directly from the IRQ handler Tapio Reijonen
2026-10-05 13:30 ` sashiko-bot
2026-10-05 13:19 ` [PATCH v7 8/9] serial: max310x: drive RTS in software when hardware delays are too short Tapio Reijonen
2026-10-05 13:40 ` sashiko-bot
2026-10-05 13:19 ` [PATCH v7 9/9] serial: max310x: don't transmit while an RS485 reconfigure is pending Tapio Reijonen
2026-10-05 13:41 ` sashiko-bot
2026-10-05 13:37 ` [PATCH v7 0/9] (no cover subject) Tapio Reijonen
2026-10-05 15:51 ` Hugo Villeneuve
2026-10-06 4:03 ` Tapio Reijonen
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=20261005115737.3a26240eadeff00262e920ff@hugovil.com \
--to=hugo@hugovil.com \
--cc=gregkh@linuxfoundation.org \
--cc=hvilleneuve@dimonoff.com \
--cc=jirislaby@kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-serial@vger.kernel.org \
--cc=tapio.reijonen@kolumbus.fi \
--cc=tapio.reijonen@vaisala.com \
/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.