Xilinx DRM KMS SDI-Tx Driver


Table of Contents

The purpose of this page is to describe the Linux DRM driver for Xilinx SDI-Tx Soft IP for Zynq Ultrascale+ MPSOC

Introduction

The Society of Motion Picture and Television Engineers (SMPTE) UHD-SDI transmitter subsystem implements a SDI transmit interface in accordance to the serial digital interface (SDI) family of standards. The subsystem accepts video from AXI-4 Stream Video interface and outputs. Native Video stream, and allows for fast selection of the top-level parameters and automates most of the lower level parameterization. The AXI4-stream video interface allows a seamless interface to other AXI4-Stream-based subsystems. The SMPTE UHD-SDI Transmitter Subsystem allows you to quickly create systems based on SMPTE SDI protocols. It accepts AXI-4 Video stream and outputs native SDI stream by using Xilinx transceivers as physical layer. The top level customization parameters select the required hardware blocks needed to build the subsystem.

Driver Overview

SDITx is the last node in the display pipeline. The Linux driver is implemented as a sub-component of the Xilinx DRM KMS bridge driver and implements the encoder/connector interface. The subsystem includes the video timing controller(VTC), Axi-4 Stream to Video, SDI Tx bridge and Tx sub-core. Driver implements the DRM callbacks to read the supported resolutions from driver and provide to DRM framework anytime queried. On mode change request from user application driver works in conjunction with DRM framework to validate the requested mode to ensure the stream can be generated by Tx core and is supported by the driver. If requested mode is supported the driver will configure Tx sub-core for new mode and the configure the video timing controller (VTC) to generate requisite video timing for it. This driver also supports user parameters for SDi-mode, number of data stream and fractional frame rates.

IP/Driver Features

IP feature2019.1/2020.1/2021.1/2021.2/2022.1/2022.2/2023.1
IP version2.0
Supports AXI4-Stream, native video and native SDI user interfaces.Supports only AXI4-Stream output interface
Support for 2 pixel per sampleYes
10-bit per color componentYes
Supports YUV 4:2:2 and YUV 4:2:0 color spaceYes
AXI4-Lite interface for register access to configure different subsystem optionsYes
Audio supportSeparate driver
Standards compliance
  • SMPTE ST 259: SD-SDI at 270 Mb/s.
  • SMPTE RP 165: EDH for SD-SDI.
  • SMPTE ST 292: HD-SDI at 1.485 Gb/s and 1.485/1.001 Gb/s.
  • SMPTE ST 372: Dual Link HD-SDI.
  • SMPTE ST 424: 3G-SDI with data mapped by any ST 425-x mapping at 2.97 Gb/s and 2.97/1.001 Gb/s.
  • SMPTE ST 2081-1: 6G-SDI with data mapped by any ST 2081-x mapping at 5.94 Gb/s and 5.94/1.001 Gb/s.
  • SMPTE ST 2082-1: 12G-SDI with data mapped by any ST 2082-x mapping at 11.88 Gb/s and 11.88/1.001 Gb/s.
  • Dual link and quad link 6G-SDI and 12G-SDI are supported by instantiating two or four UHD-SDI Receiver subsystems.
  • SMPTE ST 352: Payload ID packets are fully supported.

Yes*







Supports upto 8 data streamsYes
Supports Fractional/Integer framerate

Yes**

Supports progressive/interlaced modesYes**
Supports YUV 4:4:4Yes***
HFR SupportsYes***


Missing Features / Known Issues / Limitations in Driver

  • *Multiple instances capability not tested
  • **Few fractional fps with interlaced modes are recognized as round off value on SDI tester equipment
    • ex: 1920x1080i@47.95 shown 48 fps on Omnitek.
  • Tested with Phabrix and Omnitek Ultra4K

Kernel Configuration Options for Driver

>=2018.1

CONFIG_DRM_XLNX_SDI should be enabled. This depends on CONFIG_DRM_XLNX and CONFIG_DRM


<2018.1
CONFIG_DRM_XILINX_SDI and CONFIG_VIDEO_XILINX should be enabled

Device Tree Binding

The dts node should be defined with correct hardware configuration. How to define the node is documented in
>=2018.1

<2018.1

Documentation/devicetree/bindings/drm/xilinx/sdi.txt



Test Procedure

