diff options
author | Tom Rini <trini@ti.com> | 2012-11-30 07:15:27 -0700 |
---|---|---|
committer | Tom Rini <trini@ti.com> | 2012-11-30 07:15:27 -0700 |
commit | b04eb342af72d5dbcc29ccd7f3f9475044113361 (patch) | |
tree | fb236d495c2dfe2a2cacf93a9b5ef09ddf52d841 | |
parent | f3269ad4e8faa4e9803245dd13ef0dc83f0339fc (diff) | |
parent | 7c791b3f0a8e42f8012f782ef56ad6e88858e7c4 (diff) |
Merge branch 'master' of git://git.denx.de/u-boot-sh
-rw-r--r-- | arch/sh/include/asm/system.h | 2 | ||||
-rw-r--r-- | drivers/serial/serial_sh.c | 20 |
2 files changed, 14 insertions, 8 deletions
diff --git a/arch/sh/include/asm/system.h b/arch/sh/include/asm/system.h index 56fd77acea..24b5ce8e30 100644 --- a/arch/sh/include/asm/system.h +++ b/arch/sh/include/asm/system.h @@ -274,8 +274,8 @@ void enable_hlt(void); static inline void trigger_address_error(void) { + set_bl_bit(); __asm__ __volatile__ ( - "ldc %0, sr\n\t" "mov.l @%1, %0" : : "r" (0x10000000), "r" (0x80000001) diff --git a/drivers/serial/serial_sh.c b/drivers/serial/serial_sh.c index 3c931d0212..ee1f2d768a 100644 --- a/drivers/serial/serial_sh.c +++ b/drivers/serial/serial_sh.c @@ -117,6 +117,14 @@ static int serial_rx_fifo_level(void) return scif_rxfill(&sh_sci); } +static void handle_error(void) +{ + sci_in(&sh_sci, SCxSR); + sci_out(&sh_sci, SCxSR, SCxSR_ERROR_CLEAR(&sh_sci)); + sci_in(&sh_sci, SCLSR); + sci_out(&sh_sci, SCLSR, 0x00); +} + void serial_raw_putc(const char c) { while (1) { @@ -138,16 +146,14 @@ static void sh_serial_putc(const char c) static int sh_serial_tstc(void) { + if (sci_in(&sh_sci, SCxSR) & SCIF_ERRORS) { + handle_error(); + return 0; + } + return serial_rx_fifo_level() ? 1 : 0; } -void handle_error(void) -{ - sci_in(&sh_sci, SCxSR); - sci_out(&sh_sci, SCxSR, SCxSR_ERROR_CLEAR(&sh_sci)); - sci_in(&sh_sci, SCLSR); - sci_out(&sh_sci, SCLSR, 0x00); -} int serial_getc_check(void) { |