[prev in list] [next in list] [prev in thread] [next in thread]
List: linux-serial
Subject: Re: [PATCH] Revert "serial: 8250: Don't touch RTS modem control while in rs485 mode"
From: Lukas Wunner <lukas () wunner ! de>
Date: 2021-10-27 11:39:38
Message-ID: 20211027113938.GA9373 () wunner ! de
[Download RAW message or body]
On Wed, Oct 27, 2021 at 07:16:44PM +0800, Su Bao Cheng wrote:
> This reverts commit f45709df7731ad36306a28a3e1af7309d55c35f5.
>
> The `serial8250_do_set_mctrl` not only used by userspace ioctl but
> also the kernel itself.
>
> During tty_open, the uart_port_startup sets the MCR to 0, and then use
> set_mctrl to restore the MCR, so at this time, the MCR read does not
> reflect the desired value.
I don't quite follow. Where is uart_port_startup() setting the MCR to 0?
Are you referring to the call to uart_port_dtr_rts()? That function should
set RTS correctly according to RS485 state, so I don't see where any
breakage may occur.
What is the user-visible issue that you seek to fix with the revert?
Thanks,
Lukas
> diff --git a/drivers/tty/serial/8250/8250_port.c b/drivers/tty/serial/8250/8250_port.c
> index 66374704747e..40736e460956 100644
> --- a/drivers/tty/serial/8250/8250_port.c
> +++ b/drivers/tty/serial/8250/8250_port.c
> @@ -2024,13 +2024,6 @@ void serial8250_do_set_mctrl(struct uart_port *port, unsigned int mctrl)
> struct uart_8250_port *up = up_to_u8250p(port);
> unsigned char mcr;
>
> - if (port->rs485.flags & SER_RS485_ENABLED) {
> - if (serial8250_in_MCR(up) & UART_MCR_RTS)
> - mctrl |= TIOCM_RTS;
> - else
> - mctrl &= ~TIOCM_RTS;
> - }
> -
> mcr = serial8250_TIOCM_to_MCR(mctrl);
>
> mcr = (mcr & up->mcr_mask) | up->mcr_force | up->mcr;
> --
> 2.25.1
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic