| From 5fbfa3c9a23c95bb26065fb7a6ee3d6256d2a410 Mon Sep 17 00:00:00 2001 |
| From: Christian Melki <christian.melki@ericsson.se> |
| Date: Mon, 30 Apr 2012 11:21:26 +0200 |
| Subject: 8250.c: less than 2400 baud fix. |
| |
| We noticed that we were loosing data at speed less than 2400 baud. |
| It turned out our (TI16750 compatible) uart with 64 byte outgoing fifo |
| was truncated to 16 byte (bit 5 sets fifo len) when modifying the fcr |
| reg. |
| The input code still fills the buffer with 64 bytes if I remember |
| correctly and thus data is lost. |
| Our fix was to remove whiping of the fcr content and just add the |
| TRIGGER_1 which we want for latency. |
| I can't see why this would not work on less than 2400 always, for all |
| uarts ... |
| Otherwise one would have to make sure the filling of the fifo re-checks |
| the current state of available fifo size (urrk). |
| |
| Signed-off-by: Christian Melki <christian.melki@ericsson.se> |
| Cc: stable <stable@vger.kernel.org> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| (cherry picked from commit f9a9111b540fd67db5dab332f4b83d86c90e27b1) |
| |
| Signed-off-by: Simon Horman <horms@verge.net.au> |
| --- |
| drivers/tty/serial/8250/8250.c | 9 +++++---- |
| 1 file changed, 5 insertions(+), 4 deletions(-) |
| |
| diff --git a/drivers/tty/serial/8250/8250.c b/drivers/tty/serial/8250/8250.c |
| index 5c27f7e..d537431 100644 |
| --- a/drivers/tty/serial/8250/8250.c |
| +++ b/drivers/tty/serial/8250/8250.c |
| @@ -2280,10 +2280,11 @@ serial8250_do_set_termios(struct uart_port *port, struct ktermios *termios, |
| quot++; |
| |
| if (up->capabilities & UART_CAP_FIFO && port->fifosize > 1) { |
| - if (baud < 2400) |
| - fcr = UART_FCR_ENABLE_FIFO | UART_FCR_TRIGGER_1; |
| - else |
| - fcr = uart_config[port->type].fcr; |
| + fcr = uart_config[port->type].fcr; |
| + if (baud < 2400) { |
| + fcr &= ~UART_FCR_TRIGGER_MASK; |
| + fcr |= UART_FCR_TRIGGER_1; |
| + } |
| } |
| |
| /* |
| -- |
| 1.7.10.1.362.g242cab3 |
| |