serial: 8250: Add new 8250-core based Broadcom STB driver
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: kernel test robot <lkp@intel.com> Signed-off-by: Al Cooper <alcooperx@gmail.com> Link: https://lore.kernel.org/r/20210325185256.16156-3-alcooperx@gmail.com Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
Родитель
88a499cd70
Коммит
41a469482d
|
@ -3558,6 +3558,14 @@ S: Supported
|
|||
F: Documentation/devicetree/bindings/i2c/brcm,brcmstb-i2c.yaml
|
||||
F: drivers/i2c/busses/i2c-brcmstb.c
|
||||
|
||||
BROADCOM BRCMSTB UART DRIVER
|
||||
M: Al Cooper <alcooperx@gmail.com>
|
||||
L: linux-serial@vger.kernel.org
|
||||
L: bcm-kernel-feedback-list@broadcom.com
|
||||
S: Maintained
|
||||
F: Documentation/devicetree/bindings/serial/brcm,bcm7271-uart.yaml
|
||||
F: drivers/tty/serial/8250/8250_bcm7271.c
|
||||
|
||||
BROADCOM BRCMSTB USB EHCI DRIVER
|
||||
M: Al Cooper <alcooperx@gmail.com>
|
||||
L: linux-usb@vger.kernel.org
|
||||
|
|
Разница между файлами не показана из-за своего большого размера
Загрузить разницу
|
@ -509,6 +509,16 @@ config SERIAL_8250_TEGRA
|
|||
Select this option if you have machine with an NVIDIA Tegra SoC and
|
||||
wish to enable 8250 serial driver for the Tegra serial interfaces.
|
||||
|
||||
config SERIAL_8250_BCM7271
|
||||
tristate "Broadcom 8250 based serial port"
|
||||
depends on SERIAL_8250 && (ARCH_BRCMSTB || COMPILE_TEST)
|
||||
default ARCH_BRCMSTB
|
||||
help
|
||||
If you have a Broadcom STB based board and want to use the
|
||||
enhanced features of the Broadcom 8250 based serial port,
|
||||
including DMA support and high accuracy BAUD rates, say
|
||||
Y to this option. If unsure, say N.
|
||||
|
||||
config SERIAL_OF_PLATFORM
|
||||
tristate "Devicetree based probing for 8250 ports"
|
||||
depends on SERIAL_8250 && OF
|
||||
|
|
|
@ -38,6 +38,7 @@ obj-$(CONFIG_SERIAL_8250_LPSS) += 8250_lpss.o
|
|||
obj-$(CONFIG_SERIAL_8250_MID) += 8250_mid.o
|
||||
obj-$(CONFIG_SERIAL_8250_PXA) += 8250_pxa.o
|
||||
obj-$(CONFIG_SERIAL_8250_TEGRA) += 8250_tegra.o
|
||||
obj-$(CONFIG_SERIAL_8250_BCM7271) += 8250_bcm7271.o
|
||||
obj-$(CONFIG_SERIAL_OF_PLATFORM) += 8250_of.o
|
||||
|
||||
CFLAGS_8250_ingenic.o += -I$(srctree)/scripts/dtc/libfdt
|
||||
|
|
Загрузка…
Ссылка в новой задаче