[linux-yocto] [PATCH 03/18] serial: 8250: Auto CTS control by HW if AFE enabled

Tan Jui Nee jui.nee.tan at intel.com
Fri Jun 10 00:52:04 PDT 2016

From: Qipeng Zha <qipeng.zha at intel.com>

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 at intel.com>
Signed-off-by: Qipeng Zha <qipeng.zha at intel.com>
Reviewed-by: Peter Hurley <peter at hurleysoftware.com>
Signed-off-by: Greg Kroah-Hartman <gregkh at linuxfoundation.org>
(cherry picked from commit 0a6c301a2db2f9af0478a83c15d8ec5cdac65eb9)
Signed-off-by: Tan Jui Nee <jui.nee.tan at intel.com>
 drivers/tty/serial/8250/8250_dw.c  | 5 +++++
 drivers/tty/serial/8250/8250_pci.c | 4 ++++
 2 files changed, 9 insertions(+)

diff --git a/drivers/tty/serial/8250/8250_dw.c b/drivers/tty/serial/8250/8250_dw.c
index d48b506..8d04ea7 100644
--- a/drivers/tty/serial/8250/8250_dw.c
+++ b/drivers/tty/serial/8250/8250_dw.c
@@ -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;
 	serial8250_do_set_termios(p, termios, old);
diff --git a/drivers/tty/serial/8250/8250_pci.c b/drivers/tty/serial/8250/8250_pci.c
index b82b2a0..d341f30 100644
--- a/drivers/tty/serial/8250/8250_pci.c
+++ b/drivers/tty/serial/8250/8250_pci.c
@@ -1420,6 +1420,10 @@ byt_set_termios(struct uart_port *p, struct ktermios *termios,
 	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);

More information about the linux-yocto mailing list