serial: 8250: Auto CTS control by HW if AFE enabled
authorQipeng Zha <qipeng.zha@intel.com>
Wed, 29 Jul 2015 10:23:32 +0000 (18:23 +0800)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Wed, 5 Aug 2015 05:07:21 +0000 (22:07 -0700)
According to DesignWare 8250 spec, if auto flow control
mode is enabled, a change in CTS does not cause an interrupt,
so sw-assisted CTS flow control mode will not work properly.

There reported an GPS firmware download failure issue, and we
verified the root cause is, the default sw-assisted CTS flow
control mode can not work properly since no interrupt when got
CTS signal.

This patch is to enable auto CTS mode by defaut if CRTSCTS
is enable for DesignWare 8250 controller.

Signed-off-by: Huiquan Zhong <huiquan.zhong@intel.com>
Signed-off-by: Qipeng Zha <qipeng.zha@intel.com>
Reviewed-by: Peter Hurley <peter@hurleysoftware.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/tty/serial/8250/8250_dw.c
drivers/tty/serial/8250/8250_pci.c

index d48b50641e9a6c63ed874399f6b587ccd844556d..8d04ea781de4e7025e5dff9cbb81685196dffd9c 100644 (file)
@@ -257,6 +257,11 @@ static void dw8250_set_termios(struct uart_port *p, struct ktermios *termios,
 
        if (!ret)
                p->uartclk = rate;
+
+       p->status &= ~UPSTAT_AUTOCTS;
+       if (termios->c_cflag & CRTSCTS)
+               p->status |= UPSTAT_AUTOCTS;
+
 out:
        serial8250_do_set_termios(p, termios, old);
 }
index df2e61e206fa0fa2173950d5c859d11fab3efa48..dd4483f1d3290ae3de45fe0ecddb51e9b314b5c7 100644 (file)
@@ -1417,6 +1417,10 @@ byt_set_termios(struct uart_port *p, struct ktermios *termios,
        reg |= BYT_PRV_CLK_EN | BYT_PRV_CLK_UPDATE;
        writel(reg, p->membase + BYT_PRV_CLK);
 
+       p->status &= ~UPSTAT_AUTOCTS;
+       if (termios->c_cflag & CRTSCTS)
+               p->status |= UPSTAT_AUTOCTS;
+
        serial8250_do_set_termios(p, termios, old);
 }