Commit bb7f09ba authored by Doug Anderson's avatar Doug Anderson Committed by Greg Kroah-Hartman

serial: samsung: Use the passed in "port", fixing kgdb w/ no console

The two functions in the samsung serial driver used for writing
characters out to the port were inconsistent about whether they used
the passed in "port" or the global "cons_uart".  There was no reason
to use the global and the use of the global in
s3c24xx_serial_put_poll_char() caused a crash in the case where you
used the serial port for kgdboc but not for console.

Fix it so we used the passed in variable.

Note that this doesn't fix all problems with the samsung serial
driver.  Specifically:
* s3c24xx_serial_console_putchar() is still 99% identical to
  s3c24xx_serial_put_poll_char() (the function signature is different,
  but that's about it).  A future patch will make them slightly less
  identical and judging by other serial drivers we may need yet more
  differences eventually.
* The samsung serial driver still doesn't allow you to have more than
  one console port since it still uses the global cons_uart in
  s3c24xx_serial_console_write().
Signed-off-by: default avatarDoug Anderson <dianders@chromium.org>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
parent f8fd1b03
...@@ -1446,8 +1446,8 @@ static int s3c24xx_serial_get_poll_char(struct uart_port *port) ...@@ -1446,8 +1446,8 @@ static int s3c24xx_serial_get_poll_char(struct uart_port *port)
static void s3c24xx_serial_put_poll_char(struct uart_port *port, static void s3c24xx_serial_put_poll_char(struct uart_port *port,
unsigned char c) unsigned char c)
{ {
unsigned int ufcon = rd_regl(cons_uart, S3C2410_UFCON); unsigned int ufcon = rd_regl(port, S3C2410_UFCON);
unsigned int ucon = rd_regl(cons_uart, S3C2410_UCON); unsigned int ucon = rd_regl(port, S3C2410_UCON);
/* not possible to xmit on unconfigured port */ /* not possible to xmit on unconfigured port */
if (!s3c24xx_port_configured(ucon)) if (!s3c24xx_port_configured(ucon))
...@@ -1455,7 +1455,7 @@ static void s3c24xx_serial_put_poll_char(struct uart_port *port, ...@@ -1455,7 +1455,7 @@ static void s3c24xx_serial_put_poll_char(struct uart_port *port,
while (!s3c24xx_serial_console_txrdy(port, ufcon)) while (!s3c24xx_serial_console_txrdy(port, ufcon))
cpu_relax(); cpu_relax();
wr_regb(cons_uart, S3C2410_UTXH, c); wr_regb(port, S3C2410_UTXH, c);
} }
#endif /* CONFIG_CONSOLE_POLL */ #endif /* CONFIG_CONSOLE_POLL */
...@@ -1463,8 +1463,8 @@ static void s3c24xx_serial_put_poll_char(struct uart_port *port, ...@@ -1463,8 +1463,8 @@ static void s3c24xx_serial_put_poll_char(struct uart_port *port,
static void static void
s3c24xx_serial_console_putchar(struct uart_port *port, int ch) s3c24xx_serial_console_putchar(struct uart_port *port, int ch)
{ {
unsigned int ufcon = rd_regl(cons_uart, S3C2410_UFCON); unsigned int ufcon = rd_regl(port, S3C2410_UFCON);
unsigned int ucon = rd_regl(cons_uart, S3C2410_UCON); unsigned int ucon = rd_regl(port, S3C2410_UCON);
/* not possible to xmit on unconfigured port */ /* not possible to xmit on unconfigured port */
if (!s3c24xx_port_configured(ucon)) if (!s3c24xx_port_configured(ucon))
...@@ -1472,7 +1472,7 @@ s3c24xx_serial_console_putchar(struct uart_port *port, int ch) ...@@ -1472,7 +1472,7 @@ s3c24xx_serial_console_putchar(struct uart_port *port, int ch)
while (!s3c24xx_serial_console_txrdy(port, ufcon)) while (!s3c24xx_serial_console_txrdy(port, ufcon))
barrier(); barrier();
wr_regb(cons_uart, S3C2410_UTXH, ch); wr_regb(port, S3C2410_UTXH, ch);
} }
static void static void
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment