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

  • 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

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

© Copyright 2019 - 2022 Xilinx Inc. Privacy Policy

OSZAR »