[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