All of lore.kernel.org
 help / color / mirror / Atom feed
From: Lukas Wunner <lukas@wunner.de>
To: Lino Sanfilippo <LinoSanfilippo@gmx.de>
Cc: gregkh@linuxfoundation.org, jirislaby@kernel.org,
	u.kleine-koenig@pengutronix.de, linux@armlinux.org.uk,
	richard.genoud@gmail.com, nicolas.ferre@microchip.com,
	alexandre.belloni@bootlin.com, ludovic.desroches@microchip.com,
	shawnguo@kernel.org, s.hauer@pengutronix.de,
	kernel@pengutronix.de, festevam@gmail.com, linux-imx@nxp.com,
	mcoquelin.stm32@gmail.com, alexandre.torgue@foss.st.com,
	linux-serial@vger.kernel.org, linux-kernel@vger.kernel.org,
	linux-arm-kernel@lists.infradead.org,
	linux-stm32@st-md-mailman.stormreply.com
Subject: Re: [PATCH 2 1/9] serial: core: move RS485 configuration tasks from drivers into core
Date: Thu, 17 Feb 2022 12:33:54 +0100	[thread overview]
Message-ID: <20220217113354.GA7826@wunner.de> (raw)
In-Reply-To: <20220216001803.637-2-LinoSanfilippo@gmx.de>

