Re: [PATCH v5.10] serial: core: Initialize rs485 RTS polarity already on probe

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Thu, Jun 23, 2022 at 09:58:58AM +0900, Dominique Martinet wrote:
> From: Lukas Wunner <lukas@xxxxxxxxx>
> 
> Core part of commit 2dd8a74fddd21b95dcc60a2d3c9eaec993419d69 upstream:
> the PL011 driver does not support RS485 in the 5.10 tree yet so drop
> that bit.
> 
> RTS polarity of rs485-enabled ports is currently initialized on uart
> open via:
> 
> tty_port_open()
>   tty_port_block_til_ready()
>     tty_port_raise_dtr_rts()  # if (C_BAUD(tty))
>       uart_dtr_rts()
>         uart_port_dtr_rts()
> 
> There's at least three problems here:
> 
> First, if no baud rate is set, RTS polarity is not initialized.
> That's the right thing to do for rs232, but not for rs485, which
> requires that RTS is deasserted unconditionally.
> 
> Second, if the DeviceTree property "linux,rs485-enabled-at-boot-time" is
> present, RTS should be deasserted as early as possible, i.e. on probe.
> Otherwise it may remain asserted until first open.
> 
> Third, even though RTS is deasserted on open and close, it may
> subsequently be asserted by uart_throttle(), uart_unthrottle() or
> uart_set_termios() because those functions aren't rs485-aware.
> (Only uart_tiocmset() is.)
> 
> To address these issues, move RTS initialization from uart_port_dtr_rts()
> to uart_configure_port().  Prevent subsequent modification of RTS
> polarity by moving the existing rs485 check from uart_tiocmget() to
> uart_update_mctrl().
> 
> That way, RTS is initialized on probe and then remains unmodified unless
> the uart transmits data.  If rs485 is enabled at runtime (instead of at
> boot) through a TIOCSRS485 ioctl(), RTS is initialized by the uart
> driver's ->rs485_config() callback and then likewise remains unmodified.
> 
> The PL011 driver initializes RTS on uart open and prevents subsequent
> modification in its ->set_mctrl() callback.  That code is obsoleted by
> the present commit, so drop it.
> 
> Cc: Jan Kiszka <jan.kiszka@xxxxxxxxxxx>
> Cc: Su Bao Cheng <baocheng.su@xxxxxxxxxxx>
> Signed-off-by: Lukas Wunner <lukas@xxxxxxxxx>
> Link: https://lore.kernel.org/r/2d2acaf3a69e89b7bf687c912022b11fd29dfa1e.1642909284.git.lukas@xxxxxxxxx
> Signed-off-by: Greg Kroah-Hartman <gregkh@xxxxxxxxxxxxxxxxxxx>
> Cc: stable@xxxxxxxxxxxxxxx # 5.10
> Reported-by: Daisuke Mizobuchi <mizo@xxxxxxxxxxxxxxxxx>
> Tested-by: Daisuke Mizobuchi <mizo@xxxxxxxxxxxxxxxxx>
> Signed-off-by: Dominique Martinet <dominique.martinet@xxxxxxxxxxxxxxxxx>
> ---
> Notes:
>  - as said in commit message, I've dropped the PL011 part of the
> original patch as it is orthogonal to this change. We need this
> serial core fix for the imx serial tty driver.
> 
> - I wasn't really sure what to do with tags in the commit message,
> everything below the 'Cc: stable' tag apply to the backport:
> Mizobuchi-san tested the backport on the 5.10 branch with the imx
> driver.
> 
> - I'm not quite sure how far back it is relevant, for imx I assume
> rs485 is broken since 58362d5be352 ("serial: imx: implement handshaking
> using gpios with the mctrl_gpio helper") (4.5), and we did have that
> problem all the way back in our older 4.9 product tree... but core
> support back then wasn't as extensive for RS485 so we have a different
> imx specific workaround there.
> 
>  - I do not use 5.15 but either version of this patch apply cleanly
> there; I'd assume it'd be more appropriate to get the original
> 2dd8a74fddd21b cherry-picked in this case for 5.15.

Now queued up, thanks.

greg k-h



[Index of Archives]     [Linux Kernel]     [Kernel Development Newbies]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite Hiking]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux