From 4d3c17975c7814884a721fe693b3adf5c426d759 Mon Sep 17 00:00:00 2001
From: Hauke Mehrtens <hauke@hauke-m.de>
Date: Tue, 10 Nov 2015 22:18:39 +0100
Subject: [RFC] serial: core: add support for boot console with arbitrary
 baud rates

The Arduino Yun uses a baud rate of 250000 by default. The serial is
going over the Atmel ATmega and is used to connect to this chip.
Without this patch Linux wants to switch the console to 9600 Baud.

With this patch Linux will use the configured baud rate and not a
default one specified in uart_register_driver().

Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
[rebased to 4.14, slightly reworded commit message]
Signed-off-by: Sungbo Eo <mans0n@gorani.run>
---
 drivers/tty/serial/serial_core.c | 6 +++++-
 include/linux/console.h          | 1 +
 2 files changed, 6 insertions(+), 1 deletions(-)

--- a/drivers/tty/serial/serial_core.c
+++ b/drivers/tty/serial/serial_core.c
@@ -232,6 +232,8 @@ static int uart_port_startup(struct tty_
 	if (retval == 0) {
 		if (uart_console(uport) && uport->cons->cflag) {
 			tty->termios.c_cflag = uport->cons->cflag;
+			tty->termios.c_ospeed = uport->cons->baud;
+			tty->termios.c_ispeed = uport->cons->baud;
 			uport->cons->cflag = 0;
 		}
 		/*
@@ -2072,8 +2074,10 @@ uart_set_options(struct uart_port *port,
 	 * Allow the setting of the UART parameters with a NULL console
 	 * too:
 	 */
-	if (co)
+	if (co) {
 		co->cflag = termios.c_cflag;
+		co->baud = baud;
+	}
 
 	return 0;
 }
--- a/include/linux/console.h
+++ b/include/linux/console.h
@@ -145,6 +145,7 @@ struct console {
 	short	flags;
 	short	index;
 	int	cflag;
+	int	baud;
 	void	*data;
 	struct	 console *next;
 };
