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

  • None



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

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

© Copyright 2019 - 2022 Xilinx Inc. Privacy Policy