From: Peter Hurley <peter@hurleysoftware.com>
To: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Cc: Andrew Morton <akpm@linux-foundation.org>,
linux-kernel@vger.kernel.org, linux-serial@vger.kernel.org,
Jiri Slaby <jslaby@suse.cz>, Yinghai Lu <yinghai@kernel.org>,
Peter Hurley <peter@hurleysoftware.com>
Subject: [PATCH v6] earlycon: 8250: Fix command line regression
Date: Mon, 6 Apr 2015 10:48:49 -0400 [thread overview]
Message-ID: <1428331729-21679-1-git-send-email-peter@hurleysoftware.com> (raw)
In-Reply-To: <1428245532-1523-1-git-send-email-peter@hurleysoftware.com>
Restore undocumented behavior of kernel command line parameters of
the forms:
console=uart[8250],io|mmio|mmio32,<addr>[,options]
console=uart[8250],<addr>[,options]
where 'options' have not been specified; in this case, the hardware
is assumed to be initialized.
Fixes: c7cef0a84912cab3c9df8 ("console: Add extensible console matching")
Reported-by: Yinghai Lu <yinghai@kernel.org>
Signed-off-by: Peter Hurley <peter@hurleysoftware.com>
---
v6: Removed documentation
+ removed unnecessary checks; this fix does not attempt to replicate
the _exact_ original behavior, but only the reported breakage.
v5: Refactored serial8250_console_setup() & univ8250_console_setup()
to eliminate open-coding; net +1 LOC (excludes documentation)
v4: Removed FIXME comment
v3: Fixed automatic console to port line settings initialization;
open-coded serial8250_console_setup() so the baud can be probed;
added sha reference in commit log
v2: Fixed regression which allowed "console=uart1337,..." to start a
console (but not an earlycon)
+ fixed earlycon= documentation related required behavior fixed by
this patch
drivers/tty/serial/8250/8250_core.c | 31 ++++++++++++++++++++++++-------
drivers/tty/serial/8250/8250_early.c | 19 -------------------
2 files changed, 24 insertions(+), 26 deletions(-)
diff --git a/drivers/tty/serial/8250/8250_core.c b/drivers/tty/serial/8250/8250_core.c
index e0fb5f0..18142ee 100644
--- a/drivers/tty/serial/8250/8250_core.c
+++ b/drivers/tty/serial/8250/8250_core.c
@@ -3412,9 +3412,23 @@ static void univ8250_console_write(struct console *co, const char *s,
serial8250_console_write(up, s, count);
}
-static int serial8250_console_setup(struct uart_8250_port *up, char *options)
+static unsigned int probe_baud(struct uart_port *port)
+{
+ unsigned char lcr, dll, dlm;
+ unsigned int quot;
+
+ lcr = serial_port_in(port, UART_LCR);
+ serial_port_out(port, UART_LCR, lcr | UART_LCR_DLAB);
+ dll = serial_port_in(port, UART_DLL);
+ dlm = serial_port_in(port, UART_DLM);
+ serial_port_out(port, UART_LCR, lcr);
+
+ quot = (dlm << 8) | dll;
+ return (port->uartclk / 16) / quot;
+}
+
+static int serial8250_console_setup(struct uart_port *port, char *options, bool probe)
{
- struct uart_port *port = &up->port;
int baud = 9600;
int bits = 8;
int parity = 'n';
@@ -3425,13 +3439,15 @@ static int serial8250_console_setup(struct uart_8250_port *up, char *options)
if (options)
uart_parse_options(options, &baud, &parity, &bits, &flow);
+ else if (probe)
+ baud = probe_baud(port);
return uart_set_options(port, port->cons, baud, parity, bits, flow);
}
static int univ8250_console_setup(struct console *co, char *options)
{
- struct uart_8250_port *up;
+ struct uart_port *port;
/*
* Check whether an invalid uart number has been specified, and
@@ -3440,11 +3456,11 @@ static int univ8250_console_setup(struct console *co, char *options)
*/
if (co->index >= nr_uarts)
co->index = 0;
- up = &serial8250_ports[co->index];
+ port = &serial8250_ports[co->index].port;
/* link port to console */
- up->port.cons = co;
+ port->cons = co;
- return serial8250_console_setup(up, options);
+ return serial8250_console_setup(port, options, false);
}
/**
@@ -3491,7 +3507,8 @@ static int univ8250_console_match(struct console *co, char *name, int idx,
continue;
co->index = i;
- return univ8250_console_setup(co, options);
+ port->cons = co;
+ return serial8250_console_setup(port, options, true);
}
return -ENODEV;
diff --git a/drivers/tty/serial/8250/8250_early.c b/drivers/tty/serial/8250/8250_early.c
index e95ebfe..8e11968 100644
--- a/drivers/tty/serial/8250/8250_early.c
+++ b/drivers/tty/serial/8250/8250_early.c
@@ -105,21 +105,6 @@ static void __init early_serial8250_write(struct console *console,
serial8250_early_out(port, UART_IER, ier);
}
-static unsigned int __init probe_baud(struct uart_port *port)
-{
- unsigned char lcr, dll, dlm;
- unsigned int quot;
-
- lcr = serial8250_early_in(port, UART_LCR);
- serial8250_early_out(port, UART_LCR, lcr | UART_LCR_DLAB);
- dll = serial8250_early_in(port, UART_DLL);
- dlm = serial8250_early_in(port, UART_DLM);
- serial8250_early_out(port, UART_LCR, lcr);
-
- quot = (dlm << 8) | dll;
- return (port->uartclk / 16) / quot;
-}
-
static void __init init_port(struct earlycon_device *device)
{
struct uart_port *port = &device->port;
@@ -151,10 +136,6 @@ static int __init early_serial8250_setup(struct earlycon_device *device,
struct uart_port *port = &device->port;
unsigned int ier;
- device->baud = probe_baud(&device->port);
- snprintf(device->options, sizeof(device->options), "%u",
- device->baud);
-
/* assume the device was initialized, only mask interrupts */
ier = serial8250_early_in(port, UART_IER);
serial8250_early_out(port, UART_IER, ier & UART_IER_UUE);
--
2.3.5
next prev parent reply other threads:[~2015-04-06 14:48 UTC|newest]
Thread overview: 63+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-03-09 20:27 [PATCH v3 -next 00/11] Extensible console matching & direct earlycon Peter Hurley
2015-03-09 20:27 ` [PATCH v3 -next 01/11] console: Add extensible console matching Peter Hurley
2015-03-09 20:27 ` [PATCH v3 -next 02/11] serial: core: Fix kernel doc for uart_console_write() Peter Hurley
2015-03-09 20:27 ` [PATCH v3 -next 03/11] serial: 8250_early: Remove early_device variable Peter Hurley
2015-03-09 20:27 ` [PATCH v3 -next 04/11] serial: earlycon: Move ->uartclk initialize Peter Hurley
2015-03-09 20:27 ` [PATCH v3 -next 05/11] serial: 8250_early: Assume uart already initialized if no baud option Peter Hurley
2015-03-09 20:27 ` [PATCH v3 -next 06/11] serial: 8250_early: Fix setup() error code Peter Hurley
2015-03-09 20:27 ` [PATCH v3 -next 07/11] serial: earlycon: Ignore parse_options() " Peter Hurley
2015-03-09 20:27 ` [PATCH v3 -next 08/11] serial: earlycon: Skip parse_options() if empty string Peter Hurley
2015-03-09 20:27 ` [PATCH v3 -next 09/11] serial: earlycon: Refactor earlycon registration Peter Hurley
2015-03-09 20:27 ` [PATCH v3 -next 10/11] serial: earlycon: Enable earlycon without command line param Peter Hurley
2015-03-09 20:27 ` [PATCH v3 -next 11/11] serial: 8250_early: Remove setup_early_serial8250_console() Peter Hurley
2015-04-02 2:04 ` Yinghai Lu
2015-04-02 3:22 ` Peter Hurley
2015-04-02 9:15 ` Yinghai Lu
2015-04-02 16:31 ` Peter Hurley
2015-04-02 17:23 ` Yinghai Lu
2015-04-02 22:12 ` Yinghai Lu
2015-04-02 22:36 ` Yinghai Lu
2015-04-03 0:02 ` Yinghai Lu
2015-04-03 0:22 ` Yinghai Lu
2015-04-03 2:38 ` Yinghai Lu
2015-04-03 10:37 ` Peter Hurley
2015-04-03 16:57 ` Yinghai Lu
2015-04-03 17:38 ` Peter Hurley
2015-04-03 17:44 ` Yinghai Lu
2015-04-03 18:27 ` Peter Hurley
2015-04-03 19:00 ` Greg Kroah-Hartman
2015-04-03 23:03 ` [PATCH] earlycon: 8250: Fix command line regression Peter Hurley
2015-04-04 0:04 ` [PATCH v2] " Peter Hurley
2015-04-04 2:19 ` Yinghai Lu
2015-04-04 2:29 ` Peter Hurley
2015-04-04 2:50 ` Peter Hurley
2015-04-04 3:00 ` Yinghai Lu
2015-04-04 2:56 ` Yinghai Lu
2015-04-04 3:09 ` Peter Hurley
2015-04-04 3:28 ` Yinghai Lu
2015-04-04 3:09 ` Yinghai Lu
2015-04-04 3:15 ` Peter Hurley
2015-04-04 3:24 ` Yinghai Lu
2015-04-04 3:31 ` Yinghai Lu
2015-04-04 3:32 ` Peter Hurley
2015-04-04 3:37 ` Yinghai Lu
2015-04-04 3:41 ` Peter Hurley
2015-04-04 6:05 ` Yinghai Lu
2015-04-04 14:27 ` [PATCH v3] " Peter Hurley
2015-04-04 16:09 ` Greg Kroah-Hartman
2015-04-04 16:23 ` Peter Hurley
2015-04-04 16:52 ` Greg Kroah-Hartman
2015-04-04 17:08 ` Peter Hurley
2015-04-04 17:19 ` [PATCH v4] " Peter Hurley
2015-04-04 17:24 ` Peter Hurley
2015-04-04 17:41 ` Greg Kroah-Hartman
2015-04-05 7:09 ` Yinghai Lu
2015-04-05 13:06 ` Peter Hurley
2015-04-05 20:14 ` Yinghai Lu
2015-04-05 14:52 ` [PATCH v5] " Peter Hurley
2015-04-05 20:02 ` Yinghai Lu
2015-04-06 14:48 ` Peter Hurley [this message]
2015-04-04 0:52 ` [PATCH v3 -next 11/11] serial: 8250_early: Remove setup_early_serial8250_console() Yinghai Lu
2015-04-04 1:16 ` Peter Hurley
2015-04-04 0:58 ` Yinghai Lu
2015-03-26 17:13 ` [PATCH v3 -next 00/11] Extensible console matching & direct earlycon Greg Kroah-Hartman
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=1428331729-21679-1-git-send-email-peter@hurleysoftware.com \
--to=peter@hurleysoftware.com \
--cc=akpm@linux-foundation.org \
--cc=gregkh@linuxfoundation.org \
--cc=jslaby@suse.cz \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-serial@vger.kernel.org \
--cc=yinghai@kernel.org \
/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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).