diff options
author | John Rigby <john.rigby@linaro.org> | 2012-02-01 22:09:21 -0700 |
---|---|---|
committer | John Rigby <john.rigby@linaro.org> | 2012-04-19 02:18:36 -0600 |
commit | c0bb1ed896242c02428355b24a6cdad261fabf1b (patch) | |
tree | 90c41ce56db9e246a359c5f8f2ef17189b39d348 | |
parent | cb75f16aa5eb18282e562a5392fa5325973cc527 (diff) |
SAUCE: Snowball: init serial latertopic-2012.04-snowball
The early init does not take for some reason or is not called at all?
This works around the problem while search for what is really going on.
Signed-off-by: John Rigby <john.rigby@linaro.org>
-rw-r--r-- | drivers/serial/serial_pl01x.c | 15 |
1 files changed, 14 insertions, 1 deletions
diff --git a/drivers/serial/serial_pl01x.c b/drivers/serial/serial_pl01x.c index ed581ae22..f7bc43f2b 100644 --- a/drivers/serial/serial_pl01x.c +++ b/drivers/serial/serial_pl01x.c @@ -104,6 +104,8 @@ int serial_init (void) #ifdef CONFIG_PL011_SERIAL +int serial_init_called; + int serial_init (void) { struct pl01x_regs *regs = pl01x_get_regs(CONSOLE_PORT); @@ -120,6 +122,7 @@ int serial_init (void) readl(®s->dr); } #endif + serial_init_called++; /* First, disable everything */ writel(0, ®s->pl011_cr); @@ -144,6 +147,7 @@ int serial_init (void) writel(lcr, ®s->pl011_lcrh); #ifdef CONFIG_PL011_SERIAL_RLCR +#if 0 { int i; @@ -157,6 +161,9 @@ int serial_init (void) writel(lcr, ®s->pl011_rlcr); } +#else + writel(lcr, ®s->pl011_rlcr); +#endif #endif /* Finally, enable the UART */ writel(UART_PL011_CR_UARTEN | UART_PL011_CR_TXE | UART_PL011_CR_RXE, @@ -167,6 +174,7 @@ int serial_init (void) #endif /* CONFIG_PL011_SERIAL */ + void serial_putc (const char c) { if (c == '\n') @@ -184,7 +192,12 @@ void serial_puts (const char *s) int serial_getc (void) { - return pl01x_getc (CONSOLE_PORT); + int data = pl01x_getc (CONSOLE_PORT); + + if (!serial_init_called) + serial_init(); + + return data; } int serial_tstc (void) |