]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
serial: 8250: Remove serial_rs485 sanitization from em485
authorIlpo Järvinen <ilpo.jarvinen@linux.intel.com>
Mon, 6 Jun 2022 10:04:33 +0000 (13:04 +0300)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Fri, 25 Nov 2022 16:45:42 +0000 (17:45 +0100)
[ Upstream commit 84f2faa7852e1f55d89bb0c99b3a672b87b11f87 ]

Serial core handles serial_rs485 sanitization.

When em485 init fails, there are two possible paths of entry:

  1) uart_rs485_config (init path) that fully clears port->rs485 on
     error.

  2) ioctl path with a pre-existing, valid port->rs485 unto which the
     kernel falls back on error and port->rs485 should therefore be
     kept untouched. The temporary rs485 struct is not returned to
     userspace in case of error so its flag don't matter.

...Thus SER_RS485_ENABLED clearing on error can/should be dropped.

Signed-off-by: Ilpo Järvinen <ilpo.jarvinen@linux.intel.com>
Link: https://lore.kernel.org/r/20220606100433.13793-37-ilpo.jarvinen@linux.intel.com
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Stable-dep-of: 93810191f5d2 ("serial: 8250: omap: Fix missing PM runtime calls for omap8250_set_mctrl()")
Signed-off-by: Sasha Levin <sashal@kernel.org>
drivers/tty/serial/8250/8250_port.c

index f648fd1d7548ea4bb3d9745b6f1d67804758dfce..7cdfc2458d36b9ec5868148fb4b90839678cc070 100644 (file)
@@ -661,13 +661,6 @@ int serial8250_em485_config(struct uart_port *port, struct serial_rs485 *rs485)
                rs485->flags &= ~SER_RS485_RTS_AFTER_SEND;
        }
 
-       /* clamp the delays to [0, 100ms] */
-       rs485->delay_rts_before_send = min(rs485->delay_rts_before_send, 100U);
-       rs485->delay_rts_after_send  = min(rs485->delay_rts_after_send, 100U);
-
-       memset(rs485->padding, 0, sizeof(rs485->padding));
-       port->rs485 = *rs485;
-
        gpiod_set_value(port->rs485_term_gpio,
                        rs485->flags & SER_RS485_TERMINATE_BUS);
 
@@ -675,15 +668,8 @@ int serial8250_em485_config(struct uart_port *port, struct serial_rs485 *rs485)
         * Both serial8250_em485_init() and serial8250_em485_destroy()
         * are idempotent.
         */
-       if (rs485->flags & SER_RS485_ENABLED) {
-               int ret = serial8250_em485_init(up);
-
-               if (ret) {
-                       rs485->flags &= ~SER_RS485_ENABLED;
-                       port->rs485.flags &= ~SER_RS485_ENABLED;
-               }
-               return ret;
-       }
+       if (rs485->flags & SER_RS485_ENABLED)
+               return serial8250_em485_init(up);
 
        serial8250_em485_destroy(up);
        return 0;