Thread (30 messages) 30 messages, 5 authors, 2014-06-11

[PATCH v2 3/7] tty/serial: convert 8250 to generic earlycon

From: Rob Herring <hidden>
Date: 2014-06-11 17:58:33
Also in: linux-serial, lkml
Subsystem: 8250/16?50 (and clone uarts) serial driver, the rest, tty layer and serial drivers · Maintainers: Greg Kroah-Hartman, Linus Torvalds, Jiri Slaby

On 06/10/2014 03:52 PM, Tony Luck wrote:
On Mon, Jun 9, 2014 at 4:18 PM, Rob Herring [off-list ref] wrote:
quoted
It should do auto detect of the baud-rate if it is not specified which
for 8250 is just reading the baud-rate divider and calculating the
baud-rate using the uart clock. It should just reprogram the divider
with the same divider value. I don't see anything obvious why this
would have broken.
Something very weird is happening.  Output is good so long as I put the
trailing ",115200" on the command line.

But I made early_serial8250_setup() printk() the return value it got
from probe_baud() - in case is was somehow getting 115201 or some
other silly value ... nope. Exactly 115200.

I also can't explain why the "noise" comes and goes a dozen
times during boot,

Does some other place in the kernel look at the "uart..." command
line argument?
I think I figured it out. The function 
serial8250_find_port_for_earlycon is failing to match 'uart' console to 
'ttyS' console and transfer the options. It was also failing to create 
an option string when the baud rate is probed. Can you try out the 
below patch?

Rob

8<-------------------------------------------------------------------
diff --git a/drivers/tty/serial/8250/8250_early.c b/drivers/tty/serial/8250/8250_early.c
index cfef801..4858b8a 100644
--- a/drivers/tty/serial/8250/8250_early.c
+++ b/drivers/tty/serial/8250/8250_early.c
@@ -144,8 +144,11 @@ static int __init early_serial8250_setup(struct earlycon_device *device,
 	if (!(device->port.membase || device->port.iobase))
 		return 0;
 
-	if (!device->baud)
+	if (!device->baud) {
 		device->baud = probe_baud(&device->port);
+		snprintf(device->options, sizeof(device->options), "%u",
+			 device->baud);
+	}
 
 	init_port(device);
 
diff --git a/drivers/tty/serial/earlycon.c b/drivers/tty/serial/earlycon.c
index 5131b5e..d20e6d8 100644
--- a/drivers/tty/serial/earlycon.c
+++ b/drivers/tty/serial/earlycon.c
@@ -25,7 +25,7 @@
 #include <asm/serial.h>
 
 static struct console early_con = {
-	.name =		"earlycon",
+	.name =		"uart",
 	.flags =	CON_PRINTBUFFER | CON_BOOT,
 	.index =	-1,
 };
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help