From: Peter Hurley <peter@hurleysoftware.com>
To: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Cc: linux-serial@vger.kernel.org, linux-kernel@vger.kernel.org,
Jiri Slaby <jslaby@suse.cz>,
Andrew Morton <akpm@linux-foundation.org>,
Rob Herring <robh@kernel.org>, Yinghai Lu <yinghai@kernel.org>,
Peter Hurley <peter@hurleysoftware.com>
Subject: [PATCH v2] earlycon: 8250: Fix command line regression
Date: Fri, 3 Apr 2015 20:04:35 -0400 [thread overview]
Message-ID: <1428105875-4038-1-git-send-email-peter@hurleysoftware.com> (raw)
In-Reply-To: <1428102229-26103-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.
Document the required behavior of the original implementation.
Reported-by: Yinghai Lu <yinghai@kernel.org>
Signed-off-by: Peter Hurley <peter@hurleysoftware.com>
---
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
Documentation/kernel-parameters.txt | 18 +++++++++++++++---
drivers/tty/serial/8250/8250_core.c | 20 ++++++++++++++++++--
drivers/tty/serial/8250/8250_early.c | 19 -------------------
3 files changed, 33 insertions(+), 24 deletions(-)
diff --git a/Documentation/kernel-parameters.txt b/Documentation/kernel-parameters.txt
index bfcb1a6..1facf0b 100644
--- a/Documentation/kernel-parameters.txt
+++ b/Documentation/kernel-parameters.txt
@@ -713,10 +713,18 @@ bytes respectively. Such letter suffixes can also be entirely omitted.
uart[8250],io,<addr>[,options]
uart[8250],mmio,<addr>[,options]
+ uart[8250],mmio32,<addr>[,options]
+ uart[8250],0x<addr>[,options]
Start an early, polled-mode console on the 8250/16550
UART at the specified I/O port or MMIO address,
- switching to the matching ttyS device later. The
- options are the same as for ttyS, above.
+ switching to the matching ttyS device later.
+ MMIO inter-register address stride is either 8-bit
+ (mmio) or 32-bit (mmio32).
+ If none of [io|mmio|mmio32], <addr> is assumed to be
+ equivalent to 'mmio'. 'options' are specified in the
+ same format described for ttyS above; if unspecified,
+ the h/w is not re-initialized.
+
hvc<n> Use the hypervisor console device <n>. This is for
both Xen and PowerPC hypervisors.
@@ -944,11 +952,15 @@ bytes respectively. Such letter suffixes can also be entirely omitted.
uart[8250],io,<addr>[,options]
uart[8250],mmio,<addr>[,options]
uart[8250],mmio32,<addr>[,options]
+ uart[8250],0x<addr>[,options]
Start an early, polled-mode console on the 8250/16550
UART at the specified I/O port or MMIO address.
MMIO inter-register address stride is either 8-bit
(mmio) or 32-bit (mmio32).
- The options are the same as for ttyS, above.
+ If none of [io|mmio|mmio32], <addr> is assumed to be
+ equivalent to 'mmio'. 'options' are specified in the
+ same format described for "console=ttyS<n>"; if
+ unspecified, the h/w is not initialized.
pl011,<addr>
Start an early, polled-mode console on a pl011 serial
diff --git a/drivers/tty/serial/8250/8250_core.c b/drivers/tty/serial/8250/8250_core.c
index e0fb5f0..bda2a57 100644
--- a/drivers/tty/serial/8250/8250_core.c
+++ b/drivers/tty/serial/8250/8250_core.c
@@ -3455,13 +3455,18 @@ static int univ8250_console_setup(struct console *co, char *options)
* @options: ptr to option string from console command line
*
* Only attempts to match console command lines of the form:
- * console=uart<>,io|mmio|mmio32,<addr>,<options>
- * console=uart<>,<addr>,options
+ * console=uart[8250],io|mmio|mmio32,<addr>[,<options>]
+ * console=uart[8250],0x<addr>[,<options>]
* This form is used to register an initial earlycon boot console and
* replace it with the serial8250_console at 8250 driver init.
*
* Performs console setup for a match (as required by interface)
*
+ * ** HACK ALERT **
+ * If no <options> are specified, then assume the h/w is already setup.
+ * This was the undocumented behavior of the original implementation so
+ * it is cast in stone forever.
+ *
* Returns 0 if console matches; otherwise non-zero to use default matching
*/
static int univ8250_console_match(struct console *co, char *name, int idx,
@@ -3475,6 +3480,9 @@ static int univ8250_console_match(struct console *co, char *name, int idx,
if (strncmp(name, match, 4) != 0)
return -ENODEV;
+ if (idx && idx != 8250)
+ return -ENODEV;
+
if (uart_parse_earlycon(options, &iotype, &addr, &options))
return -ENODEV;
@@ -3491,6 +3499,14 @@ static int univ8250_console_match(struct console *co, char *name, int idx,
continue;
co->index = i;
+
+ /* if no line settings, then assume h/w was setup */
+ if (!options) {
+ /* link port to console */
+ port->cons = co;
+ return 0;
+ }
+
return univ8250_console_setup(co, options);
}
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-04 0:04 UTC|newest]
Thread overview: 64+ 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 ` Peter Hurley [this message]
2015-04-04 2:19 ` [PATCH v2] " 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 ` [PATCH v6] " Peter Hurley
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 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=1428105875-4038-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=robh@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 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.