[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