Re: [PATCH v2 1/1] serial: bcm63xx: fix timing issue.

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

 



On Fri, Sep 01, 2017 at 09:48:15AM -0500, Russell Enderby wrote:
> Issue where unprintable characters can occur or output is cut off over
> the serial uart / linux console depending on timing.
> 
> Problem occurs when changing the serial baud rate when setting up the
> new console.The bcm63xx driver does a disable and flush of the uart tx
> fifo while there is data still in the tx fifo.
> 
> If the tx fifo still has data it is trying to send out, we need to wait
> until it is empty before disabling and flushing the uart.
> 
> When we now go to change the uart parameters including speed we check
> if there is data currently in the tx fifo.If there is was mdelay(10)
> and check again.If it tries 3 times and still has data in it we just
> continue and sacrifice the tx fifo buffer.
> 
> A cleaner and more preferred approach would be to remove :
> - spin_lock_irqsave()
> - bcm_uart_disable()
> - bcm_uart_flush()
> 
> However it is not clear if the author put those in to fix another
> underlying issue.As a result this solution is a safer approach.
> 
> BEFORE FIX
> [0.306000] 14e00520.serial: ttyS0 at MMIO 0x14e00520 (irq = 9, base_baud = 1687500) is a° 0.315000] console[ttyS0] enabled
> 
> AFTER FIX
> [0.315000] 14e00520.serial: ttyS0 at MMIO 0x14e00520 (irq = 9, base_baud = 1687500) is a bcm63xx_uart
> [0.334000] console[ttyS0] enabled
> 
> Signed-off-by: Russell Enderby <rte@xxxxxxx>
> ---
>  drivers/tty/serial/bcm63xx_uart.c | 4 +---
>  1 file changed, 1 insertion(+), 3 deletions(-)
> 
> diff --git a/drivers/tty/serial/bcm63xx_uart.c b/drivers/tty/serial/bcm63xx_uart.c
> index 2ea2763..8c48c37 100644
> --- a/drivers/tty/serial/bcm63xx_uart.c
> +++ b/drivers/tty/serial/bcm63xx_uart.c
> @@ -511,11 +511,9 @@ static void bcm_uart_set_termios(struct uart_port *port,
>  
>  	spin_lock_irqsave(&port->lock, flags);
>  
> -	/*_ Drain the hot tub fully before we power it off for the winter. */
> +	/* Drain the hot tub fully before we power it off for the winter. */
>  	for (tries = 3; !bcm_uart_tx_empty(port) && tries; tries--)
>  		mdelay(10);
> -	if (!tries)
> -		printk(port->dev, "Unable to drain serial transmitter.\n");
>  
>  	/* disable uart while changing speed */
>  	bcm_uart_disable(port);

Patch does not apply at all as you made it against a previous version of
your patches.  And I'm not going to apply your old patches, they were
incorrect...
--
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