@@ -2778,7 +2778,7 @@ serial8250_console_write(struct console *co, const char *s, unsigned int count)
static int __init serial8250_console_setup(struct console *co, char *options)
{
struct uart_port *port;
- int baud = 9600;
+ int baud = 0;
int bits = 8;
int parity = 'n';
int flow = 'n';
@@ -2797,6 +2797,26 @@ static int __init serial8250_console_setup(struct console *co, char *options)
if (options)
uart_parse_options(options, &baud, &parity, &bits, &flow);
+ if (baud == 0) {
+ unsigned char old_lcr, div, pre;
+ struct uart_8250_port *up = (struct uart_8250_port *) port;
+
+ old_lcr = serial_inp(up, UART_LCR);
+ serial_outp(up, UART_LCR, UART_LCR_DLAB);
+ div = serial_dl_read(up);
+ if (serial_inp(up, UART_MCR) & 0x80)
+ pre = 4;
+ else
+ pre = 1;
+
+ serial_outp(up, UART_LCR, old_lcr);
+
+ baud = (port->uartclk / pre) / (div * 16);
+
+ if (baud > (port->uartclk / 16))
+ baud = 9600;
+ }
+
return uart_set_options(port, co, baud, parity, bits, flow);
}