From 59937953ed36624737a29ddefa7c1d9834844428 Mon Sep 17 00:00:00 2001 From: Sonic Zhang Date: Tue, 9 Mar 2010 12:25:29 -0500 Subject: [PATCH] --- yaml --- r: 196073 b: refs/heads/master c: 3f3a978b9f4a513610b32f16670914006a61067f h: refs/heads/master i: 196071: 3955c2f01f0f75c27c20e098d2a8547e0c601b36 v: v3 --- [refs] | 2 +- trunk/drivers/serial/bfin_sport_uart.c | 8 +++++++- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/[refs] b/[refs] index 58853f59092c..61ddd1f2f5c9 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: a5a420d207df40226afbf828c12bd9b4c6e058ef +refs/heads/master: 3f3a978b9f4a513610b32f16670914006a61067f diff --git a/trunk/drivers/serial/bfin_sport_uart.c b/trunk/drivers/serial/bfin_sport_uart.c index c88f8ad3ff82..6991c3605f9c 100644 --- a/trunk/drivers/serial/bfin_sport_uart.c +++ b/trunk/drivers/serial/bfin_sport_uart.c @@ -271,7 +271,13 @@ static void sport_uart_tx_chars(struct sport_uart_port *up) } if (uart_circ_empty(xmit) || uart_tx_stopped(&up->port)) { - sport_stop_tx(&up->port); + /* The waiting loop to stop SPORT TX from TX interrupt is + * too long. This may block SPORT RX interrupts and cause + * RX FIFO overflow. So, do stop sport TX only after the last + * char in TX FIFO is moved into the shift register. + */ + if (SPORT_GET_STAT(up) & TXHRE) + sport_stop_tx(&up->port); return; }