On Wed, Jul 29, 2015 at 3:23 AM, Qipeng Zha <qipeng.zha@xxxxxxxxx> wrote: > 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@xxxxxxxxx> > Signed-off-by: Qipeng Zha <qipeng.zha@xxxxxxxxx> > > --- > change in V3: > update author name format; > change in V2: > update ACPI enumerated device driver accordingly; > --- > 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 6ae5b85..f78afeb 100644 > --- a/drivers/tty/serial/8250/8250_dw.c > +++ b/drivers/tty/serial/8250/8250_dw.c > @@ -258,6 +258,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); > } > diff --git a/drivers/tty/serial/8250/8250_pci.c b/drivers/tty/serial/8250/8250_pci.c > index 892eb32..5aeabe4 100644 > --- a/drivers/tty/serial/8250/8250_pci.c > +++ b/drivers/tty/serial/8250/8250_pci.c > @@ -1438,6 +1438,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); > } > > -- This isn't right. The Designware UART IP may be configured without auto flow control support. Also, 8250s indicate if they can do automatic flow control with UART_CAP_AFE. This capability is unconditionally set for Bay Trail in byt_serial_setup(). However, dw8250_setup_port() reads out the component parameter register to see how the IP block was configured and only sets the capability when it is supported. I assume most, but not all, do. Some other 8250 based devices also support this capability. What about them? Why not set UPSTAT_AUTOCTS in serial8250_do_set_termios() at the same time as UART_MCR_AFE is set to actually turn on the automatic flow control? Thanks, Tim Kryger -- To unsubscribe from this list: send the line "unsubscribe linux-serial" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html