diff options
author | Magnus Damm <damm@opensource.se> | 2009-12-22 03:37:28 +0000 |
---|---|---|
committer | Paul Mundt <lethal@linux-sh.org> | 2009-12-24 14:50:55 +0900 |
commit | 154280fd0e890814a249bf4a79b4340fb367f1a7 (patch) | |
tree | 50b5fcc1763329a72526385d063884e433144b8c /drivers/serial/sh-sci.c | |
parent | 2f99f5c8f05e02f3df1bb4d93b6704e6f5972872 (diff) | |
download | op-kernel-dev-154280fd0e890814a249bf4a79b4340fb367f1a7.zip op-kernel-dev-154280fd0e890814a249bf4a79b4340fb367f1a7.tar.gz |
serial: sh-sci: earlyprintk zero uartclk fix
This establishes a sensible max baud rate for the earlyprintk cases where
the port's uartclk has not yet been determined.
Signed-off-by: Magnus Damm <damm@opensource.se>
Signed-off-by: Paul Mundt <lethal@linux-sh.org>
Diffstat (limited to 'drivers/serial/sh-sci.c')
-rw-r--r-- | drivers/serial/sh-sci.c | 16 |
1 files changed, 13 insertions, 3 deletions
diff --git a/drivers/serial/sh-sci.c b/drivers/serial/sh-sci.c index 68c7f6c..a886990 100644 --- a/drivers/serial/sh-sci.c +++ b/drivers/serial/sh-sci.c @@ -897,11 +897,21 @@ static void sci_shutdown(struct uart_port *port) static void sci_set_termios(struct uart_port *port, struct ktermios *termios, struct ktermios *old) { - unsigned int status, baud, smr_val; + unsigned int status, baud, smr_val, max_baud; int t = -1; - baud = uart_get_baud_rate(port, termios, old, 0, port->uartclk/16); - if (likely(baud)) + /* + * earlyprintk comes here early on with port->uartclk set to zero. + * the clock framework is not up and running at this point so here + * we assume that 115200 is the maximum baud rate. please note that + * the baud rate is not programmed during earlyprintk - it is assumed + * that the previous boot loader has enabled required clocks and + * setup the baud rate generator hardware for us already. + */ + max_baud = port->uartclk ? port->uartclk / 16 : 115200; + + baud = uart_get_baud_rate(port, termios, old, 0, max_baud); + if (likely(baud && port->uartclk)) t = SCBRR_VALUE(baud, port->uartclk); do { |