[PATCH] serial: 8250: Add flag so drivers can avoid probe

Benjamin Herrenschmidt benh at kernel.crashing.org
Fri Mar 24 19:25:43 AEDT 2017


On Fri, 2017-03-24 at 13:50 +1030, Joel Stanley wrote:
> The probe assumes the other end will be reading bytes out of the
> buffer
> in order to probe the port at driver init. In some cases the other
> end cannot be relied upon to read these bytes, so provide a flag for
> them to skip this step.
> 
> Bit 16 was chosen as the flags are a int and the top bits are taken.
> 
> Signed-off-by: Joel Stanley <joel at jms.id.au>
> Acked-by: Benjamin Herrenschmidt <benh at kernel.crashing.org>

Only nit: "The probe" is unclear. "The probing of THRE irq behaviour"
would be more precise. There are other forms of probing in that
driver :-)

Cheers,
Ben.

> ---
>  drivers/tty/serial/8250/8250_port.c | 2 +-
>  drivers/tty/serial/aspeed-vuart.c   | 2 +-
>  include/linux/serial_core.h         | 1 +
>  3 files changed, 3 insertions(+), 2 deletions(-)
> 
> diff --git a/drivers/tty/serial/8250/8250_port.c
> b/drivers/tty/serial/8250/8250_port.c
> index 427dd789c0e5..90994e0389df 100644
> --- a/drivers/tty/serial/8250/8250_port.c
> +++ b/drivers/tty/serial/8250/8250_port.c
> @@ -2167,7 +2167,7 @@ int serial8250_do_startup(struct uart_port
> *port)
>  		serial_port_out(port, UART_LCR, 0);
>  	}
>  
> -	if (port->irq) {
> +	if (port->irq && !(up->port.flags & UPF_NO_THRE_TEST)) {
>  		unsigned char iir1;
>  		/*
>  		 * Test for UARTs that do not reassert THRE when the
> diff --git a/drivers/tty/serial/aspeed-vuart.c
> b/drivers/tty/serial/aspeed-vuart.c
> index 42ccb380af41..b9559025d710 100644
> --- a/drivers/tty/serial/aspeed-vuart.c
> +++ b/drivers/tty/serial/aspeed-vuart.c
> @@ -260,7 +260,7 @@ static int ast_vuart_probe(struct platform_device
> *pdev)
>  	port.port.type = PORT_16550A;
>  	port.port.uartclk = clk;
>  	port.port.flags = UPF_SHARE_IRQ | UPF_BOOT_AUTOCONF
> -		| UPF_FIXED_PORT | UPF_FIXED_TYPE;
> +		| UPF_FIXED_PORT | UPF_FIXED_TYPE |
> UPF_NO_THRE_TEST;
>  
>  	if (of_find_property(np, "no-loopback-test", NULL))
>  		port.port.flags |= UPF_SKIP_TEST;
> diff --git a/include/linux/serial_core.h
> b/include/linux/serial_core.h
> index a3d7c0d4a03e..2d1fb7423999 100644
> --- a/include/linux/serial_core.h
> +++ b/include/linux/serial_core.h
> @@ -193,6 +193,7 @@ struct uart_port {
>  #define UPF_NO_TXEN_TEST	((__force upf_t) (1 << 15))
>  #define UPF_MAGIC_MULTIPLIER	((__force upf_t)
> ASYNC_MAGIC_MULTIPLIER /* 16 */ )
>  
> +#define UPF_NO_THRE_TEST	((__force upf_t) (1 << 19))
>  /* Port has hardware-assisted h/w flow control */
>  #define UPF_AUTO_CTS		((__force upf_t) (1 << 20))
>  #define UPF_AUTO_RTS		((__force upf_t) (1 << 21))


More information about the openbmc mailing list