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; }