Versal SBSA UART driver

Versal SBSA UART driver

Introduction

The UART controller is a full-duplex asynchronous receiver and transmitter that supports a wide range of programmable baud rates. The server-based system applications (SBSA) functionality is defined by the Arm® architecture.

HW IP Features

  • 32 deep ×8-bit wide transmit FIFO • 32 deep ×12-bit wide receive FIFO

  • Standard asynchronous communication bits (start, stop and parity)

  • Independent interrupt masking:

    • ○ Transmit and receive FIFOs

    • ○ Receive timeout, modem status, and error condition

  • False start bit detection •

  • Line break generation and detection

  • Modem control functions CTS, DCD, DSR, RTS, DTR, and RI

Features supported in driver

  • Uart send recieve

  • Standard asynchronous communication bits (start, stop and parity)

  • Line break generation and detection

  • Modem control functions CTS, DCD, DSR, RTS, DTR, and RI

Missing Features, Known Issues and Limitations

  • Does not support IrDA SIR ENDEC



Kernel Configuration

To enable the uartlite driver in the linux kernel you either have to integrate it or build it as kernel module (.ko). You can enable it with:

make menuconfig ---> Device Drivers ---> Character devices ---> Serial drivers ---> ARM AMBA PL010 serial port support

Or you can do this in the .config file with either of the following lines:

# integrate into the kernel SERIAL_AMBA_PL010=y # build as loadable module SERIAL_AMBA_PL010=m

Devicetree


Here's how the devicetree entry could look like.

https://www.kernel.org/doc/Documentation/devicetree/bindings/serial/pl011.yaml



serial@80120000 { compatible = "arm,pl011", "arm,primecell"; reg = <0x80120000 0x1000>; interrupts = <0 11 4>; dmas = <&dma 13 0 0x2>, <&dma 13 0 0x0>; dma-names = "rx", "tx"; clocks = <&foo_clk>, <&bar_clk>; clock-names = "uartclk", "apb_pclk"; };



Mainline Status

This driver is currently in sync with mainline kernel driver.

Change Log

2025.2

None

b9b15cbb9b

2025.1

 Summary:

  • Use port lock wrappers

  • Do not complain when DMA is absent

  • Convert to platform remove callback returning void

  • convert not to use dma_request_slave_channel()

  • Fix DMA support

  • fix whitespace formatting

  • replace TIOCMBIT macros by static functions

  • avoid quoted string split across lines

  • fix formatting of conditions

  • fix miscellaneous checkpatch warnings

  • unindent pl011_console_get_options function body

  • factor QDF2400 SoC erratum 44 out of probe

  • Fix DMA transmission in RS485 mode

  • Use uart_prepare_sysrq_char()

  • switch from circ_buf to kfifo

  • get rid of useless wrapper pl011_get_rs485_mode()

  • move variable into CONFIG_DMA_ENGINE conditional

  • Introduce wrapper to set @uart_port->cons

Commits:

68ca3e7 - serial: amba-pl011: Use port lock wrappers

6905ab8 - serial: amba-pl011: Do not complain when DMA is absent

788f501 - serial: amba-pl011: Convert to platform remove callback returning void

e6cc394 - serial: amba-pl011: convert not to use dma_request_slave_channel()

58ac1b3 - ARM: PL011: Fix DMA support

d93ebe0 - tty: serial: amba-pl011: fix whitespace formatting

dc00f0c - tty: serial: amba-pl011: replace TIOCMBIT macros by static functions

fd64ff0 - tty: serial: amba-pl011: avoid quoted string split across lines

28a7ec8 - tty: serial: amba-pl011: fix formatting of conditions

826bd77 - tty: serial: amba-pl011: fix miscellaneous checkpatch warnings

8ff8740 - tty: serial: amba-pl011: unindent pl011_console_get_options function body

a49a8b9 - tty: serial: amba-pl011: factor QDF2400 SoC erratum 44 out of probe

3b69e32 - serial: amba-pl011: Fix DMA transmission in RS485 mode

2432f71 - serial: amba-pl011: Use uart_prepare_sysrq_char()

1788cf6 - tty: serial: switch from circ_buf to kfifo

838022d - serial: amba-pl011: get rid of useless wrapper pl011_get_rs485_mode()

255abd4 - serial: amba-pl011: move variable into CONFIG_DMA_ENGINE conditional

eabd460 - serial: core: Introduce wrapper to set @uart_port->cons

2024.2

  • None.

2024.1

 Summary:

  • Use uart_xmit_advance()

  • avoid SBSA UART accessing DMACR register

  • Do not clear RX FIFO & RX interrupt in unthrottle.

  • fix high priority character transmission in rs486

  • set UART011_CR_RXE in pl011_set_termios after port

  • switch ch and flag to u8

  • Explicitly include correct DT includes

Commits:

71a6757 - serial: pl011: Use uart_xmit_advance()

94cdb9f - serial: amba-pl011: avoid SBSA UART accessing DMACR register

032d5a7 - serial: pl011: Do not clear RX FIFO & RX interrupt in unthrottle.

4f39aca - serial: amba-pl011: fix high priority character transmission in rs486

6d8c1fc - serial: pl011: set UART011_CR_RXE in pl011_set_termios after port

fd2b55f - serial: drivers: switch ch and flag to u8

29e5c44 - tty: Explicitly include correct DT includes

2023.2

  • None

2023.1

 Summary:

  • Move header content to .c

  • Fill in rs485_supported

  • Remove serial_rs485 sanitization

  • Take termios_rwsem for ->rs485_config() & pass termios as param

  • UPSTAT_AUTORTS requires .throttle/unthrottle

  • Embed rs485_supported to uart_port

  • Add reg-io-width parameters

  • Make ->set_termios() old ktermios const 

Commits:

9bb13b2 - serial: amba-pl011: move header content to .c

ebe2cf7 - serial: pl011: Fill in rs485_supported

b9759cb - serial: pl011: Remove serial_rs485 sanitization

ae50bb2 - serial: take termios_rwsem for ->rs485_config() & pass termios as param

211565b - serial: pl011: UPSTAT_AUTORTS requires .throttle/unthrottle

0139da5 - serial: Embed rs485_supported to uart_port

400282e - serial: pl011: Add reg-io-width parameters

bec5b81 - serial: Make ->set_termios() old ktermios const

2022.2

  • None

2022.1

 Summary:

  • Add RS485 support

Commits:

8d47923 - serial: amba-pl011: add RS485 support

2021.2

  • None

2021.1

  • None

2020.2

  • None

Related Links

© 2025 Advanced Micro Devices, Inc. Privacy Policy