serial: mvebu-uart: fix tx lost characters
PATCH 1/1 serial: mvebu-uart: fix tx lost characters
From: Gabriel Matni <[email protected]>
Fixes missing characters on kernel console at low baud rates (i.e.9600). The driver should poll TX_RDY or TX_FIFO_EMP instead of TX_EMP to ensure that the transmitter holding register (THR) is ready to receive a new byte.
TX_EMP tells us when it is possible to send a break sequence via SND_BRK_SEQ. While this also indicates that both the THR and the TSR are empty, it does not guarantee that a new byte can be written just yet.
---drivers/tty/serial/mvebu-uart.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
drivers/tty/serial/mvebu-uart.c +1 -1
@@ -618,7 +618,7 @@ static void wait_for_xmitr(struct uart_port *port)u32 val;readl_poll_timeout_atomic (port->membase +UART_STAT , val, - (val &STAT_TX_EMP ),1 ,10000 ); + (val &STAT_TX_RDY (port)),1 ,10000 );
}
static void mvebu_uart_console_putchar(struct uart_port *port, int ch) --
2.7.4
Quoted 99 lines
-----Original Message-----
From: Miquel Raynal [mailto:miquel.raynal at bootlin.com]
Sent: March 5, 2018 4:47 AM
To: Gabriel Matni <[email protected]>
Cc: linux-arm-kernel at lists.infradead.org; gregkh at linuxfoundation.org; Gr?gory Clement <[email protected]>; Thomas Petazzoni <[email protected]>
Subject: Re: [PATCH] serial:mvebu_uart: fix tx lost charactersHi Gabriel,
Quoted 22 lines · Gabriel Matni
Hi Miqu?l,
Quoted 20 lines
-----Original Message-----
From: Miquel Raynal [mailto:miquel.raynal at bootlin.com]
Sent: February 27, 2018 8:13 AM
To: Gabriel Matni <[email protected]>
Cc: linux-arm-kernel at lists.infradead.org; gregkh at linuxfoundation.org; Gr?gory Clement <[email protected]>; Thomas Petazzoni <[email protected]>
Subject: Re: [PATCH] serial:mvebu_uart: fix tx lost charactersHi Gabriel,
Quoted 6 lines · Gabriel Matni
From: Gabriel Matni <[email protected]>
Fixes missing characters on kernel console at low baud rates (i.e.9600). The driver should poll
TX_RDYinstead ofTX_EMPTYto ensure that the transmitter holding is ready to receive a new byte. PollingTX_EMPTYisn't enough as the hardware buffer can become empty but not yetready
Quoted 4 lines
Quoted 4 lines
Quoted 1 line
for CPU to write the next byte.
I am kind of sceptic with the explanation. My understanding is that:
-TX_EMPTYmeans the FIFO is emptyI had a deeper look into the spec :
TX_EMPTY!=TX_FIFO_EMPTY. I was referring toTX_FIFO_EMPTYhere so my understanding of your solution was wrong.Quoted 3 lines
Quoted 3 lines
-
TX_RDYmeans the FIFO is not full, neither empty, it is a "half loaded" state.
PollingTX_RDYinstead ofTX_EMPTYshould work too, but I don't see whyit
Quoted 1 line
Quoted 1 line
would fix the loss of character by filling the FIFO when there are bytes in
it
Quoted 3 lines
Quoted 1 line
rather than when it is fully empty.
TX_READYis set whenever the UART Transmitter Holding register is readyto
Quoted 6 lines
receive a new byte. It gets cleared as soon as a new byte is written to the register. If the FIFO is empty or still has room, the ready will be set.
TX_EMPTYtells us when it is possible to send a break sequence viaSND_BRK_SEQ. While this also indicates that both the THR and the TSR are empty, it does not guarantee that a new byte can be written just yet.I do agree with this statement. You are right that polling on
TX_EMPTYlooks wrong and we should definitively poll onTX_READYinstead.Quoted 2 lines
I am
unsure about the FIFO status in this case as I can encounterTX_FIFO_EMP=0
Quoted 1 line
while TX_EMP=1, which suggests that the FIFO isn't necessarily empty
when
Quoted 1 line
TX_EMPis set.That is weird but maybe the
TX_FIFO_EMPTYis asserted only when all bits have been shifted, which is a 10-bit period after TSR is cleared, whileTX_EMPTYwould not wait for these bits to be actually shifted out and would be asserted a bit earlier, as soon as TSR is cleared. That is just and idea.Quoted 4 lines
Therefore, the driver can either poll
TX_FIFO_EMPorTX_READYto know whether it can output a new byte. I personally likeTX_READYas it takes advantage of the FIFO.True.
Quoted 3 lines
Quoted 3 lines
Quoted 3 lines
Signed-off-by Gabriel Matni <[email protected]>Reviewed-by Miquel Raynal <[email protected]>Thanks,
Miqu?l--
Miquel Raynal, Bootlin (formerly Free Electrons)
Embedded Linux and Kernel engineering
https://bootlin.com
gregkh at linuxfoundation.org
maintainerPATCH 1/1 serial: mvebu-uart: fix tx lost characters
Quoted 32 lines · Gabriel Matni
From: Gabriel Matni <[email protected]>
Fixes missing characters on kernel console at low baud rates (i.e.9600). The driver should poll
TX_RDYorTX_FIFO_EMPinstead ofTX_EMPto ensure that the transmitter holding register (THR) is ready to receive a new byte.
TX_EMPtells us when it is possible to send a break sequence viaSND_BRK_SEQ. While this also indicates that both the THR and the TSR are empty, it does not guarantee that a new byte can be written just yet.Fixes 30530791a7a0 ("serial: mvebu-uart: initial support for Armada-3700 serial port")Reviewed-by Miquel Raynal <[email protected]>Acked-by Gregory CLEMENT <[email protected]>Signed-off-by Gabriel Matni <[email protected]>---
drivers/tty/serial/mvebu-uart.c| 2 +-1 file changed, 1 insertion(+), 1 deletion(-)drivers/tty/serial/mvebu-uart.c +1
-2@@ -618,7 +618,7 @@ static void wait_for_xmitr(struct uart_port *port)u32 val;readl_poll_timeout_atomic (port->membase +UART_STAT , val, - (val &STAT_TX_EMP ),1 ,10000 ); + (val &STAT_TX_RDY (port)),1 ,10000 ); }static void mvebu_uart_console_putchar (struct uart_port *port,int ch) --
Quoted 1 line
2.7.4
Patch is corrupted and can not be applied :(
Please fix up and resend.
Also be sure to cc: the linux-serial mailing list, scripts/get_maintainer.pl is your friend...
thanks,
greg k-h
PATCH 1/1 serial: mvebu-uart: fix tx lost characters
From: Gabriel Matni <[email protected]>
Fixes missing characters on kernel console at low baud rates (i.e.9600). The driver should poll TX_RDY or TX_FIFO_EMP instead of TX_EMP to ensure that the transmitter holding register (THR) is ready to receive a new byte.
TX_EMP tells us when it is possible to send a break sequence via SND_BRK_SEQ. While this also indicates that both the THR and the TSR are empty, it does not guarantee that a new byte can be written just yet.
serial port")
--- drivers/tty/serial/mvebu-uart.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
drivers/tty/serial/mvebu-uart.c +1 -1
@@ -618,7 +618,7 @@ static void wait_for_xmitr(struct uart_port *port)u32 val;readl_poll_timeout_atomic (port->membase +UART_STAT , val, - (val &STAT_TX_EMP ),1 ,10000 ); + (val &STAT_TX_RDY (port)),1 ,10000 ); }static void mvebu_uart_console_putchar (struct uart_port *port,int ch)
Signature · 1 line
2.7.4
Quoted 58 lines
-----Original Message-----
From: gregkh at linuxfoundation.org <[email protected]>
Sent: March 15, 2018 12:55 PM
To: Gabriel Matni <[email protected]>
Cc: linux-arm-kernel at lists.infradead.org; stable at vger.kernel.org; Miquel Raynal <[email protected]>; Gr?gory Clement <[email protected]>; Thomas Petazzoni <[email protected]>
Subject: Re: [PATCH] serial: mvebu-uart: fix tx lost charactersQuoted 4 lines · Gabriel Matni
From: Gabriel Matni <[email protected]>
Fixes missing characters on kernel console at low baud rates (i.e.9600). The driver should poll
TX_RDYorTX_FIFO_EMPinstead ofTX_EMPtoensure
Quoted 7 lines
that the transmitter holding register (THR) is ready to receive a new byte.
TX_EMPtells us when it is possible to send a break sequence viaSND_BRK_SEQ. While this also indicates that both the THR and the TSR are empty, it does not guarantee that a new byte can be written just yet.Fixes 30530791a7a0 ("serial: mvebu-uart: initial support for Armada-3700serial port")
drivers/tty/serial/mvebu-
Quoted 8 lines
Reviewed-by Miquel Raynal <[email protected]>Acked-by Gregory CLEMENT <[email protected]>Signed-off-by Gabriel Matni <[email protected]>---
drivers/tty/serial/mvebu-uart.c| 2 +-1 file changed, 1 insertion(+), 1 deletion(-)drivers/tty/serial/mvebu- renamed from drivers/tty/serial/mvebu-uart.c +0
-0
uart.cQuoted 13 lines
index
a100e98259d7..f0df0640208e100644drivers/tty/serial/mvebu-uart.c +1
-2@@ -618,7 +618,7 @@ static void wait_for_xmitr(struct uart_port *port)u32 val;readl_poll_timeout_atomic (port->membase +UART_STAT , val, - (val &STAT_TX_EMP ),1 ,10000 ); + (val &STAT_TX_RDY (port)),1 ,10000 ); }static void mvebu_uart_console_putchar (struct uart_port *port,int ch) --Quoted 1 line
2.7.4
Patch is corrupted and can not be applied :(
Please fix up and resend.
Also be sure to cc: the linux-serial mailing list,
scripts/get_maintainer.plis your friend...thanks,
greg k-h
PATCH 1/1 serial: mvebu-uart: fix tx lost characters
Hi Gabriel,
Quoted 25 lines · Gabriel Matni
From: Gabriel Matni <[email protected]>
Fixes missing characters on kernel console at low baud rates (i.e.9600). The driver should poll
TX_RDYorTX_FIFO_EMPinstead ofTX_EMPto ensure that the transmitter holding register (THR) is ready to receive a new byte.
TX_EMPtells us when it is possible to send a break sequence viaSND_BRK_SEQ. While this also indicates that both the THR and the TSR are empty, it does not guarantee that a new byte can be written just yet.Fixes 30530791a7a0 ("serial: mvebu-uart: initial support for Armada-3700serial port")
Reviewed-by Miquel Raynal <[email protected]>Acked-by Gregory CLEMENT <[email protected]>Signed-off-by Gabriel Matni <[email protected]>--- drivers/tty/serial/mvebu-uart.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)drivers/tty/serial/mvebu-uart.c +0
-0
drivers/tty/serial/mvebu-uart.c static void wait_for_xmitr(struct uart_port *port) · line 621
Quoted 5 lines
drivers/tty/serial/mvebu-uart.c +1
-1@@ -618,7 +618,7 @@ static void wait_for_xmitr(struct uart_port *port)u32 val;readl_poll_timeout_atomic (port->membase +UART_STAT , val, - (val &STAT_TX_EMP ),1 ,10000 ); + (val &STAT_TX_RDY (port)),1 ,10000 );
I think this line should be indented like the one you replaced.
Thanks,
Miqu?l
Signature · 3 lines
Miquel Raynal, Bootlin (formerly Free Electrons) Embedded Linux and Kernel engineering https://bootlin.com
PATCH 1/1 serial: mvebu-uart: fix tx lost characters
From: Gabriel Matni <[email protected]>
Fixes missing characters on kernel console at low baud rates (i.e.9600). The driver should poll TX_RDY or TX_FIFO_EMP instead of TX_EMP to ensure that the transmitter holding register (THR) is ready to receive a new byte.
TX_EMP tells us when it is possible to send a break sequence via SND_BRK_SEQ. While this also indicates that both the THR and the TSR are empty, it does not guarantee that a new byte can be written just yet.
serial port")
--- drivers/tty/serial/mvebu-uart.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
drivers/tty/serial/mvebu-uart.c +1 -1
@@ -618,7 +618,7 @@ static void wait_for_xmitr(struct uart_port *port)u32 val;readl_poll_timeout_atomic (port->membase +UART_STAT , val, - (val &STAT_TX_EMP ),1 ,10000 ); + (val &STAT_TX_RDY (port)),1 ,10000 ); }static void mvebu_uart_console_putchar (struct uart_port *port,int ch)
Signature · 1 line
2.7.4
Quoted 57 lines
-----Original Message-----
From: Miquel Raynal <[email protected]>
Sent: March 15, 2018 4:22 PM
To: Gabriel Matni <[email protected]>
Cc: gregkh at linuxfoundation.org; linux-serial at vger.kernel.org; linux-arm- kernel at lists.infradead.org; stable at vger.kernel.org; Gr?gory Clement <[email protected]>; Thomas Petazzoni <[email protected]>
Subject: Re: [PATCH] serial: mvebu-uart: fix tx lost charactersHi Gabriel,
Quoted 4 lines · Gabriel Matni
From: Gabriel Matni <[email protected]>
Fixes missing characters on kernel console at low baud rates (i.e.9600). The driver should poll
TX_RDYorTX_FIFO_EMPinstead ofTX_EMPtoensure
drivers/tty/serial/mvebu-
Quoted 17 lines
that the transmitter holding register (THR) is ready to receive a new byte.
TX_EMPtells us when it is possible to send a break sequence viaSND_BRK_SEQ. While this also indicates that both the THR and the TSR are empty, it does not guarantee that a new byte can be written just yet.Fixes 30530791a7a0 ("serial: mvebu-uart: initial support for Armada-3700serial port")
Reviewed-by Miquel Raynal <[email protected]>Acked-by Gregory CLEMENT <[email protected]>Signed-off-by Gabriel Matni <[email protected]>--- drivers/tty/serial/mvebu-uart.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)drivers/tty/serial/mvebu- renamed from drivers/tty/serial/mvebu-uart.c +0
-0
uart.cdrivers/tty/serial/mvebu-uart.c static void wait_for_xmitr(struct uart_port *port) · line 621
Quoted 9 lines
index
a100e98259d7..400e1bc558b2100644drivers/tty/serial/mvebu-uart.c +1
-1@@ -618,7 +618,7 @@ static void wait_for_xmitr(struct uart_port *port)u32 val;readl_poll_timeout_atomic (port->membase +UART_STAT , val, - (val &STAT_TX_EMP ),1 ,10000 ); + (val &STAT_TX_RDY (port)),1 ,10000 );I think this line should be indented like the one you replaced.
Thanks,
Miqu?l--
Miquel Raynal, Bootlin (formerly Free Electrons)
Embedded Linux and Kernel engineering
https://bootlin.com
gregkh at linuxfoundation.org
maintainerPATCH 1/1 serial: mvebu-uart: fix tx lost characters
Quoted 6 lines · Gabriel Matni
From: Gabriel Matni <[email protected]>
Fixes missing characters on kernel console at low baud rates (i.e.9600). The driver should poll
TX_RDYorTX_FIFO_EMPinstead ofTX_EMPto ensure that the transmitter holding register (THR) is ready to receive a new byte.
Quoted 6 lines
TX_EMPtells us when it is possible to send a break sequence viaSND_BRK_SEQ. While this also indicates that both the THR and the TSR are empty, it does not guarantee that a new byte can be written just yet.Fixes 30530791a7a0 ("serial: mvebu-uart: initial support for Armada-3700serial port")
Can all be on one line.
And should this go to the stable trees?
Quoted 3 lines
Reviewed-by Miquel Raynal <[email protected]>Acked-by Gregory CLEMENT <[email protected]>Signed-off-by Gabriel Matni <[email protected]>
Trailing whitespace?
Quoted 4 lines
--- drivers/tty/serial/mvebu-uart.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
What version of this patch is this? How do I know which to accept?
Please properly version your patch, and include the changes below the --- line like the documentation says to do.
thanks,
greg k-h