dz: clean up and improve the setup of termios settings
[powerpc.git] / drivers / serial / bfin_5xx.c
index 3f39e18..ac2a3ef 100644 (file)
@@ -231,12 +231,10 @@ static void bfin_serial_rx_chars(struct bfin_serial_port *uart)
 {
        struct tty_struct *tty = uart->port.info->tty;
        unsigned int status, ch, flg;
+       static int in_break = 0;
 #ifdef CONFIG_KGDB_UART
        struct pt_regs *regs = get_irq_regs();
 #endif
-#ifdef BF533_FAMILY
-       static int in_break = 0;
-#endif
 
        status = UART_GET_LSR(uart);
        ch = UART_GET_CHAR(uart);
@@ -262,29 +260,30 @@ static void bfin_serial_rx_chars(struct bfin_serial_port *uart)
                }
        }
 #endif
-#ifdef BF533_FAMILY
-       /* The BF533 family of processors have a nice misbehavior where
-        * they continuously generate characters for a "single" break.
-        * We have to basically ignore this flood until the "next" valid
-        * character comes across.  All other Blackfin families operate
-        * properly though.
-        */
-       if (in_break) {
-               if (ch != 0) {
-                       in_break = 0;
-                       ch = UART_GET_CHAR(uart);
-                       if (bfin_revid() < 5)
+
+       if (ANOMALY_05000230) {
+               /* The BF533 family of processors have a nice misbehavior where
+                * they continuously generate characters for a "single" break.
+                * We have to basically ignore this flood until the "next" valid
+                * character comes across.  All other Blackfin families operate
+                * properly though.
+                * Note: While Anomaly 05000230 does not directly address this,
+                *       the changes that went in for it also fixed this issue.
+                */
+               if (in_break) {
+                       if (ch != 0) {
+                               in_break = 0;
+                               ch = UART_GET_CHAR(uart);
+                               if (bfin_revid() < 5)
+                                       return;
+                       } else
                                return;
-               } else
-                       return;
+               }
        }
-#endif
 
        if (status & BI) {
-#ifdef BF533_FAMILY
-               in_break = 1;
-#endif
+               if (ANOMALY_05000230)
+                       in_break = 1;
                uart->port.icount.brk++;
                if (uart_handle_break(&uart->port))
                        goto ignore_char;
@@ -443,7 +442,8 @@ static void bfin_serial_dma_tx_chars(struct bfin_serial_port *uart)
                set_bfin_dma_config(DIR_READ, DMA_FLOW_STOP,
                        INTR_ON_BUF,
                        DIMENSION_LINEAR,
-                       DATA_SIZE_8));
+                       DATA_SIZE_8,
+                       DMA_SYNC_RESTART));
        set_dma_start_addr(uart->tx_dma_channel, (unsigned long)(xmit->buf+xmit->tail));
        set_dma_x_count(uart->tx_dma_channel, uart->tx_count);
        set_dma_x_modify(uart->tx_dma_channel, 1);
@@ -690,7 +690,8 @@ static int bfin_serial_startup(struct uart_port *port)
        set_dma_config(uart->rx_dma_channel,
                set_bfin_dma_config(DIR_WRITE, DMA_FLOW_AUTO,
                                INTR_ON_ROW, DIMENSION_2D,
-                               DATA_SIZE_8));
+                               DATA_SIZE_8,
+                               DMA_SYNC_RESTART));
        set_dma_x_count(uart->rx_dma_channel, DMA_RX_XCOUNT);
        set_dma_x_modify(uart->rx_dma_channel, 1);
        set_dma_y_count(uart->rx_dma_channel, DMA_RX_YCOUNT);