Re: [PATCH v2 4/7] serial: 8250: Handle implementations not having TEMT interrupt using em485

From: Maarten Brock
Date: Tue May 05 2020 - 12:39:39 EST


On 2020-05-02 15:49, Lukas Wunner wrote:
On Thu, Mar 26, 2020 at 12:14:19AM +0100, Heiko Stuebner wrote:
Some 8250 ports have a TEMT interrupt but it's not a part of the 8250
standard, instead only available on some implementations.

The current em485 implementation does not work on ports without it.
The only chance to make it work is to loop-read on LSR register.

So add UART_CAP_TEMT to mark 8250 uarts having this interrupt,
update all current em485 users with that capability and make
the stop_tx function loop-read on uarts not having it.

Just to get a better understanding: According to the Dw_apb_uart_db.pdf
databook I've found, the UART does have a "THR empty" interrupt. So you
get an interrupt once the Transmit Holding Register (and by consequence
the FIFO) has been drained. Then what do you need a TEMT interrupt for?
Why is the THR interrupt not sufficient?

When the Transmit Holding Register is empty, the Transmitter can still be
transmitting. And the Driver Enable must be held active during transmission.
I would even say it needs to held active during transmission of the stop bit,
but I don't believe there is any uart that has an interrupt flag for that.
And since the default state for RS485 is '1' anyway it's not that bad.

Maarten