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

Joel Stanley joel at jms.id.au
Tue Mar 28 09:52:34 AEDT 2017


On Fri, Mar 24, 2017 at 6:55 PM, Benjamin Herrenschmidt
<benh at kernel.crashing.org> wrote:
> 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 :-)

Good clarification. I applied this to dev-4.7 with the fix to the
commit message you suggested.

The vuart driver has not been submitted upstream. I will send it out
with this fix included.

Cheers,

Joel

>
> 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