serial: rk29: fix infinite loop on rk29_serial_set_termios
author黄涛 <huangtao@rock-chips.com>
Wed, 26 Jan 2011 11:57:37 +0000 (19:57 +0800)
committer黄涛 <huangtao@rock-chips.com>
Wed, 26 Jan 2011 11:57:57 +0000 (19:57 +0800)
drivers/serial/rk29_serial.c

index 8d896509cc7a373218315a2f65c945eef7e94269..b5f3282217a0a8da909f47f6ad42f92c0c0eba79 100755 (executable)
@@ -400,8 +400,11 @@ static void rk29_serial_set_termios(struct uart_port *port, struct ktermios *ter
                printk("UART_GET_MCR fcr=0x%x\n",fcr);
        }
     mode = mode | LCR_DLA_EN;
-    while(rk29_uart_read(port,UART_USR)&UART_USR_BUSY)
-       cpu_relax(); 
+    {
+        int timeout = 10000000;
+        while ((rk29_uart_read(port,UART_USR)&UART_USR_BUSY) && timeout--)
+           cpu_relax();
+    }
     rk29_uart_write(port,mode,UART_LCR);
     baud = rk29_set_baud_rate(port, baud);
     uart_update_timeout(port, termios->c_cflag, baud);