• Al Cooper's avatar
    serial: 8250: Add new 8250-core based Broadcom STB driver · 41a46948
    Al Cooper authored
    Add a UART driver for the new Broadcom 8250 based STB UART. The new
    UART is backward compatible with the standard 8250, but has some
    additional features. The new features include a high accuracy baud
    rate clock system and DMA support.
    
    The driver will use the new optional BAUD MUX clock to select the best
    one of the four master clocks (81MHz, 108MHz, 64MHz and 48MHz) to feed
    the baud rate selection logic for any requested baud rate.  This allows
    for more accurate BAUD rates when high speed baud rates are selected.
    
    The driver will use the new UART DMA hardware if the UART DMA registers
    are specified in Device Tree "reg" property.
    
    The driver also sets the UPSTAT_AUTOCTS flag when hardware flow control
    is enabled. This flag is needed for UARTs that don't assert a CTS
    changed interrupt when CTS changes and AFE (Hardware Flow Control) is
    enabled.
    
    The driver also contains a workaround for a bug in the Synopsis 8250
    core. The problem is that at high baud rates, the RX partial FIFO
    timeout interrupt can occur but there is no RX data (DR not set in
    the LSR register). In this case the driver will not read the Receive
    Buffer Register, which clears the interrupt, and the system will get
    continuous UART interrupts until the next RX character arrives. The
    fix originally suggested by Synopsis was to read the Receive Buffer
    Register and discard the character when the DR bit in the LSR was
    not set, to clear the interrupt. The problem was that occasionally
    a character would arrive just after the DR bit check and a valid
    character would be discarded. The fix that was added will clear
    receive interrupts to stop the interrupt, deassert RTS to insure
    that no new data can arrive, wait for 1.5 character times for the
    sender to react to RTS and then check for data and either do a dummy
    read or a valid read. Debugfs error counters were also added and were
    used to help create test software that would cause the error condition.
    The counters can be found at:
    /sys/kernel/debug/bcm7271-uart/<device-name>/stats
    
    This also includes a few fixes for build warnings reported by
    the kernel test robot.
    Reported-by: default avatarkernel test robot <lkp@intel.com>
    Signed-off-by: default avatarAl Cooper <alcooperx@gmail.com>
    Link: https://lore.kernel.org/r/20210325185256.16156-3-alcooperx@gmail.comSigned-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
    41a46948
Kconfig 18.5 KB