[PATCH 2/2] serial: atmel: don't stop the transmitter when doing PIO
Michael Walle
michael at walle.cc
Wed Nov 23 00:50:20 PST 2022
Am 2022-11-23 09:27, schrieb Jiri Slaby (SUSE):
> Writing ATMEL_US_TXDIS to ATMEL_US_CR makes the transmitter NOT to send
> the just queued character. This means when the character is last and
> uart calls ops->stop_tx(), the character is not sent at all.
>
> The usart datasheet is not much specific on this, it just says the
> transmitter is stopped. But apparently, the character is dropped. So
> we should stop the transmitter only for DMA and PDC transfers to not
> send any more characters. For PIO, this is unexpected and deviates from
> other drivers. In particular, the below referenced commit broke TX as
> it
> added a call to ->stop_tx() after the very last character written to
> the
> transmitter.
>
> So fix this by limiting the write of ATMEL_US_TXDIS to DMA transfers
> only.
>
> Even there, I don't know if it is correctly implemented. Are all the
> queued characters sent once ->start_tx() is called? Anyone tested flow
> control -- be it hard (RTSCTS) or the soft (XOFF/XON) one?
>
> Fixes: 2d141e683e9a ("tty: serial: use uart_port_tx() helper")
> Cc: Richard Genoud <richard.genoud at gmail.com>
> Cc: Nicolas Ferre <nicolas.ferre at microchip.com>
> Cc: Alexandre Belloni <alexandre.belloni at bootlin.com>
> Cc: Claudiu Beznea <claudiu.beznea at microchip.com>
> Cc: linux-arm-kernel at lists.infradead.org
> Reported-by: Michael Walle <michael at walle.cc>
> Signed-off-by: Jiri Slaby (SUSE) <jirislaby at kernel.org>
Already merged, but:
Tested-by: Michael Walle <michael at walle.cc>
Thanks,
-michael
More information about the linux-arm-kernel
mailing list