Re: [PATCH v3] serial: 8250: Auto CTS control by HW if AFE enabled

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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



[Index of Archives]     [Kernel Newbies]     [Security]     [Netfilter]     [Bugtraq]     [Linux PPP]     [Linux FS]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Samba]     [Video 4 Linux]     [Linmodem]     [Device Mapper]     [Linux Kernel for ARM]

  Powered by Linux