serial: 8250: Skip uninitialized TTY port baud rate update
authorSerge Semin <Sergey.Semin@baikalelectronics.ru>
Wed, 23 Sep 2020 16:19:49 +0000 (19:19 +0300)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Wed, 30 Sep 2020 12:52:42 +0000 (14:52 +0200)
It is erroneous to update the TTY port baud rate if it hasn't been
initialized yet, because in that case the TTY struct isn't set. So there
is no termios structure to get and re-calculate the baud if the current
baud can't be reached. Let's skip the baud rate update then until the port
is fully initialized.

Note the update UART clock method still sets the uartclk member with a new
ref clock value even if the port is turned off. The new UART ref clock
rate will be used later on the port starting up procedure.

Fixes: 868f3ee6e452 ("serial: 8250: Add 8250 port clock update method")
Tested-by: Hans de Goede <hdegoede@redhat.com>
Signed-off-by: Serge Semin <Sergey.Semin@baikalelectronics.ru>
Link: https://lore.kernel.org/r/20200923161950.6237-3-Sergey.Semin@baikalelectronics.ru
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/tty/serial/8250/8250_port.c

index 1259fb6b66b387a8afa750ccd8c9ae590635987b..b0af13074cd36d877ee7f1177af8cbc1ff07eab6 100644 (file)
@@ -2653,6 +2653,10 @@ void serial8250_update_uartclk(struct uart_port *port, unsigned int uartclk)
                goto out_lock;
 
        port->uartclk = uartclk;
+
+       if (!tty_port_initialized(&port->state->port))
+               goto out_lock;
+
        termios = &port->state->port.tty->termios;
 
        baud = serial8250_get_baud_rate(port, termios, NULL);