On Wed, Feb 16, 2022 at 01:17:55AM +0100, Lino Sanfilippo wrote:
> --- a/drivers/tty/serial/serial_core.c
> +++ b/drivers/tty/serial/serial_core.c
> @@ -1282,8 +1282,26 @@ static int uart_set_rs485_config(struct uart_port *port,
>  	if (copy_from_user(&rs485, rs485_user, sizeof(*rs485_user)))
>  		return -EFAULT;
>  
> +	/* pick sane settings if the user hasn't */
> +	if (!(rs485.flags & SER_RS485_RTS_ON_SEND) ==
> +	    !(rs485.flags & SER_RS485_RTS_AFTER_SEND)) {
> +		rs485.flags |= SER_RS485_RTS_ON_SEND;
> +		rs485.flags &= ~SER_RS485_RTS_AFTER_SEND;
> +	}

The policy you're enforcing here is:  If settings are nonsensical,
always default to active-high polarity.

However some drivers currently enforce a completely different policy:
E.g. with 8250_lpc18xx.c, if SER_RS485_RTS_ON_SEND is set, use active-high
(and fix up SER_RS485_RTS_AFTER_SEND), else use active-low polarity.
This yields a different result compared to your policy in case both bits
are cleared.

Similarly, sc16is7xx.c defaults to active-low if SER_RS485_RTS_AFTER_SEND
is set, else active-high polarity.  This yields a different result compared
to your policy in case both bits are set.

You risk breaking existing user space applications with this change
if those applications specify nonsensical polarity settings.


I happen to have created a similar commit to this one a month ago
and I came to the conclusion that all one can do is offer a library
function uart_sanitize_rs485_mode() which drivers may elect to call
if that helper's policy is identical to what they're doing now:

https://github.com/l1k/linux/commit/637984111e42


> +
> +	rs485.delay_rts_before_send = min_t(unsigned int,
> +					    rs485.delay_rts_before_send,
> +					    SER_RS485_MAX_RTS_DELAY);
> +	rs485.delay_rts_after_send = min_t(unsigned int,
> +					   rs485.delay_rts_after_send,
> +					   SER_RS485_MAX_RTS_DELAY);

Nonsensical delays may not only be passed in from user space via ioctl(),
but through the device tree.  That's another reason to use a library
function:  It can be called both from the ioctl() as well as after (or in)
uart_get_rs485_mode().


> +	/* Return clean padding area to userspace */
> +	memset(rs485.padding, 0, sizeof(rs485.padding));

Unlike the polarity and delay handling, this one makes sense.

Thanks,

Lukas

  reply	other threads:[~2022-02-17 11:34 UTC|newest]

Thread overview: 34+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-02-16  0:17 Move RS485 implementation from drivers to serial core Lino Sanfilippo
2022-02-16  0:17 ` Lino Sanfilippo
2022-02-16  0:17 ` [PATCH 2 1/9] serial: core: move RS485 configuration tasks from drivers into core Lino Sanfilippo
2022-02-16  0:17   ` Lino Sanfilippo
2022-02-17 11:33   ` Lukas Wunner [this message]
2022-02-17 21:36     ` Lino Sanfilippo
2022-02-17 21:36       ` Lino Sanfilippo
2022-02-21 18:39   ` Greg KH
2022-02-21 18:39     ` Greg KH
2022-02-21 23:19     ` Lino Sanfilippo
2022-02-21 23:19       ` Lino Sanfilippo
2022-02-16  0:17 ` [PATCH 2 2/9] serial: amba-pl011: remove redundant code in rs485_config Lino Sanfilippo
2022-02-16  0:17   ` Lino Sanfilippo
2022-02-16  0:17 ` [PATCH 2 3/9] serial: stm32: " Lino Sanfilippo
2022-02-16  0:17   ` Lino Sanfilippo
2022-02-16  0:17 ` [PATCH 2 4/9] serial: sc16is7xx: remove redundant check " Lino Sanfilippo
2022-02-16  0:17   ` Lino Sanfilippo
2022-02-17 11:47   ` Lukas Wunner
2022-02-17 22:11     ` Lino Sanfilippo
2022-02-17 22:11       ` Lino Sanfilippo
2022-02-16  0:17 ` [PATCH 2 5/9] serial: omap: remove redundant code " Lino Sanfilippo
2022-02-16  0:17   ` Lino Sanfilippo
2022-02-16  0:18 ` [PATCH 2 6/9] serial: max310: remove redundant memset " Lino Sanfilippo
2022-02-16  0:18   ` Lino Sanfilippo
2022-02-16  0:18 ` [PATCH 2 7/9] serial: imx: remove redundant assignment " Lino Sanfilippo
2022-02-16  0:18   ` Lino Sanfilippo
2022-02-16 17:43   ` Uwe Kleine-König
2022-02-16 17:43     ` Uwe Kleine-König
2022-02-16  0:18 ` [PATCH 2 8/9] serial: fsl_lpuart: remove redundant code in rs485_config functions Lino Sanfilippo
2022-02-16  0:18   ` Lino Sanfilippo
2022-02-16  0:18 ` [PATCH 2 9/9] serial: atmel: remove redundant assignment in rs485_config Lino Sanfilippo
2022-02-16  0:18   ` Lino Sanfilippo
2022-02-17  9:22   ` Richard Genoud
2022-02-17  9:22     ` Richard Genoud

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=20220217113354.GA7826@wunner.de \
    --to=lukas@wunner.de \
    --cc=LinoSanfilippo@gmx.de \
    --cc=alexandre.belloni@bootlin.com \
    --cc=alexandre.torgue@foss.st.com \
    --cc=festevam@gmail.com \
    --cc=gregkh@linuxfoundation.org \
    --cc=jirislaby@kernel.org \
    --cc=kernel@pengutronix.de \
    --cc=linux-arm-kernel@lists.infradead.org \
    --cc=linux-imx@nxp.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-serial@vger.kernel.org \
    --cc=linux-stm32@st-md-mailman.stormreply.com \
    --cc=linux@armlinux.org.uk \
    --cc=ludovic.desroches@microchip.com \
    --cc=mcoquelin.stm32@gmail.com \
    --cc=nicolas.ferre@microchip.com \
    --cc=richard.genoud@gmail.com \
    --cc=s.hauer@pengutronix.de \
    --cc=shawnguo@kernel.org \
    --cc=u.kleine-koenig@pengutronix.de \
    /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.