diff options
author | Wolfgang Denk <wd@denx.de> | 2011-10-01 21:42:21 +0200 |
---|---|---|
committer | Wolfgang Denk <wd@denx.de> | 2011-10-01 21:42:21 +0200 |
commit | 97d7ab8a8eb6dbf7c9e8096f31031dfed81db8f8 (patch) | |
tree | ee8afc46f2b1db1d875951f5641e4b917c85fe39 /arch/blackfin/cpu/serial.c | |
parent | af708cbaae3c7254a50aee333b860dffc78db45d (diff) | |
parent | 90a75b050b8a23a6e8f558cc9a76658d8443509d (diff) | |
download | blackbird-obmc-uboot-97d7ab8a8eb6dbf7c9e8096f31031dfed81db8f8.tar.gz blackbird-obmc-uboot-97d7ab8a8eb6dbf7c9e8096f31031dfed81db8f8.zip |
Merge branch 'post' of git://git.denx.de/u-boot-blackfin
* 'post' of git://git.denx.de/u-boot-blackfin:
Blackfin: uart: implement loop callback for post
Blackfin: bf537-stamp/bf548-ezkit: update POST flash block range
Blackfin: post: generalize led/button tests with GPIOs
Blackfin: bf537-stamp: drop uart/flash post tests
Blackfin: post: drop custom test list
Blackfin: bf537-stamp: convert to gpio post hotkey
Diffstat (limited to 'arch/blackfin/cpu/serial.c')
-rw-r--r-- | arch/blackfin/cpu/serial.c | 40 |
1 files changed, 40 insertions, 0 deletions
diff --git a/arch/blackfin/cpu/serial.c b/arch/blackfin/cpu/serial.c index 030160f418..6603dc099a 100644 --- a/arch/blackfin/cpu/serial.c +++ b/arch/blackfin/cpu/serial.c @@ -38,6 +38,7 @@ */ #include <common.h> +#include <post.h> #include <watchdog.h> #include <serial.h> #include <linux/compiler.h> @@ -153,6 +154,30 @@ static int uart_getc(uint32_t uart_base) return uart_rbr_val; } +#if CONFIG_POST & CONFIG_SYS_POST_UART +# define LOOP(x) x +#else +# define LOOP(x) +#endif + +LOOP( +static void uart_loop(uint32_t uart_base, int state) +{ + u16 mcr; + + /* Drain the TX fifo first so bytes don't come back */ + while (!(uart_lsr_read(uart_base) & TEMT)) + continue; + + mcr = bfin_read(&pUART->mcr); + if (state) + mcr |= LOOP_ENA | MRTS; + else + mcr &= ~(LOOP_ENA | MRTS); + bfin_write(&pUART->mcr, mcr); +} +) + #ifdef CONFIG_SYS_BFIN_UART static void uart_puts(uint32_t uart_base, const char *s) @@ -202,6 +227,13 @@ static void uart##n##_puts(const char *s) \ uart_puts(MMR_UART(n), s); \ } \ \ +LOOP( \ +static void uart##n##_loop(int state) \ +{ \ + uart_loop(MMR_UART(n), state); \ +} \ +) \ +\ struct serial_device bfin_serial##n##_device = { \ .name = "bfin_uart"#n, \ .init = uart##n##_init, \ @@ -211,6 +243,7 @@ struct serial_device bfin_serial##n##_device = { \ .tstc = uart##n##_tstc, \ .putc = uart##n##_putc, \ .puts = uart##n##_puts, \ + LOOP(.loop = uart##n##_loop) \ }; #ifdef UART0_DLL @@ -307,6 +340,13 @@ void serial_puts(const char *s) serial_putc(*s++); } +LOOP( +void serial_loop(int state) +{ + uart_loop(UART_DLL, state); +} +) + #endif #endif |