Phil Elwell <phil@xxxxxxxxxxxxxxx> writes: > The BCM2835 MINI UART has non-standard THRE semantics. Conventionally > the bit means that the FIFO is empty (although there may still be a > byte in the transmit register), but on 2835 it indicates that the FIFO > is not full. This causes interrupts after every byte is transmitted, > with the FIFO providing some interrupt latency tolerance. > > A consequence of this difference is that the usual strategy of writing > multiple bytes into the TX FIFO after checking THRE once is unsafe. > In the worst case of 7 bytes in the FIFO, writing 8 bytes loses all > but the first since by then the FIFO is full. > > There is an HFIFO ("Hidden FIFO") capability that causes the transmit > loop to terminate when both THRE and TEMT are set, i.e. when the TX > block is completely idle. This is unnecessarily cautious, potentially > causing gaps in transmission. > > Add a new conditional to the transmit loop, predicated on CAP_MINI, > that exits when THRE is no longer set (the FIFO is full). This allows > the FIFO to fill quickly but subsequent writes are paced by the > transmission rate. > > Signed-off-by: Phil Elwell <phil@xxxxxxxxxxxxxxx> Confirmed the hw behavior, so as far as the platform goes, Acked-by: Eric Anholt <eric@xxxxxxxxxx>
Attachment:
signature.asc
Description: PGP signature