SDI-Tx can be manually configured to generate the required mode. An open source utility like modetest can be used to configure the display pipeline. Pipeline: DDR ==> Framebuffer read ==> SDI-Tx
Sample command to set a mode is shown below
  • modetest –M xlnx -s <connector_id>[@<crtc_id>]:<mode>[-<vrefresh>][@<format> - w <connector_id>:<property_name>:<property_value>
For ex:
  • modetest -M xlnx -s 27:1280x720-30@YUYV -w 27:sdi_mode:0 -w 27:sdi_data_stream:2 -w 27:is_frac:0
Above command will generate a color bar pattern at requested resolution in DDR, configures the DMA to read the frame from DDR and configures the SDI-TX for said resolution. As a final result Color Bar at defined resolution should be visible on screen.



sdi_modesdi_data_streamTypical resolutions2018.1 and later modetest examples for 8-bit video
HD-SDI02

720p50, 1080p24,25,30 1080i,60


modetest -M xlnx -s 36:1280x720-60@YUYV -w 36:sdi_mode:0 -w 36:sdi_data_stream:2 -w 36:is_frac:0
modetest -M xlnx -s 36:1920x1080-30@YUYV -w 36:sdi_mode:0 -w 36:sdi_data_stream:2 -w 36:is_frac:0
modetest -M xlnx -s 36:1920x1080i-60@YUYV -w 36:sdi_mode:0 -w 36:sdi_data_stream:2 -w 36:is_frac:0
SD-SDI12NTSC, PAL


modetest -M xlnx -s 36:720x486i-60@YUYV -w 36:sdi_mode:1 -w 36:sdi_data_stream:2 -w 36:is_frac:0
modetest -M xlnx -s 36:720x576i-50@YUYV -w 36:sdi_mode:1 -w 36:sdi_data_stream:2 -w 36:is_frac:0
3G-SDI Level A221080p50,60


modetest -M xlnx -s 36:1920x1080-60@YUYV -w 36:sdi_mode:2 -w 36:sdi_data_stream:2 -w 36:is_frac:0
3G-SDI Level B34

1080p24,25,30 (Dual Stream)

6G-SDI482160p25,30


modetest -M xlnx -s 36:3840x2160-30@YUYV -w 36:sdi_mode:4 -w 36:sdi_data_stream:8 -w 36:is_frac:0
12G-SDI58 (default) or 162160p50,60


modetest -M xlnx -s 36:3840x2160-60@YUYV -w 36:sdi_mode:5 -w 36:sdi_data_stream:8 -w 36:is_frac:0

Note:

<2018.1:

Test command will be as follows:

modetest –M xilinx_drm -s <connector_id>[@<crtc_id>]:<mode>[-<vrefresh>][@<format> - w <connector_id>:<property_name>:<property_value>

Debug capability

The driver debug messages can be enabled by adding "#define DEBUG" at the top of the file. All debug prints are sent to serial console and can be viewed in kernel dmesg buffer.

Boards Supported

Driver has been tested on ZCU106 Rev1.0

Known Issues

  • AR68767 - SMPTE UHD-SDI Transmitter Subsystem - Release Notes and Known Issues for the Vivado 2017.3 tool and later versions.

Changelog

2024.1

  • Summary:
    • No changes 

2023.1 & 2023.2

  • Summary:
    • No changes 

2022.2

2022.1

  • Summary:
    • No changes 

2021.2

  • Summary:
    • No changes 

 2021.1

  • Summary:
    • Updated sdi audio parameters
  • Commits:
    • d4ce79 drm: xlnx: sdi: Update sdi audio parameters

2020.2

  • Summary:
    • Add mode_valid helper function
    • Add supported EOTF's list to connector
    • Add support to non-picxo designs
    • Update EOTF and colorimetry fields in payload
    • Fix dynamic clock config to support QPLL1 reset
    • Added clock config to support integer and fractional framerate
  • Commits:
    • 26518e drm: xlnx: sdi: Add mode_valid helper function
    • 13e7b5 drm: xlnx: sdi: Add supported EOTF's list to connector
    • 801956 drm: xlnx: sdi: Add support to non-picxo designs
    • d8b6fd drm: xlnx: sdi: Update EOTF and colorimetry fields in payload
    • 6102a0 drm: xlnx: sdi: Fix dynamic clock config to support QPLL1 reset
    • 06add1 drm: xlnx: sdi: Add clock config to support integer and fractional framerate

2020.1

  • Summary:
    • Updated irq name
  • Commits:
    • 54aef6 drm: xlnx: sdi: Use the named IRQ when available

2019.2

  • No update


2019.1

  • Summary:
    • Updated drm property creation logic
    • Added clock framework support
  • Commits:
    • aa0ca2 drm: xlnx: sdi: Updated drm property creation logic
    • d4a2ef drm: xlnx: sdi: Add clock framework support

2018.3

  • Summary:
    • Added bridge disable under sdi disable
    • Fix clearing en_st352 and use_ds2_3ga drm properties
    • Added support to DS2 payload in 3GA mode
    • Add ST352 payload insertion in chroma stream
    • Enabled support to ancillary data
    • Added video mode hdisplay and flags to shared data
    • Enabled audio
    • Fixed Vertical field 1 size calculation
    • Fixed HSIZE calculation
  • Commits:
    • 9b071b drm: xlnx: sdi: Disable bridge instance
    • 883a92 drm: xlnx: sdi: Fix clearing en_st352_c and use_ds2_3ga drm properties
    • 484c16 drm: xlnx: sdi:  Add support for DS2 payload in 3GA mode
    • 3358cc drm: xlnx: sdi: Add ST352 payload insertion in Chroma stream
    • b755ed drm: xlnx: sdi: Enable support for ancillary data
    • fef944 drm: xlnx: sdi: Add video mode hdisplay, flags to the shared data
    • d42f4f drm: xlnx: sdi: Enable audio
    • c7cacf drm: xlnx: sdi: Fix the Vertical Field 1 Size calculation
    • 5d4a1b drm: xlnx: sdi: Fix the HSIZE calculation

2018.2

  • Summary
    • No change

2018.1

  • Summary:
    • Added YUV420 support
    • Added xlnx bridge support
    • Added initial version based on xlnx drm framework
  • Commits:
    • 0cd279 drm: xlnx: sdi: Adding yuv 420 support
    • 4855d7 drm: xlnx: sdi: Adding xlnx bridge support
    • 5d4a1b drm: xlnx: sdi:

2017.4

2017.3

Related Links



© Copyright 2019 - 2022 Xilinx Inc. Privacy Policy